Class: KineticRuby::ClientProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/kinetic_server.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(host, port, logger) ⇒ ClientProvider

Returns a new instance of ClientProvider.



72
73
74
75
76
77
# File 'lib/kinetic_server.rb', line 72

def initialize(host, port, logger)
  @host = host
  @port = port
  @logger = logger
  @server = nil
end

Class Method Details

.each_client(host, port, logger) ⇒ Object

Parameters:

  • host

    Host name or IPv4/6 address

  • port

    Port to listen on

  • logger

    Logger to output to



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/kinetic_server.rb', line 107

def self.each_client(host, port, logger)
  raise "No block supplied!" unless block_given?
  logger.log "Listening for clients..."

  # Service clients, one at a time (for now at least)
  begin
    Socket.tcp_server_loop(host, port) do |socket, addr|
      
      logger.log "New client connected on socket #{socket.inspect}"
      
      client = Client.new(socket, addr, logger)
      raise "Failed to connect to client!" unless client
      logger.log "Connected to #{client.address}"

      begin
        # Execute the supplied block with the connected client
        yield(client, logger)
        logger.log "Done servicing client #{client.address}"
      ensure
        logger.log "Closing client socket..."
        # Make sure the client gets closed, since tcp_server_loop does NOT!
        client.close
        logger.log "Client socket shutdown!"
      end
      logger.log "Done with client #{client.address}"
    end

  rescue Exception => e
    logger.log_exception(e, 'EXCEPTION during listen!')
  end 

  logger.log "Done listening for clients!"
end

Instance Method Details

#acceptObject

Returns a Client upon connection, nil upon failure

Returns:

  • Returns a Client upon connection, nil upon failure



81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/kinetic_server.rb', line 81

def accept
  client = nil
  @server ||= TCPServer.new(@host, @port)
  
  begin
    client = Client.new(@server.accept)
  rescue Exception => e
    @logger.log_exception(e, 'EXCEPTION during accept!') 
  end

  @logger.log 'Client dropped off!' if client.nil?
  
  return client
end

#shutdownObject



97
98
99
100
101
# File 'lib/kinetic_server.rb', line 97

def shutdown
  return if @server.nil?
  @server.close
  @server = nil
end