Class: CableRoom::RoomMembership
- Inherits:
-
Object
- Object
- CableRoom::RoomMembership
- Includes:
- Ports
- Defined in:
- lib/cable_room/room_member.rb
Instance Attribute Summary collapse
-
#room_class ⇒ Object
readonly
Returns the value of attribute room_class.
Instance Method Summary collapse
- #<<(data) ⇒ Object
- #connected? ⇒ Boolean
-
#initialize(cable_channel, room_class, room_key, create: false, on_room_opened: nil, on_joined: nil, on_message: nil, on_room_closed: nil, on_left: nil, tags: [], extra: nil, &preconfigure) ⇒ RoomMembership
constructor
A new instance of RoomMembership.
- #key ⇒ Object
- #leave! ⇒ Object
- #left? ⇒ Boolean
- #ping! ⇒ Object
- #rejoin! ⇒ Object
- #streams_live! ⇒ Object
- #transmit_port_connected ⇒ Object
Methods included from Ports
#close_streamed_ports!, #ports, #stream_port
Constructor Details
#initialize(cable_channel, room_class, room_key, create: false, on_room_opened: nil, on_joined: nil, on_message: nil, on_room_closed: nil, on_left: nil, tags: [], extra: nil, &preconfigure) ⇒ RoomMembership
Returns a new instance of RoomMembership.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/cable_room/room_member.rb', line 75 def initialize( cable_channel, room_class, room_key, create: false, on_room_opened: nil, # Not guaranteed (Only given if the Room Opens while we are trying to connect to it) on_joined: nil, on_message: nil, on_room_closed: nil, # Not guaranteed (Only given if the Room Closes while we are connected to it) on_left: nil, tags: [], extra: nil, &preconfigure ) @mutex = Monitor.new @has_left = false @has_established = false @streams_live = false @reannounce_delay = nil @reannounce_job = nil @cable_channel = cable_channel @room_class = room_class @room_key = room_key @allow_create = create @on_room_opened = on_room_opened @on_joined = on_joined @on_message = @on_room_closed = on_room_closed @on_left = on_left @preconfigure = preconfigure @tags = Array().map(&:to_sym) @extra = extra initiate_connection end |
Instance Attribute Details
#room_class ⇒ Object (readonly)
Returns the value of attribute room_class.
73 74 75 |
# File 'lib/cable_room/room_member.rb', line 73 def room_class @room_class end |
Instance Method Details
#<<(data) ⇒ Object
117 118 119 |
# File 'lib/cable_room/room_member.rb', line 117 def <<(data) port_transmit(room_class::ROOM_IN_CHANNEL, data) end |
#connected? ⇒ Boolean
121 122 123 |
# File 'lib/cable_room/room_member.rb', line 121 def connected? !left? && @has_established end |
#key ⇒ Object
163 |
# File 'lib/cable_room/room_member.rb', line 163 def key; @room_key; end |
#leave! ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/cable_room/room_member.rb', line 141 def leave! @mutex.synchronize do return if left? stop_reannouncing close_streamed_ports! @cable_channel._room_memberships.delete(self) port_transmit(room_class::ROOM_IN_CHANNEL, { type: 'port_disconnected' }, secure_context: true) @has_left = true end @on_left&.call(self) end |
#left? ⇒ Boolean
125 126 127 |
# File 'lib/cable_room/room_member.rb', line 125 def left? @mutex.synchronize { @has_left } end |
#ping! ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/cable_room/room_member.rb', line 129 def ping! return if left? if @has_established port_transmit(room_class::ROOM_IN_CHANNEL, { type: 'port_ping' }, secure_context: true) unless recently_transmitted? else transmit_port_connected end @mutex.synchronize do maybe_provision_room end end |
#rejoin! ⇒ Object
154 155 156 157 158 159 160 161 |
# File 'lib/cable_room/room_member.rb', line 154 def rejoin! @mutex.synchronize do return unless left? @has_left = false initiate_connection end end |
#streams_live! ⇒ Object
166 167 168 |
# File 'lib/cable_room/room_member.rb', line 166 def streams_live! @streams_live = true end |
#transmit_port_connected ⇒ Object
171 172 173 174 175 176 177 178 179 |
# File 'lib/cable_room/room_member.rb', line 171 def transmit_port_connected msg = { type: 'port_connected', tags: @tags, } msg[:extra] = ::ActiveJob::Arguments.serialize([@extra]) if @extra port_transmit(room_class::ROOM_IN_CHANNEL, msg, secure_context: true) schedule_reannounce end |