Implemented starting and stopping listeners from the ImGui client.

This commit is contained in:
Jakob Friedl
2025-09-27 13:54:12 +02:00
parent 933a72f920
commit ceba377939
11 changed files with 61 additions and 183 deletions

85
src/server/websocket.nim Normal file
View File

@@ -0,0 +1,85 @@
import mummy
import times, tables, json, base64, parsetoml
import ./utils
import ../common/[types, utils, serialize, event]
export sendHeartbeat, recvEvent
#[
Server -> Client
]#
proc sendProfile*(client: UIClient, profile: Profile) =
let event = Event(
eventType: CLIENT_PROFILE,
timestamp: now().toTime().toUnix(),
data: %*{
"profile": profile.toTomlString()
}
)
if client != nil:
client.ws.sendEvent(event)
proc sendEventlogItem*(client: UIClient, logType: LogType, message: string) =
let event = Event(
eventType: CLIENT_EVENTLOG_ITEM,
timestamp: now().toTime().toUnix(),
data: %*{
"logType": cast[uint8](logType),
"message": message
}
)
if client != nil:
client.ws.sendEvent(event)
proc sendAgent*(client: UIClient, agent: Agent) =
let event = Event(
eventType: CLIENT_AGENT_ADD,
timestamp: now().toTime().toUnix(),
data: %agent
)
if client != nil:
client.ws.sendEvent(event)
proc sendListener*(client: UIClient, listener: Listener) =
let event = Event(
eventType: CLIENT_LISTENER_ADD,
timestamp: now().toTime().toUnix(),
data: %listener
)
if client != nil:
client.ws.sendEvent(event)
proc sendAgentCheckin*(client: UIClient, agentId: string) =
let event = Event(
eventType: CLIENT_AGENT_CHECKIN,
timestamp: now().toTime().toUnix(),
data: %*{
"agentId": agentId
}
)
if client != nil:
client.ws.sendEvent(event)
proc sendAgentPayload*(client: UIClient, agentId: string, bytes: seq[byte]) =
let event = Event(
eventType: CLIENT_AGENT_PAYLOAD,
timestamp: now().toTime().toUnix(),
data: %*{
"agentId": agentId,
"payload": encode(bytes)
}
)
if client != nil:
client.ws.sendEvent(event)
proc sendConsoleItem*(client: UIClient, agentId: string, logType: LogType, message: string) =
let event = Event(
eventType: CLIENT_CONSOLE_ITEM,
timestamp: now().toTime().toUnix(),
data: %*{
"agentId": agentId,
"logType": cast[uint8](logType),
"message": message
}
)
if client != nil:
client.ws.sendEvent(event)