class OpalHotReloader::Client

Attributes

closed[RW]
frame[RW]
handshake[RW]
messaged[RW]
opened[RW]
socket[RW]

Public Class Methods

new(socket, handshake, server) click to toggle source
# 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

Public Instance Methods

get_lazy_fiber() click to toggle source
# 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) click to toggle source
# File lib/opal_hot_reloader/server.rb, line 218
def lazy_send(data)
  @lazy_queue.push data
end
onclose(&blk) click to toggle source
# File lib/opal_hot_reloader/server.rb, line 274
def onclose(&blk)
  if @closed
    begin
      blk.call
    ensure
    end
  end
end
onmessage(&blk) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/opal_hot_reloader/server.rb, line 204
def write(data)
  @socket.write data
end