Class: OpalHotReloader::Client

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(socket, handshake, server) ⇒ Client

Returns a new instance of Client.



192
193
194
195
196
197
198
199
200
201
202
# File 'lib/opal_hot_reloader/server.rb', line 192

def initialize(socket, handshake, server)
  @socket = socket
  @handshake = handshake
  @frame = WebSocket::Frame::Incoming::Server.new(:version => @handshake.version)
  @opened = false
  @messaged = []
  @lazy_queue = []
  @lazy_current_queue = nil
  @closed = false
  @server = server
end

Instance Attribute Details

#closedObject

Returns the value of attribute closed.



190
191
192
# File 'lib/opal_hot_reloader/server.rb', line 190

def closed
  @closed
end

#frameObject

Returns the value of attribute frame.



190
191
192
# File 'lib/opal_hot_reloader/server.rb', line 190

def frame
  @frame
end

#handshakeObject

Returns the value of attribute handshake.



190
191
192
# File 'lib/opal_hot_reloader/server.rb', line 190

def handshake
  @handshake
end

#messagedObject

Returns the value of attribute messaged.



190
191
192
# File 'lib/opal_hot_reloader/server.rb', line 190

def messaged
  @messaged
end

#openedObject

Returns the value of attribute opened.



190
191
192
# File 'lib/opal_hot_reloader/server.rb', line 190

def opened
  @opened
end

#socketObject

Returns the value of attribute socket.



190
191
192
# File 'lib/opal_hot_reloader/server.rb', line 190

def socket
  @socket
end

Instance Method Details

#get_lazy_fiberObject



222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'lib/opal_hot_reloader/server.rb', line 222

def get_lazy_fiber
  # Create the fiber if needed
  if @lazy_fiber == nil or !@lazy_fiber.alive?
    @lazy_fiber = Fiber.new do
      @lazy_current_queue.each do |data|
        send(data)
        Fiber.yield unless @lazy_current_queue[-1] == data
      end
    end
  end

  return @lazy_fiber
end

#lazy_send(data) ⇒ Object



218
219
220
# File 'lib/opal_hot_reloader/server.rb', line 218

def lazy_send(data)
  @lazy_queue.push data
end

#onclose(&blk) ⇒ Object



274
275
276
277
278
279
280
281
# File 'lib/opal_hot_reloader/server.rb', line 274

def onclose(&blk)
  if @closed
    begin
      blk.call
    ensure
    end
  end
end

#onmessage(&blk) ⇒ Object



262
263
264
265
266
267
268
269
270
271
272
# File 'lib/opal_hot_reloader/server.rb', line 262

def onmessage(&blk)
  if @messaged.size > 0
    begin
      @messaged.each do |x|
        blk.call(x.to_s)
      end
    ensure
      @messaged = []
    end
  end
end

#onopen(&blk) ⇒ Object



252
253
254
255
256
257
258
259
260
# File 'lib/opal_hot_reloader/server.rb', line 252

def onopen(&blk)
  if @opened
    begin
      blk.call
    ensure
      @opened = false
    end
  end
end

#send(data) ⇒ Object



208
209
210
211
212
213
214
215
216
# File 'lib/opal_hot_reloader/server.rb', line 208

def send(data)
  frame = WebSocket::Frame::Outgoing::Server.new(:version => @handshake.version, :data => data, :type => :text)
  begin
    @socket.write frame
    @socket.flush
  rescue
    @server.close(self) unless @closed
  end
end

#send_some_lazy(count) ⇒ Object



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# File 'lib/opal_hot_reloader/server.rb', line 236

def send_some_lazy(count)
  # To save on cpu cycles, we don't want to be chopping and changing arrays, which could get quite large.  Instead,
  # we iterate over an array which we are sure won't change out from underneath us.
  unless @lazy_current_queue
    @lazy_current_queue = @lazy_queue
    @lazy_queue = []
  end

  completed = 0
  begin
    get_lazy_fiber.resume
    completed += 1
  end while (@lazy_queue.count > 0 or @lazy_current_queue.count > 0) and completed < count

end

#write(data) ⇒ Object



204
205
206
# File 'lib/opal_hot_reloader/server.rb', line 204

def write(data)
  @socket.write data
end