- 新增 DataProcesser 类,用于处理数据包和管理会话 - 在 GateServer 中添加客户端管理、广播消息和服务器停止功能 - 优化 GateServer 的连接处理逻辑,增加客户端 ID 和信号处理
70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
class DataProcesser {
|
|
constructor(maxSessionCount) {
|
|
this.maxSessionCount = maxSessionCount;
|
|
this.activeUser = 0;
|
|
this.sessions = new Array(maxSessionCount).fill(null);
|
|
this.sendThreads = [];
|
|
this.recvQueue = [];
|
|
this.serverBuf = { buffer: null, size: 0, offset: 0 };
|
|
this.userVerify = 1;
|
|
this.processRecvSize = 0;
|
|
this.waitSendUserSize = 0;
|
|
this.waitSendQueueSize = 0;
|
|
this.sendUserSize = 0;
|
|
this.recvSeverSize = 0;
|
|
this.lastProcUsrMsgTime = 0;
|
|
this.lastProcSrvMsgTime = 0;
|
|
this.lastRecvSrvMsgTime = 0;
|
|
this.procSrvThreadSleep = 0;
|
|
this.sendQueueSize = 0;
|
|
this.ignoreDataPacket = 0;
|
|
this.sndThreadSleepTime = 20;
|
|
}
|
|
|
|
initSessions() {
|
|
for (let i = 0; i < this.maxSessionCount; i++) {
|
|
this.sessions[i] = {
|
|
socket: null,
|
|
serverIdx: 0,
|
|
packetIdx: 0,
|
|
packetError: 0,
|
|
recvPacketCount: 0,
|
|
sendPacketCount: 0,
|
|
markToClose: false,
|
|
remoteClosed: false,
|
|
sendAvaliable: true,
|
|
sendTimeout: 0,
|
|
closeTick: 0,
|
|
connectTick: Date.now(),
|
|
clientMsgTick: Date.now(),
|
|
serverMsgTick: Date.now(),
|
|
verifyIdx: this.userVerify++,
|
|
recvBuf: { buffer: null, size: 0, offset: 0 },
|
|
sendBuf: { buffer: null, size: 0, offset: 0 }
|
|
};
|
|
}
|
|
}
|
|
|
|
processUserRecvPacket(session, buffer, bufferSize) {
|
|
// 处理用户接收到的数据包
|
|
// 这里需要实现具体的数据处理逻辑
|
|
}
|
|
|
|
sendServerMessage(ident, sessionIdx, socket, serverIdx, buffer, bufferSize) {
|
|
// 发送消息到服务器
|
|
// 这里需要实现具体的消息发送逻辑
|
|
}
|
|
|
|
startup() {
|
|
this.initSessions();
|
|
// 启动数据处理线程
|
|
// 这里需要实现具体的线程启动逻辑
|
|
}
|
|
|
|
stop() {
|
|
// 停止数据处理线程
|
|
// 这里需要实现具体的线程停止逻辑
|
|
}
|
|
}
|
|
|
|
module.exports = DataProcesser; |