class Pytty::Daemon::Api::WebSockets
Public Class Methods
new(env)
click to toggle source
# File lib/pytty/daemon/api/web_sockets.rb, line 8 def initialize(env) @env = env @connection = Async::WebSocket::Server.open(env) @@connections << @connection @messages = Async::Queue.new @writes = Async::Queue.new end
Public Instance Methods
close()
click to toggle source
# File lib/pytty/daemon/api/web_sockets.rb, line 18 def close @@connections.each do |connection| connection.close end @@connections = [] end
handle()
click to toggle source
# File lib/pytty/daemon/api/web_sockets.rb, line 33 def handle Async::Task.current.async do while message = @connection.next_event type = case message when WebSocket::Driver::OpenEvent puts "ws: open #{@env["REMOTE_ADDR"]}" when WebSocket::Driver::CloseEvent puts "ws: close #{@env["REMOTE_ADDR"]}" @@connections.delete @connection when WebSocket::Driver::MessageEvent puts "ws: message #{@env["REMOTE_ADDR"]}" @messages.enqueue message.data else raise "ws: unknown #{message.inspect}" end end end Async::Task.current.async do |task| while message = @writes.dequeue @@connections.each do |connection| connection.send_message(message) rescue Exception => ex #TODO end end end end
read()
click to toggle source
# File lib/pytty/daemon/api/web_sockets.rb, line 25 def read @messages.dequeue end
write(message)
click to toggle source
# File lib/pytty/daemon/api/web_sockets.rb, line 29 def write(message) @writes.enqueue message end