class EventManager

Public Class Methods

new() click to toggle source
# File lib/engine/eventmanager.rb, line 23
def initialize
  @tits = []
  @bra = Mutex.new
  log.info "Event manager starting..."
end

Public Instance Methods

add_event(from,to,kind,msg=nil) click to toggle source

Add an Event to the TITS queue.

e

The event to be added.

return

Undefined.

# File lib/engine/eventmanager.rb, line 32
def add_event(from,to,kind,msg=nil)
  @bra.synchronize do
    @tits.push(Event.new(from,to,kind,msg))
  end
end
contents() click to toggle source
# File lib/engine/eventmanager.rb, line 46
def contents
  @tits.inspect
end
get_event() click to toggle source

Get an Event from the TITS queue.

return

The Event or nil

# File lib/engine/eventmanager.rb, line 40
def get_event
  @bra.synchronize do
    @tits.shift
  end
end
process_events() click to toggle source

Process events A false return in a PRE trigger will prevent execution of the event

# File lib/engine/eventmanager.rb, line 52
def process_events
  while e = get_event
    begin
      # pre triggers
      obj = Engine.instance.db.get(e.to)
      obj2 = Engine.instance.db.get(e.from)
      sid = obj.get_trigger("pre_"+e.kind.to_s)
      if sid
        script = Engine.instance.db.get(sid)
        if script
          if script.execute(e)
            # success
            if obj2.class == Character
              s,o = obj.msgsucc.split("|")
              obj2.sendto(s) if s && !s.empty?
              if o && !o.empty?
                Engine.instance.db.get(obj2.location).characters(obj2.id).each do |p|
                  add_event(obj2.id,p.id,:show,"#{obj2.name} #{o}")
                end
              end
            end
          else
            # failure
            if obj2.class == Character
              s,o = obj.msgfail.split("|")
              obj2.sendto(s) if s && !s.empty?
              if o && !o.empty?
                Engine.instance.db.get(obj2.location).characters(obj2.id).each do |p|
                  add_event(obj2.id,p.id,:show,"#{obj2.name} #{o}")
                end
              end
            end
            next
          end
        else
          log.error "Script not found: #{sid} for Event: #{e}"
          # We fail the action slently
          next
        end
      end

      # action receiver
      obj.send(e.kind,e)

      # post triggers
      sid = obj.get_trigger(e.kind)
      if sid
        script = Engine.instance.db.get(sid)
        if script
          if script.execute(e)
            # success
            if obj2.class == Character
              s,o = obj.msgsucc.split("|")
              obj2.sendto(s) if s && !s.empty?
              if o && !o.empty?
                Engine.instance.db.get(obj2.location).characters(obj2.id).each do |p|
                  add_event(obj2.id,p.id,:show,"#{obj2.name} #{o}")
                end
              end
            end
          else
            # failure
            if obj2.class == Character
              s,o = obj.msgfail.split("|")
              obj2.sendto(s) if s && !s.empty?
              if o && !o.empty?
                Engine.instance.db.get(obj2.location).characters(obj2.id).each do |p|
                  add_event(obj2.id,p.id,:show,"#{obj2.name} #{o}")
                end
              end
            end
          end
        else
          log.error "Script not found: #{sid} for Event: #{e.inspect}"
          # We fail the action slently
        end
      end
    rescue
      log.error "Event failed: #{e.inspect}"
      log.error $!
    end
  end
end