feat: add adapter and socket

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2020-03-23 00:58:53 +08:00
parent ace2c48ae2
commit f4b461409b
10 changed files with 429 additions and 172 deletions

View File

@@ -7,9 +7,9 @@ import { SocketIO } from './interfaces'
const parser = new Parser();
export class SocketIOClient implements SocketIO.Client {
export class Client extends EventEmitter implements SocketIO.Client {
private nettyClient: NettyClient;
private event: EventEmitter
private event: EventEmitter;
private _id: string;
server: SocketIO.Server;
@@ -18,67 +18,37 @@ export class SocketIOClient implements SocketIO.Client {
sockets: { [id: string]: SocketIO.Socket; };
nsps: { [nsp: string]: SocketIO.Socket; };
constructor(nettyClient: NettyClient) {
this.event = new EventEmitter()
constructor(server: SocketIO.Server, nettyClient: NettyClient) {
super();
this.server = server;
this.event = new EventEmitter();
this.conn = nettyClient;
this.nettyClient = nettyClient;
this._id = this.nettyClient.id;
this.event.emit('connect', this);
this.nettyClient.on(ServerEvent.message, (text) => this.process(text))
}
get id() {
return this._id;
}
connect() {
this.packet({
type: PacketTypes.OPEN,
data: {
sid: this._id,
upgrades: [],
pingInterval: 25000,
pingTimeout: 5000
}
})
this.packet({
type: PacketTypes.MESSAGE,
sub_type: SubPacketTypes.CONNECT
})
on(event: string, callback: (...args: any[]) => void) {
this.event.on(event, callback);
return this
}
emit(event: string, data: any) {
emit(event: string, ...args: any[]): boolean {
this.packet({
type: PacketTypes.MESSAGE,
sub_type: SubPacketTypes.EVENT,
name: event,
data
data: args[0]
})
return true;
}
send(data: any) {
this.emit("message", data);
}
process(packet: Packet) {
this.event.emit(packet.name, packet.data);
}
packet(packet: Packet) {
this.nettyClient.send(parser.encode(packet))
}
private process(text: string) {
let packet = parser.decode(text);
switch (packet.type) {
case PacketTypes.OPEN:
break;
case PacketTypes.PING:
this.packet({
type: PacketTypes.PONG
})
break;
case PacketTypes.MESSAGE:
switch (packet.sub_type) {
case SubPacketTypes.CONNECT:
this.nettyClient.send(text);
break;
case SubPacketTypes.EVENT:
this.event.emit(packet.name, packet.data);
break;
}
break;
}
}
}