class RFlow::Components::IRC::Client::Connection
@!visibility private
Attributes
client[RW]
@!visibility private
client_ip[R]
@!visibility private
client_port[R]
@!visibility private
server_ip[R]
@!visibility private
server_port[R]
@!visibility private
Public Instance Methods
command(cmd, args = [], prefix = nil)
click to toggle source
@!visibility private
# File lib/rflow/components/irc/client.rb, line 234 def command(cmd, args = [], prefix = nil) RFlow.logger.debug { "#{client.name}: command: '#{cmd}' with args ['#{args.join("', '")}'] and prefix '#{prefix}'" } line = '' if prefix line << ":#{prefix} " end line << cmd.upcase last_arg = args.pop line << " #{args.join ' '}" unless args.empty? if last_arg =~ /\s/; line << ' :' << last_arg else line << ' ' << last_arg end send_irc_line line end
connection_completed()
click to toggle source
@!visibility private
# File lib/rflow/components/irc/client.rb, line 161 def connection_completed @reconnecting = false @connected = true RFlow.logger.info "#{client.name}: Connected to IRC server #{client.config['server']}:#{client.config['port']}" command "PASS", [client.config['server_password']] unless client.config['server_password'].nil? command "NICK", [client.config['nickname']] command "USER", [client.config['username'], client.config['username'], client.config['username'], client.config['username']] command "NickServ IDENTIFY", [client.config['nickname'], client.config['nickserv_password']] unless client.config['nickserv_password'].nil? command "OPER", [client.config['oper_user'] || client.config['nickname'], client.config['oper_password']] unless client.config['oper_password'].nil? end
post_init()
click to toggle source
@!visibility private
Calls superclass method
# File lib/rflow/components/irc/client.rb, line 154 def post_init @client_port, @client_ip = Socket.unpack_sockaddr_in(get_peername) rescue ["?", "?.?.?.?"] @server_port, @server_ip = Socket.unpack_sockaddr_in(get_sockname) rescue ["?", "?.?.?.?"] super end
receive_line(line)
click to toggle source
@!visibility private
# File lib/rflow/components/irc/client.rb, line 175 def receive_line(line) RFlow.logger.debug { "#{client.name}: IRCClient#receive_line: #{line}" } prefix, cmd, params = IRC.parse_irc_line(line) # Now have an optional prefix, required cmd, and optional param array case cmd when /PING/ command('PONG', params) else # create an IRC message here and send it along RFlow.logger.debug { "#{client.name}: Sending IRC message '#{line}', signature '#{signature.class}:#{signature}', '#{signature.to_s.class}:#{signature.to_s}'" } client.from_server.send_message(RFlow::Message.new('RFlow::Message::Data::IRC::Message').tap do |m| m.data.prefix = prefix m.data.command = cmd m.data.parameters = params m.provenance << RFlow::Message::ProcessingEvent.new(client.uuid, Time.now.utc).tap do |e| e.context = signature.to_s e.completed_at = Time.now.utc end end) end end
send_irc_line(line)
click to toggle source
@!visibility private
# File lib/rflow/components/irc/client.rb, line 228 def send_irc_line(line) RFlow.logger.debug { "#{client.name}: Sending line '#{line}'" } send_data "#{line}\r\n" end
send_irc_message(irc_message)
click to toggle source
@!visibility private
# File lib/rflow/components/irc/client.rb, line 222 def send_irc_message(irc_message) RFlow.logger.debug { "#{client.name}: Sending an IRC message to #{client_ip}:#{client_port}" } command irc_message.data.command, irc_message.data.parameters, irc_message.data.prefix end
unbind(reason = nil)
click to toggle source
@!visibility private
# File lib/rflow/components/irc/client.rb, line 200 def unbind(reason = nil) if @connected || @reconnecting RFlow.logger.error "#{client.name}: Disconnected from IRC server #{client.config['server']}:#{client.config['port']} due to '#{reason}', reconnecting ..." client.log_port.send_message(RFlow::Message.new('RFlow::Message::Data::Log').tap do |m| m.data.timestamp = Integer(Time.now.to_f * 1000) # ms since epoch m.data.level = 'INFO' m.data.text = "IRC disconnected. Reconnecting in #{client.config['reconnect_interval']} seconds." end) EM.add_timer(client.config['reconnect_interval']) do RFlow.logger.info "#{client.name}: Attempting reconnect to IRC server #{client.config['server']}:#{client.config['port']}" reconnect(client.config['server'], client.config['port']) end @connected = false @reconnecting = true else raise RuntimeError, "Unable to connect to IRC server #{client.config['server']}:#{client.config['port']} due to '#{reason}'" end end