cable_room 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,11 +28,6 @@ module CableRoom
28
28
  }
29
29
  end
30
30
 
31
- if blk
32
- raise ArgumentError, "Cannot specify both a block and `on_opened:`" if kwargs[:on_opened]
33
- kwargs[:on_opened] = blk
34
- end
35
-
36
31
  as = respond_to?(:current_user) ? current_user : nil if as == :not_given
37
32
 
38
33
  if as
@@ -40,7 +35,7 @@ module CableRoom
40
35
  kwargs[:extra][:as] = as
41
36
  end
42
37
 
43
- RoomMembership.new(self, room_class, room_key, **kwargs)
38
+ RoomMembership.new(self, room_class, room_key, **kwargs, &blk)
44
39
  end
45
40
 
46
41
  def ping_room_memberships
@@ -61,7 +56,9 @@ module CableRoom
61
56
  on_closed: nil,
62
57
  on_opened: nil,
63
58
  on_message: nil,
64
- extra: nil
59
+ tags: [],
60
+ extra: nil,
61
+ &preconfigure
65
62
  )
66
63
  @token = SecureRandom.hex(16)
67
64
  @has_left = false
@@ -75,6 +72,7 @@ module CableRoom
75
72
  @on_closed = on_closed
76
73
  @on_message = on_message
77
74
 
75
+ @tags = Array(tags).map(&:to_sym)
78
76
  @extra = extra
79
77
 
80
78
  @cable_channel._room_memberships << self
@@ -89,7 +87,22 @@ module CableRoom
89
87
  handle_received_message(message)
90
88
  end
91
89
 
92
- transmit_member_joined
90
+ # Listen to user-specific channel
91
+ if extra && extra[:as]
92
+ stream_port(extra[:as]) do |message|
93
+ handle_received_message(message)
94
+ end
95
+ end
96
+
97
+ @tags.each do |tag|
98
+ stream_port(tag) do |message|
99
+ handle_received_message(message)
100
+ end
101
+ end
102
+
103
+ preconfigure&.call(self)
104
+
105
+ transmit_port_connected
93
106
 
94
107
  maybe_provision_room
95
108
  end
@@ -107,7 +120,7 @@ module CableRoom
107
120
  def ping!
108
121
  return if left?
109
122
 
110
- self << { type: 'member_ping' }
123
+ self << { type: 'port_ping' }
111
124
  maybe_provision_room
112
125
  end
113
126
 
@@ -116,7 +129,7 @@ module CableRoom
116
129
 
117
130
  close_streamed_ports!
118
131
  @cable_channel._room_memberships.delete(self)
119
- self << { type: 'member_left' }
132
+ self << { type: 'port_disconnected' }
120
133
  @has_left = true
121
134
  @on_closed&.call(self)
122
135
  end
@@ -139,7 +152,7 @@ module CableRoom
139
152
 
140
153
  case message['type']
141
154
  when 'room_opened'
142
- transmit_member_joined
155
+ transmit_port_connected
143
156
  @on_opened&.call(self)
144
157
  when 'room_closed'
145
158
  @on_closed&.call(self)
@@ -153,8 +166,11 @@ module CableRoom
153
166
 
154
167
  private
155
168
 
156
- def transmit_member_joined
157
- msg = { type: 'member_joined' }
169
+ def transmit_port_connected
170
+ msg = {
171
+ type: 'port_connected',
172
+ tags: @tags,
173
+ }
158
174
  msg[:extra] = ::ActiveJob::Arguments.serialize([@extra]) if @extra
159
175
  self << msg
160
176
  end
@@ -1,3 +1,3 @@
1
1
  module CableRoom
2
- VERSION = "0.1.2".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end