95 lines
2.7 KiB
TypeScript
95 lines
2.7 KiB
TypeScript
|
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<TeraNamespace>(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 }
|