Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- const express = require('express');
- const SocketServer = require('ws').Server;
- const path = require('path');
- const PORT = process.env.PORT || 5000;
- const mdburi = process.env.MONGODB_URI;
- var MongoClient = require('mongodb').MongoClient
- const IP = process.env.IP || '0.0.0.0'
- const server = express()
- .listen(PORT, () => console.log(`Listening on ${ PORT }`));
- const wss = new SocketServer({ server });
- // registered account
- var accounts = []
- //current rooms
- var currentRooms = []
- //users that are connected and logged in
- var players = []
- function makeroom(ttitle, ddesc, pw) {
- return {
- name : ttitle,
- desc : ddesc,
- pass : pw,
- players : []
- }
- }
- function makeplayer(uuser, ppass, wws) {
- return {
- user : uuser,
- pass : ppass,
- ws : wws,
- room : null
- }
- }
- function newroom(ttitle, ddesc, pw) {
- console.log('New room '+ttitle)
- var room = makeroom(ttitle, ddesc, pw)
- currentRooms.push(room)
- return room
- }
- function newplayer(uuser, ppass, wws) {
- var player = makeplayer(uuser, ppass, wws)
- players.push(player)
- return player
- }
- function removeplayer(player) {
- player.room.players.remove(player)
- players.remove(player)
- }
- function uploadUsers(userlist){
- var str = JSON.stringify(userlist)
- }
- var db = undefined;
- MongoClient.connect(mdburi, function(err,client) {
- if (err || !client) {
- console.log("Database connection failed to '"+mdburi+"' error:"+err)
- return
- }
- console.log("Connected to Database")
- db = client.db('ettmulti')
- var accountc = db.collection('accounts')
- accountc.find().forEach(
- function(account) {
- console.log("loading user "+account.user+":"+account.pass)
- accounts.push(account)
- }
- )
- });
- function insertUser(newAcc) {
- if(!db)
- return
- db.collection("accounts").insert({user:newAcc.user, pass:newAcc.pass}, function(err, records){
- console.log("Inserted user "+records.ops[0].user)
- })
- }
- wss.on('connection', (ws) => {
- console.log('Client connected');
- var player = newplayer('', '', ws)
- ws.isAlive = true;
- ws.send(JSON.stringify({type:"roomlist", rooms : currentRooms}))
- ws.send(JSON.stringify({type:"hello", version:1, name:"json-muliett"}))
- ws.on('close',
- () => {
- console.log('Client disconnected')
- players = players.filter(x => x !== player)
- }
- );
- ws.on('message', (message) => {
- console.log(message)
- message = JSON.parse(message)
- switch(message.type) {
- case "login":
- if(!message.user || !message.pass) {
- ws.send(JSON.stringify({type:"login", logged : false, msg:"Missing username or password"}))
- return
- }
- var foundUser = players.find(x => x.user === message.user)
- if(foundUser!=undefined) {
- if(foundUser.pass === message.pass)
- ws.send(JSON.stringify({type:"login", logged : true, msg:""}))
- else {
- ws.send(JSON.stringify({type:"login", logged : false, msg:"username already taken"}))
- return
- }
- } else {
- player.user = message.user
- player.pass = message.pass
- insertUser(player)
- ws.send(JSON.stringify({type:"login", logged : true, msg:""}))
- }
- console.log("player logged in "+player.user+":"+player.pass)
- break
- case "createroom":
- if(!currentRooms.find(x => x.name === message.name)) {
- player.room = newroom(message.name, message.desc, message.pass)
- ws.send(JSON.stringify({type:"createroom", created:true, msg:""}))
- } else {
- ws.send(JSON.stringify({type:"createroom", created:false, msg:"Room name already in use"}))
- }
- break
- case "ping":
- this.isAlive = true;
- case "enterroom":
- var room = currentRooms.find(x => x.name === message.name)
- if(room)
- if (room.pass === message.pass) {
- player.room = room
- ws.send(JSON.stringify({type:"enterroom", entered:true, msg:""}))
- } else {
- ws.send(JSON.stringify({type:"enterroom", entered:false, msg:"incorrect password"}))
- return
- }
- else
- player.room = newroom(message.name, message.desc, message.pass)
- break
- case "chat":
- switch(message.msgtype) {
- case 0: //lobby (everyone)
- wss.clients.forEach((client) => {
- client.send(JSON.stringify({type:"chat", msgtype:0, tab:"", msg:player.user+": "+message.msg}));
- });
- break
- case 1: //room (people in room)
- player.room.players.forEach((player) => {
- player.ws.send(JSON.stringify({type:"chat", tab:message.tab, msgtype:1, msg:player.user+": "+message.msg}));
- });
- break
- case 2: //pm (tabname=user to send to)
- var playerToSendTo = players.find(x=> x.user === message.tab )
- if(!playerToSendTo) {
- ws.send(JSON.stringify({type:"chat", msgtype:0, tab:"", msg:"Could not find user "+message.tab}))
- }
- else {
- playerToSendTo.ws.send(JSON.stringify({type:"chat", msgtype:2, tab:message.tab, msg:player.user+": "+message.msg}))
- ws.send(JSON.stringify({type:"chat", msgtype:2, tab:message.tab, msg:player.user+": "+message.msg}))
- }
- break
- }
- break
- }
- });
- });
- const interval = setInterval(function ping() {
- wss.clients.forEach(function each(ws) {
- if (ws.isAlive === false) return ws.terminate()
- ws.isAlive = false
- ws.send(JSON.stringify({type:"chat"}))
- })
- }, 30000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement