Skip to content

Instantly share code, notes, and snippets.

@dguettler
Forked from alexspeller/foo.coffee
Created August 20, 2014 02:57
Show Gist options
  • Save dguettler/fcbf2df23367b4b09e48 to your computer and use it in GitHub Desktop.
Save dguettler/fcbf2df23367b4b09e48 to your computer and use it in GitHub Desktop.
App.PushClient = Em.Object.extend
members: prop ->
Em.A()
connect: (key, userId) ->
return unless Pusher?
@pusher?.disconnect()
@pusher = new Pusher key,
cluster: 'eu'
encrypted: true
authEndpoint: '/api/pusher/auth'
@presenceChannel = @pusher.subscribe 'presence-global'
@presenceChannel.bind 'pusher:subscription_succeeded', (members) =>
@log 'Subscribed to presence-global'
members.each (member) =>
@get('members').addObject member.id
@presenceChannel.bind 'pusher:member_added', (member) =>
@get('members').addObject member.id
@presenceChannel.bind 'pusher:member_removed', (member) =>
@get('members').removeObject member.id
@userChannel = @pusher.subscribe "private-user_#{userId}"
@userChannel.bind 'pusher:subscription_succeeded', =>
@log "Subscribed to private-user_#{userId}"
@userChannel.bind 'update-data', (data) =>
type = data.type
delete data.type
@log 'update-data', type, data
@store.pushPayload type, data
record = @store.getById type, data[type].id
@router.send 'recordWasPushed', record
@userChannel.bind 'delete-record', (data) =>
@log 'delete-record', data
record = @store.getById data.type, data.id
record?.unloadRecord()
@router.send 'recordWasDeletedViaPush', record
disconnect: ->
@pusher?.disconnect()
delete @pusher
log: (args...) ->
Em.Logger.debug '[PushClient]', args...
App.initializer
name: 'pushclient'
initialize: (container, application) ->
container.register 'pushClient:main', App.PushClient
container.injection 'pushClient', 'store', 'store:main'
container.injection 'pushClient', 'router', 'router:main'
container.injection 'route', 'pushClient', 'pushClient:main'
container.injection 'controller', 'pushClient', 'pushClient:main'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment