notification-server
Version:
Based on NowJS, a standalone server for sending and receiving notification across different live users
68 lines (50 loc) • 1.75 kB
text/coffeescript
events = require 'events'
util = require 'util'
EventTypes = require './event_types'
class Publisher extends events.EventEmitter
# Construct NowJS publisher
#
# @param @everyone NowJS instance
# @param @storage Storage instance
constructor: (@everyone, @storage) ->
@_configureMethods()
##-----------------
## Public Methods
##-----------------
getNow: ->
@everyone.now
getDefaultGroup: ->
@defaultGroup
##-----------------
## Private Methods
##-----------------
_configureMethods: ->
self = @
defaultGroup = null
@everyone.on 'disconnect', ->
console.log "Disconnecting user - #{@now.uid}"
self.storage.remove(@now.uid)
@everyone.on 'connect', ->
console.log "Connected user - #{@user.clientId}"
self.everyone.count (v) ->
console.log("Total users - #{v}")
@everyone.now.register = (info) ->
@now.uid = self.storage.add(info)
@now.info = info
console.log "Registering user - #{util.inspect(info)}"
console.log "Registered id - #{@now.uid}"
self.emit EventTypes.SUBSCRIBE_CLIENT, @now.uid, @now.info
@everyone.now.unregister = ->
self.storage.remove(@now.uid)
console.log "Unregistered user - #{@now.uid}"
delete @now.uid
delete @now.info
self.emit EventTypes.UNSUBSCRIBE_CLIENT, @now.uid
@everyone.now.publish = (msg) ->
console.log "Publishing #{util.inspect(msg)} registered id - #{@now.uid}"
self.everyone.now.receive(@now.info, msg)
self.emit EventTypes.PUBLISH_MSG_TO_CLIENTS, @now.uid, msg
@everyone.now.getTotalUsers = (callback) ->
self.everyone.count (count) ->
callback(count, self.storage.size())
exports.Publisher = Publisher