Class | Net::IRC::Server::Session |
In: |
lib/net/irc/server.rb
|
Parent: | Object |
host | [R] | |
nick | [R] | |
prefix | [R] | |
real | [R] |
# File lib/net/irc/server.rb, line 81 81: def initialize(server, socket, logger, opts={}) 82: @server, @socket, @log, @opts = server, socket, logger, opts 83: end
Override subclass.
# File lib/net/irc/server.rb, line 77 77: def available_channel_modes 78: "spknm" 79: end
Override subclass.
# File lib/net/irc/server.rb, line 72 72: def available_user_modes 73: "eixwy" 74: end
Close this session.
# File lib/net/irc/server.rb, line 112 112: def finish 113: begin 114: @socket.close 115: rescue 116: end 117: on_disconnected 118: end
Do nothing. This is for avoiding error on calling super. So you can always call super at subclass.
# File lib/net/irc/server.rb, line 164 164: def method_missing(name, *args) 165: end
Catch all messages. If this method return true, aother callback will not be called.
# File lib/net/irc/server.rb, line 153 153: def on_message(m) 154: end
Default NICK callback. Set @nick.
# File lib/net/irc/server.rb, line 128 128: def on_nick(m) 129: @nick = m.params[0] 130: @prefix = Prefix.new("#{@nick}!#{@user}@#{@host}") if defined? @prefix 131: end
Default PASS callback. Set @pass.
# File lib/net/irc/server.rb, line 122 122: def on_pass(m) 123: @pass = m.params[0] 124: end
Default PING callback. Response PONG.
# File lib/net/irc/server.rb, line 157 157: def on_ping(m) 158: post server_name, PONG, m.params[0] 159: end
Default USER callback. Set @user, @real, @host and call initial_message.
# File lib/net/irc/server.rb, line 135 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
Start session loop.
# File lib/net/irc/server.rb, line 90 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