udpserver.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. var kcp = require('./../build/Release/kcp');
  2. var dgram = require('dgram');
  3. var server = dgram.createSocket('udp4');
  4. var clients = {};
  5. var interval = 200;
  6. var output = function(data, size, context) {
  7. server.send(data, 0, size, context.port, context.address);
  8. };
  9. server.on('error', (err) => {
  10. console.log(`server error:\n${err.stack}`);
  11. server.close();
  12. });
  13. server.on('message', (data, rinfo) => {
  14. var k = rinfo.address+'_'+rinfo.port;
  15. if (undefined === clients[k]) {
  16. var context = {
  17. address : rinfo.address,
  18. port : rinfo.port
  19. };
  20. var kcpobj = new kcp.KCP(123, context);
  21. kcpobj.stream(1);
  22. kcpobj.nodelay(0, interval, 0, 0);
  23. kcpobj.output(output);
  24. clients[k] = kcpobj;
  25. }
  26. var kcpobj = clients[k];
  27. kcpobj.input(data);
  28. var recv = kcpobj.recv();
  29. if (recv) {
  30. recv = recv.toString();
  31. console.log(`Server recv ${recv} from ${kcpobj.context().address}:${kcpobj.context().port}`);
  32. kcpobj.send('RE-'+recv);
  33. }
  34. });
  35. server.on('listening', () => {
  36. var address = server.address();
  37. console.log(`server listening ${address.address} : ${address.port}`);
  38. setInterval(() => {
  39. for (var k in clients) {
  40. var kcpobj = clients[k];
  41. kcpobj.update(Date.now());
  42. }
  43. }, interval);
  44. });
  45. server.bind(41234);