class Hyperstack::Hotloader::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/hyperstack/hotloader/server.rb, line 202 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/hyperstack/hotloader/server.rb, line 232 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/hyperstack/hotloader/server.rb, line 228 def lazy_send(data) @lazy_queue.push data end
onclose(&blk)
click to toggle source
# File lib/hyperstack/hotloader/server.rb, line 284 def onclose(&blk) if @closed begin blk.call ensure end end end
onmessage(&blk)
click to toggle source
# File lib/hyperstack/hotloader/server.rb, line 272 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/hyperstack/hotloader/server.rb, line 262 def onopen(&blk) if @opened begin blk.call ensure @opened = false end end end
send(data)
click to toggle source
# File lib/hyperstack/hotloader/server.rb, line 218 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/hyperstack/hotloader/server.rb, line 246 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/hyperstack/hotloader/server.rb, line 214 def write(data) @socket.write data end