import { CcServerBoot } from '@cc-server/core' import { namespace, listener, io, TYPE, interfaces } from '@cc-server/ws' import { Namespace } from 'socket.io'; import { Container } from 'inversify'; let pows: io.Socket[] = []; @namespace('/main') class TeraNamespace implements interfaces.Namespace { nsp: Namespace; @listener() webclient(socket: io.Socket) { socket.join('web'); global.ToLog(`${socket.id} WebClient Connected...`) } @listener() web(socket: io.Socket, msg: any) { socket.to('web').send('Recover From Pow: ' + JSON.stringify(msg)) } @listener() webmsg(socket: io.Socket, msg: any) { global.ToLog(`Recover webmsg ${JSON.stringify(msg)}`) switch (msg.cmd) { case "list": socket.send(`Client List:`) let index = 0; for (let id in pows) { const pow = pows[id]; socket.send(`${index} => ${pow.id}: ${pow.conn.remoteAddress}`) index++ } break; case "pow": socket.send('Join Pow Room...') socket.join('pow') break; case "leavepow": socket.leave('pow') socket.send('Leave Pow Room...') break; } } @listener() powclient(socket: io.Socket) { pows[socket.id] = socket; // global.ToLog(`${socket.id} PowClient Connected...`) } @listener() message(socket: io.Socket, msg: any) { socket.to('pow').send(`${JSON.stringify(msg)}`) switch (msg.cmd) { case "POW": global.SERVER.MiningProcess(msg); break; case "HASHRATE": global.ADD_HASH_RATE(msg.CountNonce); break; } } disconnect(socket: io.Socket) { // socket.to('web').send(`Client ${socket.id} ${socket.conn.remoteAddress} disconnect...`) delete pows[socket.id] } } let container = new Container(); let WsServer = new CcServerBoot(container).build(); function getServer(): TeraNamespace { return container.getNamed(TYPE.Namespace, TeraNamespace.name); } function getNamespace(): Namespace { return getServer().nsp; } function SendToClient(msg: any) { getNamespace().to('pow').send(JSON.stringify(msg)) let index = 0; for (let id in pows) { const pow = pows[id]; if (typeof msg === "object") { msg.Num = index; } pow.send(msg) index++ } } function SendToWebClient(msg: any) { getNamespace().to('web').send(msg) } export { WsServer, SendToClient, SendToWebClient }