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
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_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
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