diff --git a/models/SimpleUI2.model b/models/SimpleUI2.model index bf240ca..da3b0c3 100644 --- a/models/SimpleUI2.model +++ b/models/SimpleUI2.model @@ -1,5 +1,5 @@ native channel ScreenUpdate { - in screen(curSc: Json, update(nextSc)) = nextSc + in screen(curSc: Json, update(curSc, nextSc)) = nextSc } native channel SetVisible(wid: Str) { diff --git a/src/main/java/com/example/test/rest_controllers/ElementsController.java b/src/main/java/com/example/test/rest_controllers/ElementsController.java new file mode 100644 index 0000000..354b46a --- /dev/null +++ b/src/main/java/com/example/test/rest_controllers/ElementsController.java @@ -0,0 +1,22 @@ +package com.example.test.rest_controllers; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/elements") +public class ElementsController { + + @PostMapping("/buttonPressed") + public void buttonPressed(@RequestParam("id") String id) { + System.out.println("button " + id + " pressed!"); + } + + @PostMapping("/buttonReleased") + public void buttonReleased(@RequestParam("id") String id) { + System.out.println("button " + id + " released!"); + } + +} diff --git a/src/main/java/com/example/test/services/ButtonService.java b/src/main/java/com/example/test/services/ButtonService.java new file mode 100644 index 0000000..0b39ce0 --- /dev/null +++ b/src/main/java/com/example/test/services/ButtonService.java @@ -0,0 +1,19 @@ +package com.example.test.services; + +import org.springframework.stereotype.Service; + +import models.dataConstraintModel.ResourcePath; +import models.dataFlowModel.DataTransferChannel; +import simulator.Resource; +import simulator.Simulator; +import simulator.interfaces.NativeSender; + +@Service +public class ButtonService extends NativeSender{ + + public ButtonService(Simulator simulator, DataTransferChannel channel, ResourcePath resourcePath, + Resource resource) { + super(simulator, channel, resourcePath, resource); + } + +} diff --git a/src/main/resources/static/simulator_ws.js b/src/main/resources/static/simulator_ws.js index 52f151e..4e932f2 100644 --- a/src/main/resources/static/simulator_ws.js +++ b/src/main/resources/static/simulator_ws.js @@ -1,3 +1,4 @@ +const apiUrl = "http://localhost:8080/api" let socket = new WebSocket("ws://localhost:8080/ws"); socket.onmessage = function(event) { @@ -8,7 +9,7 @@ console.log(method); switch(method){ case "updateHtml": - put_htmls(json_data.elements); + put_htmls(json_data.data); break; } @@ -18,7 +19,15 @@ function put_htmls(elements){ let container = document.getElementById("container"); - for(const elem of elements){ + let addElems = elements.add; + let delElems = elements.delete; + for(const id of delElems) { + let elem = document.getElementById(id); + if(elem) { + elem.parentNode.removeChild(elem); + } + } + for(const elem of addElems){ let id = elem.id; let type = elem.type; let styles = elem.styles; @@ -28,14 +37,42 @@ let value = styles[prop]; style += `${prop}: ${value};` } + let style_attribute = Object.keys(styles).lenget > 0 ? `style="${style}"` : ""; switch(type){ case "button": - container.insertAdjacentHTML("beforeend", ``) + container.insertAdjacentHTML("beforeend", ``) + let button = document.getElementById(id); + button.addEventListener("mousedown", buttonPressed); + button.addEventListener("mouseup", buttonReleased); break; } } } +function buttonPressed(event){ + const data = {id: event.target.id}; + const formBody = new URLSearchParams(data); + fetch(`${apiUrl}/elements/buttonPressed`, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: formBody.toString() + }); +} + +function buttonReleased(event) { + const data = {id: event.target.id}; + const formBody = new URLSearchParams(data); + fetch(`${apiUrl}/elements/buttonReleased`, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: formBody.toString() + }); +} + socket.onopen = function(event) { console.log("open socket"); }