avocado-old/packages/server/socket.js

45 lines
1012 B
JavaScript
Raw Normal View History

2019-03-17 23:45:48 -05:00
const {EventEmitter} = require('events');
const SocketServer = require('socket.io');
2019-04-11 15:26:13 -05:00
import {SocketIoParser, allPackets, idFromPacket} from '@avocado/packet';
2019-03-17 23:45:48 -05:00
export class Server extends EventEmitter {
constructor(httpServer) {
super();
this.io = new SocketServer(httpServer, {
2019-04-11 15:26:13 -05:00
parser: SocketIoParser,
2019-03-17 23:45:48 -05:00
path: '/avocado',
2019-04-12 00:09:25 -05:00
perMessageDeflate: false,
2019-03-17 23:45:48 -05:00
serveClient: false,
});
this.io.on('connect', (socket) => {
2019-04-11 15:26:13 -05:00
this.emit('connect', new ServerSocket(socket));
2019-03-17 23:45:48 -05:00
});
}
2019-04-11 15:26:13 -05:00
}
class ServerSocket extends EventEmitter {
constructor(socket) {
super();
this.socket = socket;
for (const Packet of allPackets()) {
const id = idFromPacket(Packet);
this.socket.on(id, (packet) => {
this.emit('packet', packet);
});
}
2019-04-11 16:16:56 -05:00
this.socket.on('disconnect', (...args) => {
this.emit('disconnect', ...args);
});
2019-04-11 15:26:13 -05:00
}
send(packet) {
const id = idFromPacket(packet.constructor);
this.socket.emit(id, packet.data);
2019-03-17 23:45:48 -05:00
}
}