module RubyMud
require 'socket'
require 'logger'

$clientConnections = []

port = (ARGV[0] || 1234).to_i
server = TCPServer.new(port)
# Create a logger
logger = Logger.new('logfile.log')

print "rubymud - server started\n"

loop do

	socket = server.accept()

	Thread.start do # one thread per client
	    s = socket

		port = s.peeraddr[1]
		name = s.peeraddr[2]
		addr = s.peeraddr[3]

    
		logger.info('client connected') { "*** recieving from #{name}:#{port}" }

		begin
			newClientConnection = ClientConnection.new(s)
			$clientConnections.push(newClientConnection)	
	
			while c = s.getc() # read a line at a time
				newClientConnection.receiveChar(c)
				#puts "#{addr} [#{Time.now}]: #{line}"				
				#raise ClientQuitError if line =~ /^die\r?$/				
			end	
	
		rescue ClientQuitError
			logger.info('client disconnected') { "*** #{name}:#{port}" }
			puts "*** #{name}:#{port} disconnected\n"
		rescue => detail
			print "\n\n ---------\n !!!ERROR!!!\n"
			print $!
			print detail.backtrace.join("\n")
			print "---------\n\n"
			logger.fatal('client thread fatal error') {$!+"\n"+detail.backtrace.join("\n")}
		ensure 
			Players.remove(newClientConnection)
			if (newClientConnection.player != nil)
				newClientConnection.player.parent.removeItem(newClientConnection.player)
			end
			s.close() # close socket on error		
		end	
		puts "*** done with #{name}:#{port}"
	end
end 
 
logger.close
end