def run
case options['dbtype']
when :yaml
require 'storage/yamlstore'
@db = YamlStore.new(options['dbfile'])
when :xml
require 'storage/xmlstore'
@db = XmlStore.new(options['dbfile'])
when :gdbm
require 'storage/gdbmstore'
@db = GdbmStore.new(options['dbfile'])
when :sdbm
require 'storage/sdbmstore'
@db = SdbmStore.new(options['dbfile'])
when :dbm
require 'storage/dbmstore'
@db = DbmStore.new(options['dbfile'])
when :sqlite
require 'storage/sqlitestore'
@db = SqliteStore.new(options['dbfile'])
when :sqlite3
require 'storage/sqlite3store'
@db = Sqlite3Store.new(options['dbfile'])
else
log.fatal "Invalid 'dbtype' in Configuration"
raise RunTimeError
end
@world = @db.get(0)
@db.makenoswap(0)
@world.startup
@eventmgr = EventManager.new
log.info "Booting server on port #{options['server_port'] || 4000}"
@server = Reactor.new(options['server_port'] || 4000,
options['server_type'], options['server_io'],
options['server_negotiation'], options['server_filters'],
address=nil)
raise "Unable to start server" unless @server.start(self)
log.info "TMUD is ready"
Signal.trap("INT", method(:handle_signal))
Signal.trap("TERM", method(:handle_signal))
Signal.trap("KILL", method(:handle_signal))
until @shutdown
@server.poll(0.3)
@eventmgr.process_events
end
graceful_shutdown
rescue
log.fatal "Engine failed in run"
log.fatal $!
end