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