class PatronusFati::Connection
Attributes
port[R]
read_queue[RW]
read_thread[RW]
server[R]
socket[RW]
write_queue[RW]
write_thread[RW]
Public Class Methods
new(server, port)
click to toggle source
# File lib/patronus_fati/connection.rb, line 5 def initialize(server, port) @server = server @port = port self.read_queue = Queue.new self.write_queue = Queue.new end
Public Instance Methods
connect()
click to toggle source
# File lib/patronus_fati/connection.rb, line 13 def connect establish_connection return unless connected? start_read_thread start_write_thread end
connected?()
click to toggle source
# File lib/patronus_fati/connection.rb, line 21 def connected? !(socket.nil? || socket.closed?) end
disconnect()
click to toggle source
# File lib/patronus_fati/connection.rb, line 25 def disconnect return unless socket Thread.kill(read_thread) Thread.kill(write_thread) socket.close unless socket.closed? self.socket = nil end
read()
click to toggle source
# File lib/patronus_fati/connection.rb, line 36 def read read_queue.pop end
write(msg)
click to toggle source
# File lib/patronus_fati/connection.rb, line 40 def write(msg) write_queue.push(msg) end
Protected Instance Methods
establish_connection()
click to toggle source
# File lib/patronus_fati/connection.rb, line 49 def establish_connection return if connected? @socket = TCPSocket.new(server, port) end
start_read_thread()
click to toggle source
# File lib/patronus_fati/connection.rb, line 54 def start_read_thread self.read_thread = Thread.new do begin while (line = socket.readline) read_queue << line end rescue IOError, EOFError => e raise DisconnectError rescue => e PatronusFati.logger.error(format('Error in read thread: %s %s', e.class.to_s, e.message)) e.backtrace.each do |l| PatronusFati.logger.error(l) end ensure socket.close if socket && !socket.closed? end end end
start_write_thread()
click to toggle source
# File lib/patronus_fati/connection.rb, line 73 def start_write_thread self.write_thread = Thread.new do begin count = 0 while (msg = write_queue.pop) socket.write("!%i %s\r\n" % [count, msg]) count += 1 end rescue => e PatronusFati.logger.error(format('Error in write thread: %s %s', e.class.to_s, e.message)) e.backtrace.each do |l| PatronusFati.logger.error(l) end ensure socket.close if socket && !socket.closed? end end end