class ScreenServer

Public Class Methods

new(port) click to toggle source
# File lib/server/screen_server.rb, line 8
def initialize port
  @port    = port
  @sockets = []
end

Public Instance Methods

listen() click to toggle source
# File lib/server/screen_server.rb, line 13
def listen
  Thread.new do
    Socket.tcp_server_loop @port, &register
  end
end
register() click to toggle source
# File lib/server/screen_server.rb, line 19
def register
  ->(socket, client_info) {
    socket.sync = true
    @sockets << socket
  }
end
write(update) click to toggle source

screen_server.async.write

# File lib/server/screen_server.rb, line 27
def write update
  @sockets.each { |s| safe_write(s, update) }
end

Private Instance Methods

disconnect(socket) click to toggle source
# File lib/server/screen_server.rb, line 37
def disconnect(socket)
  disconnect_message socket
  @sockets.delete    socket
  return false
end
disconnect_message(socket) click to toggle source
# File lib/server/screen_server.rb, line 44
def disconnect_message(socket)
  socket_info = Socket.unpack_sockaddr_in(socket.local_address)
  puts "A screen client disconnected: #{socket_info}"
end
safe_write(socket, update) click to toggle source
# File lib/server/screen_server.rb, line 31
def safe_write(socket, update)
  socket.write update
  rescue Errno::EPIPE; disconnect(socket)
end