Class | Net::IRC::Server |
In: |
lib/net/irc/server.rb
|
Parent: | Object |
sessions | [RW] | |
state | [RW] | Server global state for accessing Server::Session |
# File lib/net/irc/server.rb, line 6 6: def initialize(host, port, session_class, opts={}) 7: @host = host 8: @port = port 9: @session_class = session_class 10: @opts = OpenStruct.new(opts) 11: @sessions = [] 12: @state = {} 13: end
Close all sessions.
# File lib/net/irc/server.rb, line 41 41: def finish 42: Thread.exclusive do 43: @accept.kill 44: begin 45: @serv.close 46: rescue 47: end 48: @sessions.each do |s| 49: s.finish 50: end 51: end 52: end
Start server loop.
# File lib/net/irc/server.rb, line 16 16: def start 17: @serv = TCPServer.new(@host, @port) 18: @log = @opts.logger || Logger.new($stdout) 19: @log.info "Host: #{@host} Port:#{@port}" 20: @accept = Thread.start do 21: loop do 22: Thread.start(@serv.accept) do |s| 23: begin 24: @log.info "Client connected, new session starting..." 25: s = @session_class.new(self, s, @log, @opts) 26: @sessions << s 27: s.start 28: rescue Exception => e 29: puts e 30: puts e.backtrace 31: ensure 32: @sessions.delete(s) 33: end 34: end 35: end 36: end 37: @accept.join 38: end