Skip to content

Instantly share code, notes, and snippets.

@seka
Created December 1, 2013 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save seka/7732124 to your computer and use it in GitHub Desktop.
Save seka/7732124 to your computer and use it in GitHub Desktop.
SocketServerMongoMemoryStore.coffee を書きなおして一つのクラスにしてみた.
exports.SocketServerClass = class SocketServerClass
_sioListenPort = 8080
constructor : (@app, @node_modules, @appOption) ->
@sio = @node_modules.sio
@http = @node_modules.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()
return console.log "socket_server setup."
serverConfig : () ->
self = @
exports.socketServer.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
parse = c.split('=')
cookies[parse[0]] = parse[1]
# connect.sidが署名された状態なので、それを取り外している
parse = cookies['connect.sid'].replace(/s%3A/, '')
index = parse.indexOf('.')
sessionID = parse.substr(0, index)
# mongoDBからsession情報を取り出す
self.serachMongo(handshakeData, decodeURIComponent(sessionID), callBack)
serachMongo : (handshakeData, sessionID, callBack) ->
@sessionsCollection.findOne {sid : sessionID}, (err, data) ->
if (data?)
console.log data.data.username
handshakeData.sessionID = data.data.username
callBack(null, true)
else
callBack(null, false)
@seka
Copy link
Author

seka commented Dec 1, 2013

exports.socketServer.set っていうふうに書いたら、
32行目を exports.socketServer.configure () => ( => に変更する)
54行目を self から @ にするっていう書き方もできる.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment