import type { WSContext } from "hono/ws"; import type { ContainerInfo, ContainerStats } from "./types.js"; export function sendContainerInfo( containerClients: Set>, containerInfo: ContainerInfo | ContainerInfo[] ) { const containers = Array.isArray(containerInfo) ? containerInfo : [containerInfo]; const payload = JSON.stringify({ containers }); sendToClientSet(containerClients, payload); } export function sendStats( statsClients: Set>, stats: ContainerStats ) { const payload = JSON.stringify({ stats: [stats] }); sendToClientSet(statsClients, payload); } export function sendCombined( combinedClients: Set>, containerInfo: ContainerInfo, stats: ContainerStats ) { const payload = JSON.stringify({ containers: [containerInfo], stats: [stats], }); sendToClientSet(combinedClients, payload); } export function sendToSingleContainer( singleContainerClients: Map>>, containerId: string, containerInfo: ContainerInfo, stats: ContainerStats ) { const combinedData = { ...containerInfo, ...stats, }; const payload = JSON.stringify({ container: combinedData }); const clients = singleContainerClients.get(containerId); if (clients) { sendToClientSet(clients, payload); } } export function sendToClientSet( clients: Set>, payload: string ) { for (const ws of clients) { if (ws.readyState === 1) { try { ws.send(payload); } catch (err) { console.error("Error sending to client:", err); clients.delete(ws); } } else { clients.delete(ws); } } }