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 81 def initialize(server, socket, logger, opts={}) 82 @server, @socket, @log, @opts = server, socket, logger, opts 83 end
start(*args)
click to toggle source
# File lib/net/irc/server.rb 85 def self.start(*args) 86 new(*args).start 87 end
Public Instance Methods
available_channel_modes()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb 77 def available_channel_modes 78 "spknm" 79 end
available_user_modes()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb 72 def available_user_modes 73 "eixwy" 74 end
finish()
click to toggle source
Close this session.
# File lib/net/irc/server.rb 112 def finish 113 begin 114 @socket.close 115 rescue 116 end 117 on_disconnected 118 end
on_connected()
click to toggle source
Call when socket connected.
# File lib/net/irc/server.rb 144 def on_connected 145 end
on_disconnected()
click to toggle source
Call when socket closed.
# File lib/net/irc/server.rb 148 def on_disconnected 149 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 153 def on_message(m) 154 end
on_nick(m)
click to toggle source
Default NICK callback. Set @nick.
# File lib/net/irc/server.rb 128 def on_nick(m) 129 @nick = m.params[0] 130 @prefix = Prefix.new("#{@nick}!#{@user}@#{@host}") if defined? @prefix 131 end
on_pass(m)
click to toggle source
Default PASS callback. Set @pass.
# File lib/net/irc/server.rb 122 def on_pass(m) 123 @pass = m.params[0] 124 end
on_ping(m)
click to toggle source
Default PING callback. Response PONG.
# File lib/net/irc/server.rb 157 def on_ping(m) 158 post server_name, PONG, m.params[0] 159 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 135 def on_user(m) 136 @user, @real = m.params[0], m.params[3] 137 @nick ||= @user 138 @host = @socket.peeraddr[2] 139 @prefix = Prefix.new("#{@nick}!#{@user}@#{@host}") 140 initial_message 141 end
server_name()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb 62 def server_name 63 "net-irc" 64 end
server_version()
click to toggle source
Override subclass.
# File lib/net/irc/server.rb 67 def server_version 68 "0.0.0" 69 end
start()
click to toggle source
Start session loop.
# File lib/net/irc/server.rb 90 def start 91 on_connected 92 while l = @socket.gets 93 begin 94 @log.debug "RECEIVE: #{l.chomp}" 95 m = Message.parse(l) 96 next if on_message(m) === true 97 98 name = "on_#{(COMMANDS[m.command.upcase] || m.command).downcase}" 99 send(name, m) if respond_to?(name) 100 101 break if m.command == QUIT 102 rescue Message::InvalidMessage 103 @log.error "MessageParse: " + l.inspect 104 end 105 end 106 rescue IOError 107 ensure 108 finish 109 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 179 def initial_message 180 post server_name, RPL_WELCOME, @nick, "Welcome to the Internet Relay Network #{@prefix}" 181 post server_name, RPL_YOURHOST, @nick, "Your host is #{server_name}, running version #{server_version}" 182 post server_name, RPL_CREATED, @nick, "This server was created #{Time.now}" 183 post server_name, RPL_MYINFO, @nick, "#{server_name} #{server_version} #{available_user_modes} #{available_channel_modes}" 184 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 166 def post(prefix, command, *params) 167 m = Message.new(prefix, command, params.map {|s| 168 #s.gsub(/\r\n|[\r\n]/, " ") 169 s.tr("\r\n", " ") 170 }) 171 @log.debug "SEND: #{m.to_s.chomp}" 172 @socket << m 173 rescue IOError 174 finish 175 end