/
pebble.coffee
45 lines (34 loc) · 1.14 KB
/
pebble.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Public distributable version of the client.
class Pebble
@run: (host, callback) ->
pebble = new Pebble
callback pebble
pebble
constructor: (host) ->
@events = {}
@socket = io.connect host
on: (event, callback) ->
@events[event]?= []
@events[event].push callback
watchAll: (channels...) ->
for name, callback of channels
@watch name, callback
watch: (channel, callback) ->
@on channel, callback
@loadHistory @, channel, =>
@socket.on channel, (data) => @receive channel, data
trigger: (name, args...) ->
callbacks = (@events[name] ?= [])
for callback in callbacks
callback.apply this, args
disconnected: (callback) -> @on 'disconnect', callback
connected: (callback) -> @on 'connect', callback
reconnected: (callback) -> @on 'reconnect', callback
receive: (channel, message) ->
@trigger channel, message
loadHistory: (channel, callback) ->
$.getJSON "/history/#{channel}", (data) =>
for message in data.reverse()
@receive channel, message
callback() if callback instanceof Function
window['Pebble'] = Pebble