Sha256: 93c7155271f05e77cb5e321ee974a3c073e357a25828b17e7fe206e38a076d99

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

require 'application.rb'

class Service<Application

  def self.event(name,arity=nil)
    name=name.to_s
    onName="on"+name[0..0].upcase+name[1..-1]
    isName="is"+name[0..0].upcase+name[1..-1]
    
    assert{not self.respond_to?(onName)}
    @@eventArity||={}
    if arity
      @@eventArity[name]=arity
    end
    self.module_eval("
      def #{onName}(&block)
        assert{block_given?}
        if @@eventArity[:#{name}]
          assert{@@eventArity[:#{name}]==block.arity}
        end
        @eventReceivers||={}
        @eventReceivers[:#{name}]||=[]
        @eventReceivers[:#{name}] << block
      end
    private
      def #{isName}(*args)
        if @@eventArity[:#{name}]
          assert{@@eventArity[:#{name}]==args.length}
        end
        @eventReceivers||={}
        @eventReceivers[:#{name}]||=[]
        @eventReceivers[:#{name}].each{|b|
          b.call(*args)
        }
      end
    ")
  end
    
  def initialize(cluster,options,name)
    super(cluster,options)
    @name=name
    @cronMutex=Mutex.new
    provides(name)
  end
  
  def cronTime
    @options[:cronTime]||10
  end
  
  def run
    @threads << Thread.new {
      while not quit?
        begin
          runCron
        rescue Object=>e
          log e
          log e.backtrace if e.is_a?(Exception)
        end
        sleep(cronTime)
      end
    }
  end
  def stop
    super
  end
  def runCron
    @cronMutex.synchronize {
      cron
    }
  end
  
  def cron
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
appswarm-0.0.1 lib/appswarm/service.rb