class Net::IRC::Server::Session
Attributes
host[R]
nick[R]
prefix[R]
real[R]
Public Class Methods
new(server, socket, logger, opts={})
click to toggle source
# File lib/net/irc/server.rb, line 81 def initialize(server, socket, logger, opts={}) @server, @socket, @log, @opts = server, socket, logger, opts end
start(*args)
click to toggle source
# File lib/net/irc/server.rb, line 85 def self.start(*args) new(*args).start end
Public Instance Methods
available_channel_modes()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb, line 77 def available_channel_modes "spknm" end
available_user_modes()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb, line 72 def available_user_modes "eixwy" end
finish()
click to toggle source
Close this session.
# File lib/net/irc/server.rb, line 112 def finish begin @socket.close rescue end on_disconnected end
on_connected()
click to toggle source
Call when socket connected.
# File lib/net/irc/server.rb, line 144 def on_connected end
on_disconnected()
click to toggle source
Call when socket closed.
# File lib/net/irc/server.rb, line 148 def on_disconnected end
on_message(m)
click to toggle source
Catch all messages. If this method return true, aother callback will not be called.
# File lib/net/irc/server.rb, line 153 def on_message(m) end
on_nick(m)
click to toggle source
Default NICK callback. Set @nick.
# File lib/net/irc/server.rb, line 128 def on_nick(m) @nick = m.params[0] @prefix = Prefix.new("#{@nick}!#{@user}@#{@host}") if defined? @prefix end
on_pass(m)
click to toggle source
Default PASS callback. Set @pass.
# File lib/net/irc/server.rb, line 122 def on_pass(m) @pass = m.params[0] end
on_ping(m)
click to toggle source
Default PING callback. Response PONG.
# File lib/net/irc/server.rb, line 157 def on_ping(m) post server_name, PONG, m.params[0] end
on_user(m)
click to toggle source
Default USER callback. Set @user, @real, @host and call initial_message.
# File lib/net/irc/server.rb, line 135 def on_user(m) @user, @real = m.params[0], m.params[3] @nick ||= @user @host = @socket.peeraddr[2] @prefix = Prefix.new("#{@nick}!#{@user}@#{@host}") initial_message end
server_name()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb, line 62 def server_name "net-irc" end
server_version()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb, line 67 def server_version "0.0.0" end
start()
click to toggle source
Start session loop.
# File lib/net/irc/server.rb, line 90 def start on_connected while l = @socket.gets begin @log.debug "RECEIVE: #{l.chomp}" m = Message.parse(l) next if on_message(m) === true name = "on_#{(COMMANDS[m.command.upcase] || m.command).downcase}" send(name, m) if respond_to?(name) break if m.command == QUIT rescue Message::InvalidMessage @log.error "MessageParse: " + l.inspect end end rescue IOError ensure finish end
Private Instance Methods
initial_message()
click to toggle source
Call when client connected. Send RPL_WELCOME sequence. If you want to customize, override this method at subclass.
# File lib/net/irc/server.rb, line 179 def initial_message post server_name, RPL_WELCOME, @nick, "Welcome to the Internet Relay Network #{@prefix}" post server_name, RPL_YOURHOST, @nick, "Your host is #{server_name}, running version #{server_version}" post server_name, RPL_CREATED, @nick, "This server was created #{Time.now}" post server_name, RPL_MYINFO, @nick, "#{server_name} #{server_version} #{available_user_modes} #{available_channel_modes}" end
post(prefix, command, *params)
click to toggle source
Post message to server.
include Net::IRC::Constants post prefix, PRIVMSG, "#channel", "foobar"
# File lib/net/irc/server.rb, line 166 def post(prefix, command, *params) m = Message.new(prefix, command, params.map {|s| #s.gsub(/\r\n|[\r\n]/, " ") s.tr("\r\n", " ") }) @log.debug "SEND: #{m.to_s.chomp}" @socket << m rescue IOError finish end