/socket/socket.coffee
CoffeeScript | 107 lines | 87 code | 17 blank | 3 comment | 15 complexity | 9308112f5afea6a1ff4b81040eef450f MD5 | raw file
- exports.start = (server) ->
- io = require('socket.io').listen server
- db = require('mongojs').connect('mongodb://nodejitsu:28446ba8ab35884da1f9b5f22006025a@linus.mongohq.com:10013/nodejitsudb4542302081', ['users'])
- # My Little Helper Ponys /////////////////////////////////////////////////////
- parseCookie = (cookie) ->
- returnObj = {}
- cookie = cookie.split ';'
- for i in cookie
- parsedCookie = i.split '='
- returnObj[parsedCookie[0].trim()] = parsedCookie[1].trim()
- returnObj
- class User
- constructor: (@username, @rank, @roll, @hero, @steamurl, @language, @location, @socket) ->
- class Room
- constructor: (owner) ->
- @occupants = []
- sendMsg: (msg, user) ->
- for client in @occupants
- io.sockets.socket(client.socket).emit 'updateChat', 'user': user, 'msg': msg
- checkDoubles: (user) ->
- returnVal = false
- for client in @occupants
- if client.username is user
- returnVal = true
- returnVal
- leaveRoom: (user) ->
- @occupants.forEach (client, index, arr) ->
- if client.username is user
- arr.splice index, 1
- getUsers: () ->
- returnOccupants = []
- @occupants.forEach (client, index, arr) ->
- returnOccupants.push client.username
- returnOccupants
- # End Helper ////////////////////////////////////////////////////////////////
- # Begin socket request management ///////////////////////////////////////////
- users = {}
- rooms = {}
- io.sockets.on 'connection', (socket) ->
- if socket.handshake.headers.cookie
- cookies = parseCookie socket.handshake.headers.cookie
- db.users.find rememberToken: cookies.rememberToken, (err, found) ->
- console.log 'Couldn\'t connect to server, error: ' + err if err
- if found.length is 0
- console.log 'Couldn\'t find user'
- else
- user = new User found[0].username, found[0].rank, found[0].roll,
- found[0].hero, found[0].steamurl, found[0].language, found[0].location, socket.id
- users[found[0].username] = user
- socket.username = user.username
- io.sockets.emit 'updatePlayers', users
- socket.emit 'setUsername', socket.username
- socket.on 'disconnect', ->
- if socket.currentroom
- socket.currentroom.leaveRoom socket.username
- socket.currentroom.occupants.forEach (client, index, arr) ->
- io.sockets.socket(client.socket).emit 'updateUsers', socket.currentroom.getUsers()
- delete socket.currentroom
- delete users[socket.username]
- io.sockets.emit 'removePlayer', socket.username
- socket.on 'inviteUser', (data) ->
- if not socket.currentroom
- socket.currentroom = new Room socket.username
- rooms[socket.username] = socket.currentroom
- socket.currentroom.occupants.push 'socket': socket.id, 'username': socket.username
- io.sockets.socket(users[data].socket).emit 'alertInvite', socket.username
- else
- if not socket.currentroom.checkDoubles data
- io.sockets.socket(users[data].socket).emit 'alertInvite', socket.username
- socket.on 'manageParty', (data, username, yesno) ->
- if yesno is true
- rooms[data].occupants.push 'socket': socket.id, 'username': username
- socket.currentroom = rooms[data]
- io.sockets.socket(users[data].socket).emit 'notifyStatus', username + ' accepted your party invite'
- rooms[data].occupants.forEach (client, i) ->
- io.sockets.socket(client.socket).emit 'updateUsers', rooms[data].getUsers()
- else
- io.sockets.socket(users[data].socket).emit 'notifyStatus', username + ' declined your party invite'
- socket.on 'sendMessage', (msg) ->
- if socket.currentroom
- socket.currentroom.sendMsg msg, socket.username
- socket.on 'leaveParty', ->
- if socket.currentroom
- if socket.currentroom.occupants.length <= 1
- delete socket.currentroom
- else
- socket.currentroom.leaveRoom socket.username
- socket.currentroom.occupants.forEach (client, index, arr) ->
- io.sockets.socket(client.socket).emit 'updateUsers', socket.currentroom.getUsers()
- delete socket.currentroom