Class: KineticRuby::Client

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(socket, addr_info, logger) ⇒ Client

Returns a new instance of Client.



7
8
9
10
11
# File 'lib/kinetic_server.rb', line 7

def initialize(socket, addr_info, logger)
  @socket = socket
  @addr = addr_info
  @logger = logger
end

Class Method Details

.address(socket) ⇒ Object

Return formatted address ‘<address>:<port>’ for the socket



23
24
25
26
27
# File 'lib/kinetic_server.rb', line 23

def self.address(socket)
  return nil unless socket
  raise "Socket appears to be disconnected!" if !socket.remote_address
  "#{socket.remote_address.ip_address}:#{socket.remote_address.ip_port}"
end

Instance Method Details

#addressObject

Return formatted address ‘<address>:<port>’ of the client



30
31
32
# File 'lib/kinetic_server.rb', line 30

def address
  Client.address(@socket)
end

#closeObject

Shutdown a client socket



14
15
16
17
18
19
20
# File 'lib/kinetic_server.rb', line 14

def close
  return unless @socket
  @logger.log "Client socket #{@socket.inspect} disconnected!"
  @socket.close
  @socket = nil
  @logger.logv "Client #{@socket.inspect} connection shutdown successfully"
end

#receive(max_len = nil) ⇒ Object Also known as: recv

Wait to receive data from the client

Parameters:

  • max_len (defaults to: nil)

    Maximum number of bytes to receive



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/kinetic_server.rb', line 37

def receive(max_len=nil)
  max_len ||= 1024

  begin
    data = @socket.recv(max_len)
  rescue IO::WaitReadable
    @logger.logv 'Retrying receive...'
    IO.select([@socket])
    retry
  rescue Exception => e
    if e.class != 'IOError' && e.message != 'closed stream'
      @logger.log_exception(e, 'EXCEPTION during receive!')
    end
  end

  if (data.nil? || data.empty?)
    @logger.log "Client #{@socket.inspect} disconnected!"
    data = ''
  else
    @logger.log "Received #{data.length} bytes"
  end

  return data
end

#send(data) ⇒ Object Also known as: write

Send data to the client



64
65
66
# File 'lib/kinetic_server.rb', line 64

def send(data)
  @socket.write(data)
end