Class: WSocketIO::Presence

Inherits:
Object
  • Object
show all
Defined in:
lib/wsocket_io.rb

Overview

─── Presence ───────────────────────────────────────────────

Instance Method Summary collapse

Constructor Details

#initialize(channel_name, send_fn) ⇒ Presence

Returns a new instance of Presence.



51
52
53
54
55
56
57
58
# File 'lib/wsocket_io.rb', line 51

def initialize(channel_name, send_fn)
  @channel_name = channel_name
  @send_fn = send_fn
  @enter_cbs = []
  @leave_cbs = []
  @update_cbs = []
  @members_cbs = []
end

Instance Method Details

#enter(data: nil) ⇒ Object



60
61
62
63
# File 'lib/wsocket_io.rb', line 60

def enter(data: nil)
  @send_fn.call({ action: 'presence.enter', channel: @channel_name, data: data })
  self
end

#getObject



75
76
77
78
# File 'lib/wsocket_io.rb', line 75

def get
  @send_fn.call({ action: 'presence.get', channel: @channel_name })
  self
end

#handle_event(action, data) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/wsocket_io.rb', line 85

def handle_event(action, data)
  case action
  when 'presence.enter'
    m = parse_member(data)
    @enter_cbs.each { |cb| cb.call(m) }
  when 'presence.leave'
    m = parse_member(data)
    @leave_cbs.each { |cb| cb.call(m) }
  when 'presence.update'
    m = parse_member(data)
    @update_cbs.each { |cb| cb.call(m) }
  when 'presence.members'
    members = (data['members'] || []).map { |d| parse_member(d) }
    @members_cbs.each { |cb| cb.call(members) }
  end
end

#leaveObject



65
66
67
68
# File 'lib/wsocket_io.rb', line 65

def leave
  @send_fn.call({ action: 'presence.leave', channel: @channel_name })
  self
end

#on_enter(&block) ⇒ Object



80
# File 'lib/wsocket_io.rb', line 80

def on_enter(&block) = (@enter_cbs << block; self)

#on_leave(&block) ⇒ Object



81
# File 'lib/wsocket_io.rb', line 81

def on_leave(&block) = (@leave_cbs << block; self)

#on_members(&block) ⇒ Object



83
# File 'lib/wsocket_io.rb', line 83

def on_members(&block) = (@members_cbs << block; self)

#on_update(&block) ⇒ Object



82
# File 'lib/wsocket_io.rb', line 82

def on_update(&block) = (@update_cbs << block; self)

#update(data) ⇒ Object



70
71
72
73
# File 'lib/wsocket_io.rb', line 70

def update(data)
  @send_fn.call({ action: 'presence.update', channel: @channel_name, data: data })
  self
end