class SystemBrowser::Server
Attributes
session[RW]
@return [SystemBrowser::Session]
Public Class Methods
new(port = 9696)
click to toggle source
# File lib/system_browser/server.rb, line 7 def initialize(port = 9696) self.create_tcpserver(port) end
Public Instance Methods
shutdown()
click to toggle source
# File lib/system_browser/server.rb, line 26 def shutdown SLogger.debug("[server] shutting down the TCP server...") @tcpserver.close end
start()
click to toggle source
Starts the TCP server.
@note This method blocks the thread.
# File lib/system_browser/server.rb, line 15 def start Socket.accept_loop(@tcpserver) do |connection| SLogger.debug("[server] accepted a new connection (#{connection})") self.session.connection = connection self.handle_connection(connection) end rescue IOError Thread.exit end
Protected Instance Methods
create_tcpserver(port)
click to toggle source
Creates a new TCP server and tries to find a free port. @return [void]
# File lib/system_browser/server.rb, line 37 def create_tcpserver(port) @tcpserver = TCPServer.new(port) rescue Errno::EADDRINUSE SLogger.debug("[server] port #{port} is occupied. Trying port #{port + 1}") port += 1 retry end
handle_connection(connection)
click to toggle source
Handles incoming connections.
@param connection [TCPSocket] @return [void]
# File lib/system_browser/server.rb, line 51 def handle_connection(connection) loop do unless readval = connection.gets SLogger.debug("[server] connection #{connection} interrupted") shutdown break end if readval == Request::FIN SLogger.debug("[server] received the FIN request") self.session.destroy break else SLogger.debug("[server] received a request") self.process_request(Request.new(readval)) end end end
process_request(request)
click to toggle source
@param request [SystemBrowser::Request] @return [void]
# File lib/system_browser/server.rb, line 76 def process_request(request) RequestProcessor.new(request: request, session: self.session).process rescue => e SLogger.log_error(e) end