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