Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save hanachin/7743418 to your computer and use it in GitHub Desktop.
Save hanachin/7743418 to your computer and use it in GitHub Desktop.
class SocketServerClass
_sioListenPort = 8080
constructor : (@app, @nodeModules, @appOption) ->
@sio = @nodeModules.sio
@http = @nodeModules.http
@appServer = @http.createServer(@app)
# session --------------------
@mongoose = require 'mongoose'
@Schema = @mongoose.Schema
@sessionScheme = new @Schema
_id : String
data : Object
expires : Date
sid : String
@database = @appOption.session.database
@collection = @appOption.session.collection
@mongoose.connect "mongodb://localhost/#{@database}"
@sessionsCollection = @mongoose.model(@collection, @sessionScheme)
setup : ->
# socketioの起動
@appServer.listen(_sioListenPort)
exports.socketServer = @sio.listen(@appServer)
@serverConfig(exports.socketServer)
console.log "socket_server setup."
serverConfig : (server) ->
self = @
server.configure ->
@set 'transports', [
'websocket'
'flashsocket'
'htmlfile'
'xhr-polling'
'jsonp-polling'
]
@set 'log level', 2
# socket.ioからmongoDBに保存されているCookieデータにアクセスする
@set 'authorization', (handshakeData, callBack) ->
if (!handshakeData.headers.cookie)
return callBack('not found Cookie', false)
# handshakeDataからcookieデータを抽出
cookieData = handshakeData.headers.cookie
cookies = cookieData.replace(/\s+/g, '').split(';')
for c in cookies
[key, value] = c.split('=')
cookies[key] = value
# connect.sidが署名された状態なので、それを取り外している
parse = cookies['connect.sid'].replace(/s%3A/, '')
index = parse.indexOf('.')
sessionID = parse.substr(0, index)
# mongoDBからsession情報を取り出す
self.searchMongo(handshakeData, decodeURIComponent(sessionID), callBack)
searchMongo : (handshakeData, sessionID, callBack) ->
@sessionsCollection.findOne {sid : sessionID}, (err, data) ->
return callBack(null, false) unless data?
console.log data.data.username
handshakeData.sessionID = data.data.username
callBack(null, true)
exports.SocketServerClass = SocketServerClass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment