class Krakow::Ksocket

Attributes

buffer[R]

@return [String]

Public Class Methods

new(args={}) click to toggle source

Create new socket wrapper

@param args [Hash] @option args [Socket-ish] :socket @option args [String] :host @option args [Integer] :port @return [self]

# File lib/krakow/ksocket.rb, line 30
def initialize(args={})
  if(args[:socket])
    @socket = args[:socket]
  else
    unless([:host, :port].all?{|k| args.include?(k)})
      raise ArgumentError.new 'Missing required arguments. Expecting `:socket` or `:host` and `:port`.'
    end
    @socket = TCPSocket.new(args[:host], args[:port])
  end
  @buffer = ''
  async.read_loop
end

Public Instance Methods

closedown_socket() click to toggle source

Teardown helper

# File lib/krakow/ksocket.rb, line 16
def closedown_socket
  @writing = @reading = false
  if(socket && !socket.closed?)
    socket.close
  end
end
get(n) click to toggle source

Fetch bytes from socket

@param n [Integer] @return [String]

# File lib/krakow/ksocket.rb, line 72
def get(n)
  until(buffer.length >= n)
    wait(:content_read)
  end
  buffer.slice!(0, n)
end
Also aliased as: recv, read, sysread, readpartial
put(line) click to toggle source

Push bytes to socket

@param line [String] @return [Integer]

# File lib/krakow/ksocket.rb, line 87
def put(line)
  socket{|s| s.write(line)}
end
Also aliased as: write
read(n)
Alias for: get
read_loop() click to toggle source

Read from socket and push into local Queue

# File lib/krakow/ksocket.rb, line 49
def read_loop
  unless(reading?)
    @reading = true
    while(reading?)
      res = defer do
        Kernel.select([socket], nil, nil, nil)
        socket{|s| s.readpartial(1024)}
      end
      if(res)
        debug "Received content from socket: #{res.inspect}"
        buffer << res
        signal(:content_read)
      else
        debug 'No content received from socket read. Ignoring.'
      end
    end
  end
end
reading?() click to toggle source

@return [TrueClass, FalseClass] read loop enabled

# File lib/krakow/ksocket.rb, line 44
def reading?
  !!@reading
end
readpartial(n)
Alias for: get
recv(n)
Alias for: get
socket() { |socket| ... } click to toggle source

@return [Socket]

# File lib/krakow/ksocket.rb, line 93
def socket
  if(block_given?)
    yield @socket
  else
    @socket
  end
end
sysread(n)
Alias for: get
write(line)
Alias for: put