app.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. var WebsocketServer = require('websocket').server;
  2. var http = require('http');
  3. var server = http.createServer();
  4. const PORT = 3000 || process.env.PORT
  5. clientsList = [];
  6. server.listen(PORT, () => {
  7. console.log("Server running on http://localhost:" + PORT);
  8. });
  9. var wsServer = new WebsocketServer({httpServer:server});
  10. wsServer.on('request', (websocketRequest) => {
  11. var connection = websocketRequest.accept(null, 'accepted-origin');
  12. clientsList.push(connection);
  13. console.log('A client connected');
  14. connection.on('message', (msg) => {
  15. if(msg.type == 'utf8'){
  16. try {
  17. cd = JSON.parse(msg.utf8Data);
  18. /* Not support multiply room */
  19. if(cd.tag == 'setRoom' && cd.opt == true){
  20. if(connection.roomid == undefined){
  21. connection.roomid = cd.msg;
  22. }
  23. console.log("Set! roomid = " + connection.roomid);
  24. connection.sendUTF(JSON.stringify({
  25. 'tag': 'reply',
  26. 'msg': 'Join room success!',
  27. 'opt': false,
  28. 'arg':{
  29. 'topic': 'JoinRoom'
  30. }
  31. }));
  32. }
  33. if(cd.tag == 'roomcast' && cd.opt == true && cd.arg != undefined){
  34. console.log('Cast!')
  35. BroadcastInRoom(cd.arg.roomid, 'cast', cd.msg);
  36. }else if(cd.opt == true && (cd.arg == undefined || cd.arg == "")){
  37. console.log('Cannot GET arg');
  38. }else{
  39. console.log('Unknown ERROR');
  40. }
  41. if(cd.opt == false){
  42. clientsList.forEach(element => {
  43. element.sendUTF(cd.msg);
  44. });
  45. }
  46. console.log(cd);
  47. } catch (error) {
  48. console.log(error);
  49. console.error('Illegal Data');
  50. }
  51. }else{
  52. console.log(msg);
  53. }
  54. });
  55. connection.on('close', (reasonCode, description) => {
  56. console.log('A client disconnected');
  57. });
  58. })
  59. function BroadcastInRoom(roomid, tag, msg){
  60. clientsList.forEach(element => {
  61. if(element.roomid == roomid){
  62. element.send(JSON.stringify({'tag': tag, 'msg': msg}));
  63. }
  64. });
  65. console.log("CAST!!!!")
  66. }