12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import
- ../server_api/api,
- asyncdispatch,
- httpclient,
- nodesnim,
- json
- var
- thr: Thread[tuple[scene: ptr SceneRef, username: ptr string, timed_chat: ptr seq[JsonNode]]]
- gradient = GradientDrawable()
- gradient.setCornerColors(Color("#C9D6FF"), Color("#C9D6FF"), Color("#E2E2E2"), Color("#E2E2E2"))
- build:
- - Scene (chat_scene):
- call rename("Chat")
- - Control background:
- call rename("background")
- call setBackground(gradient)
- call setSizeAnchor(1, 1)
- - Label chat:
- call rename("chat")
- call setSizeAnchor(1, 1)
- - EditText message:
- call setSizeAnchor(0.95, 0.15)
- call setAnchor(0.5, 1, 0.5, 1.2)
- call setStyle(style({
- border-radius: 8,
- border-detail: 8,
- background-color: rgba(50, 60, 70, 0.5)
- }))
- proc listenChat(arg: tuple[scene: ptr SceneRef, username: ptr string, timed_chat: ptr seq[JsonNode]]) {.thread.} =
- var client = newAsyncHttpClient()
- while true:
- var
- response = waitFor client.get("http://127.0.0.1:5000/getchat")
- text = stext""
- arg.timed_chat[] = parseJson(waitFor response.body())["data"].getElems
- var i = 0
- while i < arg.timed_chat[].len:
- text &= (stext arg.timed_chat[][i].str & stext": " & stext arg.timed_chat[][i+1].str & stext("\n\n"))
- inc i, 2
- text.setColor(Color("#123"))
-
- arg.scene[].getNode("background/chat").LabelRef.text = text
- waitFor sleepAsync(100)
- background@onEnter(self):
- createThread(thr, listenChat, (chat_scene.addr, username.addr, timed_chat.addr))
- background@onInput(self, event):
- if isActionJustPressed("send"):
- if message.getText().len > 0:
- sendMessage(message.getText())
- message.setText("")
|