From 556ab82d99a522248a14d262b43abc841a61ebeb Mon Sep 17 00:00:00 2001 From: core Date: Sun, 26 Nov 2023 22:30:23 -0500 Subject: [PATCH] functional chat --- starkingdoms-client/index.html | 6 +--- starkingdoms-client/src/hub.ts | 56 +++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/starkingdoms-client/index.html b/starkingdoms-client/index.html index 5349d881a46f7e9586b7f15c1f16a24a571850a6..116cb9a22162b26350f760a7097cd718ab2398a6 100644 --- a/starkingdoms-client/index.html +++ b/starkingdoms-client/index.html @@ -69,11 +69,7 @@ Here be dragons! You have a prerelease server selected. Expect bugs, and diff --git a/starkingdoms-client/src/hub.ts b/starkingdoms-client/src/hub.ts index 7619e37738fa1b12ac12b57a785eec22f42086a4..e6cb7a52fa445d13d60e08c32fee84a286c27fcb 100644 --- a/starkingdoms-client/src/hub.ts +++ b/starkingdoms-client/src/hub.ts @@ -1,6 +1,7 @@ import createDebug from "debug"; import { MessagePacket, + MessageType, Packet, PacketType, PartPositionsPacket, @@ -50,6 +51,42 @@ export async function hub_connect(url: string, username: string): Promise { + if (e.key === 'Enter') { + let value = (document.getElementById("chatentry")!).value; + + if (value.startsWith(".msg")) { + let args = value.split(" "); + if (args.length < 3) { + document.getElementById("chatbox")!.innerHTML += `

Command error

`; + (document.getElementById("chatentry")!).value = ""; + return; + } + let target = args[1]; + let message = args.slice(2).join(" "); + let chat_packet: Packet = { + t: PacketType.SendMessage, + c: { + target: target, + content: message + } + }; + sendPacket(client, chat_packet); + document.getElementById("chatbox")!.innerHTML += `

${global.me!.username} -> ${target}: ${message}

`; + } else { + let chat_packet: Packet = { + t: PacketType.SendMessage, + c: { + target: null, + content: value + } + }; + sendPacket(client, chat_packet); + } + (document.getElementById("chatentry")!).value = ""; + } + } + ws.onmessage = (e) => { let packet: Packet = JSON.parse(e.data); @@ -95,6 +132,23 @@ export async function hub_connect(url: string, username: string): Promisepacket.c; logger(`message type=${p.message_type} actor=${p.actor} content=${p.content}`); + + let chatbox = document.getElementById("chatbox")!; + + if (p.message_type == MessageType.Server) { + chatbox.innerHTML += `

[SERVER] ${p.content}

`; + } else if (p.message_type == MessageType.Chat) { + chatbox.innerHTML += `

${p.actor}: ${p.content}

`; + } else if (p.message_type == MessageType.Direct) { + // actor is who sent the message. destination is not included in this packet + if (p.actor === global.me!.username) { + // skip (shown above) + } else { + chatbox.innerHTML += `

${p.actor} -> ${global.me!.username}: ${p.content}

`; + } + } else { + chatbox.innerHTML += `

[SERVER] ${p.content}

`; + } } else { logger(`unrecognized packet type ${packet.t}`); } @@ -103,4 +157,4 @@ export async function hub_connect(url: string, username: string): Promise