| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- const kcp = require('./build/Release/kcp')
- const dgram = require('dgram');
- const server = dgram.createSocket('udp4');
- /**
- * @params ID 通信id: 110
- * @pramss port 端口默认: 41234
- * @params type 工作模式: 急速1 | 默认普通0
- */
- class KcpServer {
- constructor(ID = 110, port = 41234, type = 0) {
- this.ID = ID
- this.port = port
- this.type = type
- this.clients = {}
- this.timer = null
- this.output = (data, size, context) => server.send(data, 0, size, context.port, context.address)
- this.Init()
- }
- // init
- Init() {
- server.bind(this.port);
- server.on('listening', () => {
- console.log(66,JSON.stringify(server));
- const address = server.address();
- console.log(`server listening ${address.address} : ${address.port}`);
- const time = this.type ? 10 : 50
- this.timer = setInterval(() => {
- for (const k in this.clients) {
- const kcpobj = this.clients[k];
- kcpobj.update(Date.now());
- const recv = kcpobj.recv();
- if (recv) {
- console.log(`server recv ${recv} from ${kcpobj.context().address}:${kcpobj.context().port}`);
- kcpobj.send('RE-' + recv);
- }
- }
- }, time);
- })
- server.on('message', (msg, rinfo) => {
- const k = rinfo.address + '_' + rinfo.port;
- if (undefined === this.clients[k]) {
- const context = {
- address: rinfo.address,
- port: rinfo.port
- };
- this.clients[k] = new kcp.KCP(this.ID, context);
- if(this.type){
- this.clients[k].nodelay(1, 10, 2, 1);
- }else{
- this.clients[k].nodelay(0, 50, 0, 0);
- }
- this.clients[k].output(this.output);
- }
- this.clients[k].input(msg);
- })
- server.on('error', er => {
- clearInterval(this.timer)
- this.clients = {}
- this.timer = null
- })
- }
- }
- new KcpServer()
|