class RuneRb::Net::Server
Attributes
config[R]
max_players[RW]
updatemode[RW]
Public Class Methods
new()
click to toggle source
# File app/net/server.rb, line 7 def initialize @updatemode = false @max_players = 1000 setup_logger end
Public Instance Methods
bind()
click to toggle source
Binds the server socket and begins accepting player connections.
# File app/net/server.rb, line 91 def bind EventMachine.run do Signal.trap("INT") { WORLD.players.each { |p| WORLD.unregister(p) } while WORLD.work_thread.waiting > 0 sleep(0.01) end EventMachine.stop if EventMachine.reactor_running? exit } Signal.trap("TERM") { EventMachine.stop } EventMachine.start_server("0.0.0.0", @config.port + 1, RuneRb::Net::JaggrabConnection) if $cache EventMachine.start_server("0.0.0.0", @config.port, RuneRb::Net::Connection) @log.info "Ready on port #{@config.port}" ## Temporary tick execution timer EventMachine.add_periodic_timer(0.600) do @log.info "Executing tick!" ticks = [] updates = [] resets = [] WORLD.npcs.each do|npc| ticks << RuneRb::Tasks::NPCTickTask.new(npc) resets << RuneRb::Tasks::NPCResetTask.new(npc) end WORLD.players.each do |p| next unless p.index ticks << RuneRb::Tasks::PlayerTickTask.new(p) resets << RuneRb::Tasks::PlayerResetTask.new(p) updates << RuneRb::Tasks::PlayerUpdateTask.new(p) updates << RuneRb::Tasks::NPCUpdateTask.new(p) end ticks.each { |t| WORLD.submit_task &t.method(:execute) } updates.each { |t| WORLD.submit_task &t.method(:execute) } resets.each { |t| WORLD.submit_task &t.method(:execute) } end ## Temporary object tick execution timer EventMachine.add_periodic_timer(1) do WORLD.object_manager.objects.each do |object| object.delay -= 1 return unless object.delay <= 0 object.reset WORLD.object_manager.objects.delete object end end end end
init_cache()
click to toggle source
# File app/net/server.rb, line 65 def init_cache begin $cache = RuneRb::Misc::Cache.new("./data/cache/") rescue Exception => e $cache = nil Logging.logger['cache'].warn e.to_s end end
load_config()
click to toggle source
# File app/net/server.rb, line 81 def load_config WORLD.shop_manager.load_shops WORLD.door_manager.load_single_doors WORLD.door_manager.load_double_doors RuneRb::World::NPCSpawns.load RuneRb::World::ItemSpawns.load end
load_defs()
click to toggle source
# File app/net/server.rb, line 74 def load_defs RuneRb::Item::ItemDefinition.load # Equipment RuneRb::Equipment.load end
load_hooks()
click to toggle source
Load hooks
# File app/net/server.rb, line 57 def load_hooks Dir["./plugins/*.rb"].each {|file| load file } end
load_int_hooks()
click to toggle source
# File app/net/server.rb, line 61 def load_int_hooks Dir["./plugins/internal/*.rb"].each {|file| load file } end
reload()
click to toggle source
# File app/net/server.rb, line 49 def reload HOOKS.clear load_hooks load_int_hooks RuneRb::Net.load_packets end
setup_logger()
click to toggle source
# File app/net/server.rb, line 13 def setup_logger Logging.color_scheme( 'bright', :levels => { :info => :green, :warn => :yellow, :error => :red, :fatal => [:white, :on_red] }, :date => :white, :logger => :white, :message => :white ) Logging.logger.root.add_appenders( Logging.appenders.stdout( 'stdout', :layout => Logging.layouts.pattern( :pattern => '[%d] %-5l %c: %m\n', :color_scheme => 'bright' )), Logging.appenders.file('data/logs/development.log', :layout => Logging.layouts.pattern(:pattern => '[%d] %-5l %c: %m\n')) ) @log = Logging.logger['server'] end
start_config(config)
click to toggle source
# File app/net/server.rb, line 39 def start_config(config) @config = config init_cache load_int_hooks load_defs load_hooks load_config bind end