diff --git a/models/SimpleUI2.model b/models/SimpleUI2.model new file mode 100644 index 0000000..bf240ca --- /dev/null +++ b/models/SimpleUI2.model @@ -0,0 +1,35 @@ +native channel ScreenUpdate { + in screen(curSc: Json, update(nextSc)) = nextSc +} + +native channel SetVisible(wid: Str) { + in screen.widgets.{wid}.visible(curVisible: Bool, setVisible(nextVisible)) = nextVisible +} + +native channel SetText(wid: Str) { + in screen.widgets.{wid}.text(curText: Str, setText(nextText)) = nextText +} + +native channel MouseEvent(wid: Str) { + out screen.widgets.{wid}.state(curState: Int, mouseEvent(nextState)) = nextState +} + +native channel TextEvent(wid: Str) { + out screen.widgets.{wid}.text(curText: Str, textEvent(nextText)) = nextText +} + +channel AddButton { + out screen.widgets(widgets: Map, addButton(wid: Str, text: Str)) = insert(widgets, wid, {"type": "button", "text": text, "state": 0}) +} + +channel AddLabel { + out screen.widgets(widgets: Map, addLabel(wid: Str, text: Str)) = insert(widgets, wid, {"type": "label", "text": text, "state": 0}) +} + +channel AddInputText { + out screen.widgets(widgets: Map, addInputText(wid: Str)) = insert(widgets, wid, {"type": "inputText", "state": 0}) +} + +channel Init { + out screen.widgets(widgets: Map, init(_tmp)) = insert(insert(widgets, "0", {"type": "button", "text": "OK", "state": 0}), "1", {"type": "button", "text": "hi", "state": 0}) +} diff --git a/src/main/java/com/example/test/dtram/Dtram.java b/src/main/java/com/example/test/dtram/Dtram.java index 927ab94..c5c0bdf 100644 --- a/src/main/java/com/example/test/dtram/Dtram.java +++ b/src/main/java/com/example/test/dtram/Dtram.java @@ -6,8 +6,21 @@ import org.springframework.stereotype.Component; +import models.algebra.Expression; +import models.algebra.InvalidMessage; +import models.algebra.ParameterizedIdentifierIsFutureWork; +import models.algebra.UnificationFailed; +import models.algebra.ValueUndefined; +import models.dataConstraintModel.ChannelMember; +import models.dataConstraintModel.ResourcePath; +import models.dataFlowModel.DataTransferChannel; import models.dataFlowModel.DataTransferModel; +import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork; import parser.Parser; +import parser.exceptions.ExpectedColon; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.WrongJsonExpression; +import simulator.Event; import simulator.Simulator; import simulator.interfaces.html.HtmlPresenter; import simulator.interfaces.html.IWebSocketMessageSender; @@ -32,7 +45,7 @@ try { Parser parser = new Parser(new BufferedReader(new FileReader(file))); model = parser.doParse(); - System.out.println(model); + model.getInputChannel("Init"); }catch(Exception e) { } @@ -40,7 +53,28 @@ public void startSimulator() { simulator = new Simulator(model); + simulator.init(); presenter = new HtmlPresenter(simulator, ws); + System.out.println(simulator.getCurState().getResource("screen.widgets")); + try { + Parser.TokenStream stream = new Parser.TokenStream(); + Parser p = new Parser(stream); + stream.addLine("init(\"\")"); + Expression eventMessage = p.parseTerm(stream, model); + + ResourcePath eventResPath = null; + DataTransferChannel initChannel = (DataTransferChannel) model.getInputChannel("Init"); + for(ChannelMember out: initChannel.getOutputChannelMembers()) { + eventResPath = out.getResource(); + } + Event newEvent = new Event(initChannel, eventMessage, eventResPath, simulator.getCurState().getResource("screen.widgets")); + simulator.transition(newEvent); + + } catch (ExpectedRightBracket | WrongJsonExpression | ExpectedColon | + ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) { + // TODO 自動生成された catch ブロック + e.printStackTrace(); + } } diff --git a/src/main/resources/static/simulator_ws.js b/src/main/resources/static/simulator_ws.js index ece2a6e..52f151e 100644 --- a/src/main/resources/static/simulator_ws.js +++ b/src/main/resources/static/simulator_ws.js @@ -3,10 +3,39 @@ socket.onmessage = function(event) { console.log(event.data); + let json_data = JSON.parse(event.data); + let method = json_data.method; + console.log(method); + switch(method){ + case "updateHtml": + put_htmls(json_data.elements); + break; + } } + +function put_htmls(elements){ + let container = document.getElementById("container"); + for(const elem of elements){ + let id = elem.id; + let type = elem.type; + let styles = elem.styles; + let text = elem.text; + let style = ""; + for(const prop in styles){ + let value = styles[prop]; + style += `${prop}: ${value};` + } + switch(type){ + case "button": + container.insertAdjacentHTML("beforeend", ``) + break; + } + } +} + socket.onopen = function(event) { console.log("open socket"); }