Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- load 'lib/config.rb'
- module Orchid2
- class Server
- def initialize
- @conf = Orchid2::Config.new.to_hash
- @base_uid = @conf[:server][:sid]
- @users = {}
- @modules = {}
- @server = TCPServer.new(@conf[:server][:port])
- @servers = [@server]
- end
- def main
- begin
- while true
- ping_check()
- ready = select(@users.values + @servers, nil, nil, 1)
- ready = ready[0] if ready != nil
- ready.each do |client|
- if client.class == Orchid2::User
- parse(client)
- elsif client.class == Orchid2::Link
- handle(client)
- elsif client.class == Orchid2::Server
- new_connection()
- end
- end
- end
- rescue Exception => e
- puts e.backtrace.join("\n")
- retry
- end
- end
- def ping_check
- @users.select {|x| Time.now.to_i - x.ping >= @conf[:user][:ping_interval]}.each do |client|
- if client.live
- client.ping
- else
- quit(client, "Ping Timeout: #{@conf[:user][:ping_interval]}")
- end
- end
- # @servers.select {|x| Time.now.to_i - x.ping >= @conf[:links][:ping_interval]}.each do |server|
- # if server.live
- # server.ping unless server == @server
- # else
- # server.quit("Ping Timeout: #{@conf[:server][:ping_interval]}")
- # end
- # end
- end
- def parse(client)
- client.ping = Time.now.to_i
- if client.eof
- client.quit("Connection Closed")
- quit = true
- end
- return if quit
- line = client.to_io.gets
- puts line
- end
- def handle(server)
- end
- def new_connection()
- Thread.new do
- client = Orchid2::User.new(@server.accept)
- if client.registered
- @clients.push client
- @users[@client.uid] = client
- else
- client.close
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement