Skip to content

Instantly share code, notes, and snippets.

@Menencia
Last active December 11, 2015 08:49
Show Gist options
  • Save Menencia/4575909 to your computer and use it in GitHub Desktop.
Save Menencia/4575909 to your computer and use it in GitHub Desktop.
###
SERVER
###
port = 3000
fs = require('fs')
express = require('express')
cookie = require('express/node_modules/cookie')
app = express()
server = require('http').createServer(app)
io = require('socket.io').listen(server)
# configure
app.locals.port = port
app.configure ->
app.set 'views', __dirname + '/views'
app.set('view engine', 'jade')
app.use(express.bodyParser())
#app.use(express.methodOverride());
#app.use(require('stylus').middleware({ src: __dirname + '/public' }));
#app.use app.router
app.use express.static(__dirname + '/public')
app.get '/', (req, res) -> res.render('index')
server.listen(port)
###
DATABASE
###
db = require('mongojs').connect('ff-tcgo', ['users'])
#db.users.remove();
io.sockets.authorization (handshakeData, accept) ->
handshakeData.user = null
# checks if cookie exists
if handshakeData.headers.cookie
# get logins
cookies = cookie.parse(handshakeData.headers.cookie)
login = cookies.login
password = cookies.password
# checks if user exists
db.users.findOne { login: new RegExp('^'+login+'$','i'), password: password }, (err, user) ->
# store user
if user isnt null
handshakeData.user = user
# accepts any
accept(null, true)
# listening to all websockets
io.sockets.on 'connection', (client) ->
# checks if client has cookie (auto-connect)
if user = client.handshake.user isnt null
client.set 'user', user, ->
client.emit 'user', user
# client want to join (connect)
client.on 'join', (logins) ->
# checks if user exists
db.users.findOne {login: new RegExp('^'+logins.login+'$','i')}, (err, user) ->
# user exists !
if !err && user
# password not given but user not registered
if logins.password is '' and !user.registered
# store & redirect
client.set 'user', user, ->
client.emit 'user', user
# password given & match : this is a connection
else if user.password is logins.password
# store & redirect
client.set 'user', user, ->
client.emit 'user', user
# password given but does not match
else
client.emit 'error', 'wrong password'
# user not found : this is a registration
else
client.emit 'confirm registration'
# client want to join (register)
client.on 'register', (logins) ->
# checks if user exists
db.users.findOne {login: new RegExp('^'+logins.login+'$','i')}, (err, user) ->
# user exists : registration canceled
if !err && user
client.emit 'error', 'Pseudo déjà pris !'
# user not found : this is registration (step 2)
else
user =
login: logins.login
password: logins.password
registered: (logins.password isnt '')
db.users.save user
client.set 'user', user, ->
client.emit 'user', user
###io.of('/hall').on 'connection', (client) ->
console.log '+1'
nb_players++
# update clients
io.sockets.emit 'nb_players', nb_players
client.on 'disconnect', ->
# old player
console.log '-1'
nb_players--
# update clients
io.sockets.emit 'nb_players', nb_players###
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment