queue = require('./rabbit') class Subscription constructor: (@client_id, @auth, @ws, @routing_key) -> handleMessage: (msg) -> content = JSON.parse(msg.content.toString()) if content.session_id == @auth.sessionId return clientMsg = content clientMsg.routing_key = msg.fields.routingKey clientMsgStr = JSON.stringify(clientMsg) @ws.send clientMsgStr start: () -> queue.subscribe(@client_id, @routing_key, @handleMessage.bind(@)) stop: () -> queue.unsubscribe(@client_id, @routing_key) class SubscriptionManager constructor: (@client_id, @auth, @ws) -> @subscriptions = {} add: (routing_key) -> if !@subscriptions[routing_key] @subscriptions[routing_key] = {} else @subscriptions[routing_key].stop() @subscriptions[routing_key] = new Subscription(@client_id, @auth, @ws, routing_key) @subscriptions[routing_key].start() remove: (routing_key) -> @subscriptions[routing_key].stop() delete @subscriptions[routing_key] destroy: () -> @subscriptions = {} queue.destroy(@client_id) exports.SubscriptionManager = SubscriptionManager