Browse Source

Signed-off-by: caner <5658514@qq.com>

caner 3 years ago
parent
commit
9d79e13a0c
4 changed files with 154 additions and 1 deletions
  1. 34 0
      client.js
  2. 0 0
      dataChannelClinet.js
  3. 49 1
      index.js
  4. 71 0
      kcpServer.js

+ 34 - 0
client.js

@@ -0,0 +1,34 @@
+var kcp = require('./build/Release/kcp');
+var kcpobj = new kcp.KCP(110, {address: '127.0.0.1', port: 41234});
+var dgram = require('dgram');
+var client = dgram.createSocket('udp4');
+var msg = 'hello world';
+var idx = 1;
+var interval = 200;
+
+kcpobj.nodelay(0, interval, 0, 0);
+
+kcpobj.output((data, size, context) => {
+    client.send(data, 0, size, context.port, context.address);
+});
+
+client.on('error', (err) => {
+    console.log(`client error:\n${err.stack}`);
+    client.close();
+});
+
+client.on('message', (msg, rinfo) => {
+    kcpobj.input(msg);
+});
+
+
+setInterval(() => {
+    kcpobj.update(Date.now());
+    var recv = kcpobj.recv();
+    if (recv) {
+        console.log(`client recv ${recv}`);
+        kcpobj.send(msg+(idx++));
+    }
+}, interval);
+
+kcpobj.send(msg+(idx++));

+ 0 - 0
dataChannelClinet.js


+ 49 - 1
index.js

@@ -1 +1,49 @@
-module.exports = require('./build/Release/kcp');
+const kcp = require('./build/Release/kcp');
+const dgram = require('dgram');
+const server = dgram.createSocket('udp4');
+const clients = {};
+const interval = 200;
+
+const output = function (data, size, context) {
+    server.send(data, 0, size, context.port, context.address);
+};
+
+server.on('error', (err) => {
+    console.log(`server error:\n${err.stack}`);
+    server.close();
+});
+
+server.on('message', (msg, rinfo) => {
+    const k = rinfo.address + '_' + rinfo.port;
+    if (undefined === clients[k]) {
+        const context = {
+            address: rinfo.address,
+            port: rinfo.port
+        };
+        const kcpobj = new kcp.KCP(123, context);
+        kcpobj.nodelay(0, interval, 0, 0);
+        kcpobj.output(output);
+        clients[k] = kcpobj;
+    }
+    const kcpobj = clients[k];
+    kcpobj.input(msg);
+    console.log(1,recv);
+});
+
+server.on('listening', () => {
+    const address = server.address();
+    console.log(`server listening ${address.address} : ${address.port}`);
+    // setInterval(() => {
+    //     for (const k in clients) {
+    //         const kcpobj = 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);
+    //         }
+    //     }
+    // }, interval);
+});
+
+server.bind(41234);

+ 71 - 0
kcpServer.js

@@ -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()