diff --git a/demo-edit-es-module/src/main/java/org/sudu/experiments/esm/JsRemoteEditor.java b/demo-edit-es-module/src/main/java/org/sudu/experiments/esm/JsRemoteEditor.java index 559135a9f..ae9ab61f5 100644 --- a/demo-edit-es-module/src/main/java/org/sudu/experiments/esm/JsRemoteEditor.java +++ b/demo-edit-es-module/src/main/java/org/sudu/experiments/esm/JsRemoteEditor.java @@ -9,6 +9,7 @@ import org.sudu.experiments.diff.JsViewController; import org.sudu.experiments.editor.*; import org.sudu.experiments.js.*; +import org.sudu.experiments.protocol.JsCast; import org.teavm.jso.JSObject; import org.teavm.jso.core.JSString; @@ -27,6 +28,24 @@ public JsRemoteEditor( editor = demoEdit0().editor(); if (args.hasTheme()) setTheme(args.getTheme()); controller = new JsEditorViewController0(); + channel.setOnMessage(this::onMessage); + editor.setOnDiffMadeListener((_1, _2, _3) -> onEdit()); + } + + private void onMessage(JsArray jsArray) { + String source = JsCast.string(jsArray, 0); + String encoding = JsCast.string(jsArray, 1); + String name = JsCast.string(jsArray, 2); + editor.openFile(source, encoding, name); + } + + private void onEdit() { + JSString source = JsCast.jsString(editor.model().document.makeString()); + JSString encoding = JSString.valueOf(editor.model().encoding()); + JsArray jsArray = JsArray.create(); + jsArray.set(0, source); + jsArray.set(1, encoding); + channel.sendMessage(jsArray); } @Override diff --git a/filediff-node-module/src/main/java/org/sudu/experiments/update/FileEditChannelUpdater.java b/filediff-node-module/src/main/java/org/sudu/experiments/update/FileEditChannelUpdater.java index 6a84c5f34..9d3211655 100644 --- a/filediff-node-module/src/main/java/org/sudu/experiments/update/FileEditChannelUpdater.java +++ b/filediff-node-module/src/main/java/org/sudu/experiments/update/FileEditChannelUpdater.java @@ -6,6 +6,7 @@ import org.sudu.experiments.encoding.JsTextFileReader; import org.sudu.experiments.js.JsArray; import org.sudu.experiments.js.JsHelper; +import org.sudu.experiments.protocol.JsCast; import org.teavm.jso.JSObject; import org.teavm.jso.core.JSString; @@ -17,6 +18,7 @@ public class FileEditChannelUpdater { public FileEditChannelUpdater(Channel channel) { this.channel = channel; + this.channel.setOnMessage(this::onMessage); } public void setFile(FileHandle fileHandle) { @@ -24,6 +26,12 @@ public void setFile(FileHandle fileHandle) { JsTextFileReader.read(handle, this::sendMessage, this::onError); } + public void onMessage(JsArray jsArray) { + String source = JsCast.string(jsArray, 0); + String encoding = JsCast.string(jsArray, 1); + handle.writeText(source, encoding, () -> {}, this::onError); + } + public void sendMessage(JSString source, JSString encoding) { if (debug) LoggingJs.debug(JsHelper.concat( "FileEditChannelUpdater.sendMessage, length = " + source.getLength()