swarley

Orchid2::Server v1

Sep 13th, 2011
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.64 KB | None | 0 0
  1. load 'lib/config.rb'
  2.  
  3. module Orchid2
  4.   class Server
  5.      def initialize
  6.         @conf     = Orchid2::Config.new.to_hash
  7.         @base_uid = @conf[:server][:sid]
  8.         @users    = {}
  9.         @modules  = {}
  10.         @server  = TCPServer.new(@conf[:server][:port])
  11.         @servers = [@server]
  12.      end
  13.      
  14.      def main
  15.         begin
  16.           while true   
  17.              ping_check()
  18.              ready = select(@users.values + @servers, nil, nil, 1)
  19.              ready = ready[0] if ready != nil
  20.              ready.each do |client|
  21.                 if client.class == Orchid2::User
  22.                   parse(client)
  23.                 elsif client.class == Orchid2::Link
  24.                   handle(client)
  25.                 elsif client.class == Orchid2::Server
  26.                   new_connection()
  27.                 end
  28.              end
  29.           end
  30.         rescue Exception => e
  31.           puts e.backtrace.join("\n")
  32.           retry
  33.         end
  34.      end
  35.      
  36.      def ping_check
  37.         @users.select {|x| Time.now.to_i - x.ping >= @conf[:user][:ping_interval]}.each do |client|
  38.           if client.live
  39.              client.ping
  40.           else
  41.              quit(client, "Ping Timeout: #{@conf[:user][:ping_interval]}")
  42.           end  
  43.         end
  44. #       @servers.select {|x| Time.now.to_i - x.ping >= @conf[:links][:ping_interval]}.each do |server|
  45. #         if server.live
  46. #            server.ping unless server == @server
  47. #         else
  48. #            server.quit("Ping Timeout: #{@conf[:server][:ping_interval]}")
  49. #         end
  50. #       end
  51.      end
  52.        
  53.      def parse(client)
  54.         client.ping = Time.now.to_i
  55.         if client.eof
  56.           client.quit("Connection Closed")
  57.           quit = true
  58.         end
  59.         return if quit
  60.         line = client.to_io.gets
  61.         puts line
  62.      end
  63.      
  64.      def handle(server)
  65.      end
  66.      
  67.      def new_connection()
  68.         Thread.new do
  69.           client = Orchid2::User.new(@server.accept)
  70.           if client.registered
  71.              @clients.push client
  72.              @users[@client.uid] = client
  73.           else
  74.              client.close
  75.           end
  76.         end
  77.      end
  78.      
  79.   end
  80. end
Add Comment
Please, Sign In to add comment