|
@@ -0,0 +1,71 @@
|
|
|
|
|
+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()
|