mirror of
https://github.com/crystelf/crystelf-core.git
synced 2025-07-04 14:49:19 +00:00
还是优化ws
This commit is contained in:
parent
55627d586c
commit
a996bed065
@ -1,43 +1,62 @@
|
||||
import { AuthenticatedSocket } from '../../types/ws';
|
||||
import wsTools from '../../utils/ws/wsTools';
|
||||
import * as ws from 'ws';
|
||||
import { WebSocket } from 'ws';
|
||||
import logger from '../../utils/core/logger';
|
||||
|
||||
type WebSocket = ws.WebSocket;
|
||||
type MessageHandler = (socket: WebSocket, msg: any) => Promise<void>;
|
||||
|
||||
class WSMessageHandler {
|
||||
private handlers: Map<string, MessageHandler>;
|
||||
|
||||
constructor() {
|
||||
this.handlers = new Map([
|
||||
['test', this.handleTest],
|
||||
['ping', this.handlePing],
|
||||
]);
|
||||
}
|
||||
|
||||
async handle(socket: AuthenticatedSocket, clientId: string, msg: any) {
|
||||
try {
|
||||
switch (msg.type) {
|
||||
case 'test':
|
||||
await this.handleTest(socket);
|
||||
break;
|
||||
case 'ping':
|
||||
await wsTools.send(socket, { type: 'pong' });
|
||||
break;
|
||||
default:
|
||||
await this.handleUnknown(socket);
|
||||
const handler = this.handlers.get(msg.type);
|
||||
|
||||
if (handler) {
|
||||
await handler(socket, msg);
|
||||
} else {
|
||||
await this.handleUnknown(socket, msg);
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error(`ws消息处理时出错: ${err}`);
|
||||
await wsTools.send(socket, {
|
||||
type: 'error',
|
||||
message: 'Processing failed',
|
||||
message: 'error message',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private async handleTest(socket: WebSocket) {
|
||||
private async handleTest(socket: WebSocket, msg: any) {
|
||||
//logger.info(`消息测试[test]`);
|
||||
await wsTools.send(socket, {
|
||||
type: 'test',
|
||||
data: { status: 'ok' },
|
||||
});
|
||||
}
|
||||
|
||||
private async handleUnknown(socket: WebSocket) {
|
||||
private async handlePing(socket: WebSocket, msg: any) {
|
||||
//logger.info(`ping`);
|
||||
await wsTools.send(socket, { type: 'pong' });
|
||||
}
|
||||
|
||||
private async handleUnknown(socket: WebSocket, msg: any) {
|
||||
logger.warn(`收到未知消息类型: ${msg.type}`);
|
||||
await wsTools.send(socket, {
|
||||
type: 'error',
|
||||
message: 'Unknown message type',
|
||||
message: `未知消息类型: ${msg.type}`,
|
||||
});
|
||||
}
|
||||
|
||||
public registerHandler(type: string, handler: MessageHandler): void {
|
||||
this.handlers.set(type, handler);
|
||||
}
|
||||
}
|
||||
|
||||
const wsHandler = new WSMessageHandler();
|
||||
|
@ -70,11 +70,7 @@ class WSServer {
|
||||
}
|
||||
|
||||
private isAuthMessage(msg: WSMessage): msg is AuthMessage {
|
||||
return (
|
||||
msg.type === 'auth' &&
|
||||
typeof (msg as AuthMessage).secret === 'string' &&
|
||||
typeof (msg as AuthMessage).clientId === 'string'
|
||||
);
|
||||
return msg.type === 'auth';
|
||||
}
|
||||
|
||||
private async handleAuth(socket: AuthenticatedSocket, msg: AuthMessage, ip: string) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user