Advertisement
Guest User

Untitled

a guest
Mar 6th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.31 KB | None | 0 0
  1. 'use strict';
  2.  
  3. const express = require('express');
  4. const SocketServer = require('ws').Server;
  5. const path = require('path');
  6.  
  7. const PORT = process.env.PORT || 5000;
  8. const mdburi = process.env.MONGODB_URI;
  9. var MongoClient = require('mongodb').MongoClient
  10.  
  11. const IP = process.env.IP || '0.0.0.0'
  12.  
  13. const server = express()
  14. .listen(PORT, () => console.log(`Listening on ${ PORT }`));
  15.  
  16. const wss = new SocketServer({ server });
  17.  
  18. // registered account
  19. var accounts = []
  20. //current rooms
  21. var currentRooms = []
  22. //users that are connected and logged in
  23. var players = []
  24.  
  25. function makeroom(ttitle, ddesc, pw) {
  26. return {
  27. name : ttitle,
  28. desc : ddesc,
  29. pass : pw,
  30. players : []
  31. }
  32. }
  33. function makeplayer(uuser, ppass, wws) {
  34. return {
  35. user : uuser,
  36. pass : ppass,
  37. ws : wws,
  38. room : null
  39. }
  40. }
  41. function newroom(ttitle, ddesc, pw) {
  42. console.log('New room '+ttitle)
  43. var room = makeroom(ttitle, ddesc, pw)
  44. currentRooms.push(room)
  45. return room
  46. }
  47. function newplayer(uuser, ppass, wws) {
  48. var player = makeplayer(uuser, ppass, wws)
  49. players.push(player)
  50. return player
  51. }
  52. function removeplayer(player) {
  53. player.room.players.remove(player)
  54. players.remove(player)
  55. }
  56.  
  57. function uploadUsers(userlist){
  58. var str = JSON.stringify(userlist)
  59. }
  60.  
  61. var db = undefined;
  62. MongoClient.connect(mdburi, function(err,client) {
  63. if (err || !client) {
  64. console.log("Database connection failed to '"+mdburi+"' error:"+err)
  65. return
  66. }
  67. console.log("Connected to Database")
  68. db = client.db('ettmulti')
  69. var accountc = db.collection('accounts')
  70. accountc.find().forEach(
  71. function(account) {
  72. console.log("loading user "+account.user+":"+account.pass)
  73. accounts.push(account)
  74. }
  75. )
  76. });
  77.  
  78. function insertUser(newAcc) {
  79. if(!db)
  80. return
  81. db.collection("accounts").insert({user:newAcc.user, pass:newAcc.pass}, function(err, records){
  82. console.log("Inserted user "+records.ops[0].user)
  83. })
  84. }
  85. wss.on('connection', (ws) => {
  86. console.log('Client connected');
  87. var player = newplayer('', '', ws)
  88. ws.isAlive = true;
  89.  
  90. ws.send(JSON.stringify({type:"roomlist", rooms : currentRooms}))
  91. ws.send(JSON.stringify({type:"hello", version:1, name:"json-muliett"}))
  92. ws.on('close',
  93. () => {
  94. console.log('Client disconnected')
  95. players = players.filter(x => x !== player)
  96. }
  97. );
  98. ws.on('message', (message) => {
  99. console.log(message)
  100. message = JSON.parse(message)
  101. switch(message.type) {
  102. case "login":
  103. if(!message.user || !message.pass) {
  104. ws.send(JSON.stringify({type:"login", logged : false, msg:"Missing username or password"}))
  105. return
  106. }
  107. var foundUser = players.find(x => x.user === message.user)
  108. if(foundUser!=undefined) {
  109. if(foundUser.pass === message.pass)
  110. ws.send(JSON.stringify({type:"login", logged : true, msg:""}))
  111. else {
  112. ws.send(JSON.stringify({type:"login", logged : false, msg:"username already taken"}))
  113. return
  114. }
  115. } else {
  116. player.user = message.user
  117. player.pass = message.pass
  118. insertUser(player)
  119. ws.send(JSON.stringify({type:"login", logged : true, msg:""}))
  120. }
  121. console.log("player logged in "+player.user+":"+player.pass)
  122. break
  123. case "createroom":
  124. if(!currentRooms.find(x => x.name === message.name)) {
  125. player.room = newroom(message.name, message.desc, message.pass)
  126. ws.send(JSON.stringify({type:"createroom", created:true, msg:""}))
  127. } else {
  128. ws.send(JSON.stringify({type:"createroom", created:false, msg:"Room name already in use"}))
  129. }
  130. break
  131. case "ping":
  132. this.isAlive = true;
  133. case "enterroom":
  134. var room = currentRooms.find(x => x.name === message.name)
  135. if(room)
  136. if (room.pass === message.pass) {
  137. player.room = room
  138. ws.send(JSON.stringify({type:"enterroom", entered:true, msg:""}))
  139. } else {
  140. ws.send(JSON.stringify({type:"enterroom", entered:false, msg:"incorrect password"}))
  141. return
  142. }
  143. else
  144. player.room = newroom(message.name, message.desc, message.pass)
  145. break
  146. case "chat":
  147. switch(message.msgtype) {
  148. case 0: //lobby (everyone)
  149. wss.clients.forEach((client) => {
  150. client.send(JSON.stringify({type:"chat", msgtype:0, tab:"", msg:player.user+": "+message.msg}));
  151. });
  152. break
  153. case 1: //room (people in room)
  154. player.room.players.forEach((player) => {
  155. player.ws.send(JSON.stringify({type:"chat", tab:message.tab, msgtype:1, msg:player.user+": "+message.msg}));
  156. });
  157. break
  158. case 2: //pm (tabname=user to send to)
  159. var playerToSendTo = players.find(x=> x.user === message.tab )
  160. if(!playerToSendTo) {
  161. ws.send(JSON.stringify({type:"chat", msgtype:0, tab:"", msg:"Could not find user "+message.tab}))
  162. }
  163. else {
  164. playerToSendTo.ws.send(JSON.stringify({type:"chat", msgtype:2, tab:message.tab, msg:player.user+": "+message.msg}))
  165. ws.send(JSON.stringify({type:"chat", msgtype:2, tab:message.tab, msg:player.user+": "+message.msg}))
  166. }
  167. break
  168. }
  169. break
  170. }
  171. });
  172. });
  173.  
  174. const interval = setInterval(function ping() {
  175. wss.clients.forEach(function each(ws) {
  176. if (ws.isAlive === false) return ws.terminate()
  177. ws.isAlive = false
  178. ws.send(JSON.stringify({type:"chat"}))
  179. })
  180. }, 30000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement