You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2009/08/26 20:44:14 UTC

svn commit: r808155 - /qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb

Author: tross
Date: Wed Aug 26 18:44:14 2009
New Revision: 808155

URL: http://svn.apache.org/viewvc?rev=808155&view=rev
Log:
Purely cosmetic changes, no functional change.
  - Changed indentation
  - Re-ordered class definitions for more logical grouping

Modified:
    qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb

Modified: qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb?rev=808155&r1=808154&r2=808155&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb Wed Aug 26 18:44:14 2009
@@ -23,547 +23,567 @@
 
 module Qmf
 
-    # Pull all the TYPE_* constants into Qmf namespace.  Maybe there's an easier way?
-    Qmfengine.constants.each do |c|
-        if c.index('TYPE_') == 0 or c.index('ACCESS_') == 0 or c.index('DIR_') == 0
-            const_set(c, Qmfengine.const_get(c))
-        end
+  # Pull all the TYPE_* constants into Qmf namespace.  Maybe there's an easier way?
+  Qmfengine.constants.each do |c|
+    if c.index('TYPE_') == 0 or c.index('ACCESS_') == 0 or c.index('DIR_') == 0
+      const_set(c, Qmfengine.const_get(c))
     end
+  end
 
-    class ConnectionSettings
-      attr_reader :impl
+  ##==============================================================================
+  ## CONNECTION
+  ##==============================================================================
 
-      def initialize(url = nil)
-        if url
-          @impl = Qmfengine::ConnectionSettings.new(url)
-        else
-          @impl = Qmfengine::ConnectionSettings.new()
-        end
-      end
-
-      def set_attr(key, val)
-        if val.class == String
-          v = Qmfengine::Value.new(TYPE_LSTR)
-          v.setString(val)
-        elsif val.class == TrueClass or val.class == FalseClass
-          v = Qmfengine::Value.new(TYPE_BOOL)
-          v.setBool(val)
-        elsif val.class == Fixnum
-          v = Qmfengine::Value.new(TYPE_UINT32)
-          v.setUint(val)
-        else
-          raise ArgumentError, "Value for attribute '#{key}' has unsupported type: #{val.class}"
-        end
+  class ConnectionSettings
+    attr_reader :impl
 
-        @impl.setAttr(key, v)
+    def initialize(url = nil)
+      if url
+        @impl = Qmfengine::ConnectionSettings.new(url)
+      else
+        @impl = Qmfengine::ConnectionSettings.new()
       end
     end
 
-    class ConnectionHandler
-        def conn_event_connected(); end
-        def conn_event_disconnected(error); end
-        def sess_event_session_closed(context, error); end
-        def sess_event_recv(context, message); end
+    def set_attr(key, val)
+      if val.class == String
+        v = Qmfengine::Value.new(TYPE_LSTR)
+        v.setString(val)
+      elsif val.class == TrueClass or val.class == FalseClass
+        v = Qmfengine::Value.new(TYPE_BOOL)
+        v.setBool(val)
+      elsif val.class == Fixnum
+        v = Qmfengine::Value.new(TYPE_UINT32)
+        v.setUint(val)
+      else
+        raise ArgumentError, "Value for attribute '#{key}' has unsupported type: #{val.class}"
+      end
+
+      @impl.setAttr(key, v)
     end
+  end
 
-    class Query
-      attr_reader :impl
-      def initialize(i)
-        @impl = i
-      end
+  class ConnectionHandler
+    def conn_event_connected(); end
+    def conn_event_disconnected(error); end
+    def sess_event_session_closed(context, error); end
+    def sess_event_recv(context, message); end
+  end
 
-      def package_name
-        @impl.getPackage
-      end
+  class Query
+    attr_reader :impl
+    def initialize(i)
+      @impl = i
+    end
 
-      def class_name
-        @impl.getClass
-      end
+    def package_name
+      @impl.getPackage
+    end
 
-      def object_id
-        objid = @impl.getObjectId
-        if objid.class == NilClass
-          return nil
-        end
-        return ObjectId.new(objid)
+    def class_name
+      @impl.getClass
+    end
+
+    def object_id
+      objid = @impl.getObjectId
+      if objid.class == NilClass
+        return nil
       end
+      return ObjectId.new(objid)
     end
+  end
 
-    class Connection
-      attr_reader :impl
+  class Connection
+    attr_reader :impl
 
-      def initialize(settings)
-        @impl = Qmfengine::ResilientConnection.new(settings.impl)
-        @sockEngine, @sock = Socket::socketpair(Socket::PF_UNIX, Socket::SOCK_STREAM, 0)
-        @impl.setNotifyFd(@sockEngine.fileno)
-        @new_conn_handlers = Array.new
-        @conn_handlers = Array.new
-        @sess_handlers = Array.new
+    def initialize(settings)
+      @impl = Qmfengine::ResilientConnection.new(settings.impl)
+      @sockEngine, @sock = Socket::socketpair(Socket::PF_UNIX, Socket::SOCK_STREAM, 0)
+      @impl.setNotifyFd(@sockEngine.fileno)
+      @new_conn_handlers = Array.new
+      @conn_handlers = Array.new
+      @sess_handlers = Array.new
 
-        @thread = Thread.new do
-          run
-        end
+      @thread = Thread.new do
+        run
       end
+    end
 
-      def add_conn_handler(handler)
-        @new_conn_handlers.push(handler)
-        @sockEngine.write("x")
-      end
+    def add_conn_handler(handler)
+      @new_conn_handlers.push(handler)
+      @sockEngine.write("x")
+    end
 
-      def add_sess_handler(handler)
-        @sess_handlers.push(handler)
-      end
+    def add_sess_handler(handler)
+      @sess_handlers.push(handler)
+    end
 
-      def run()
-        event = Qmfengine::ResilientConnectionEvent.new
-        connected = nil
-        while :true
-          @sock.read(1)
+    def run()
+      event = Qmfengine::ResilientConnectionEvent.new
+      connected = nil
+      while :true
+        @sock.read(1)
 
-          @new_conn_handlers.each do |nh|
-            @conn_handlers.push(nh)
-            nh.conn_event_connected() if connected
-          end
-          @new_conn_handlers = Array.new
+        @new_conn_handlers.each do |nh|
+          @conn_handlers.push(nh)
+          nh.conn_event_connected() if connected
+        end
+        @new_conn_handlers = Array.new
 
-          valid = @impl.getEvent(event)
-          while valid
-            begin
-              case event.kind
-              when Qmfengine::ResilientConnectionEvent::CONNECTED
-                connected = :true
-                @conn_handlers.each { |h| h.conn_event_connected() }
-              when Qmfengine::ResilientConnectionEvent::DISCONNECTED
-                connected = nil
-                @conn_handlers.each { |h| h.conn_event_disconnected(event.errorText) }
-              when Qmfengine::ResilientConnectionEvent::SESSION_CLOSED
-                event.sessionContext.handler.sess_event_session_closed(event.sessionContext, event.errorText)
-              when Qmfengine::ResilientConnectionEvent::RECV
-                event.sessionContext.handler.sess_event_recv(event.sessionContext, event.message)
-              end
-            rescue Exception => ex
-              puts "Event Exception: #{ex}"
-              puts ex.backtrace
+        valid = @impl.getEvent(event)
+        while valid
+          begin
+            case event.kind
+            when Qmfengine::ResilientConnectionEvent::CONNECTED
+              connected = :true
+              @conn_handlers.each { |h| h.conn_event_connected() }
+            when Qmfengine::ResilientConnectionEvent::DISCONNECTED
+              connected = nil
+              @conn_handlers.each { |h| h.conn_event_disconnected(event.errorText) }
+            when Qmfengine::ResilientConnectionEvent::SESSION_CLOSED
+              event.sessionContext.handler.sess_event_session_closed(event.sessionContext, event.errorText)
+            when Qmfengine::ResilientConnectionEvent::RECV
+              event.sessionContext.handler.sess_event_recv(event.sessionContext, event.message)
             end
-            @impl.popEvent
-            valid = @impl.getEvent(event)
+          rescue Exception => ex
+            puts "Event Exception: #{ex}"
+            puts ex.backtrace
           end
+          @impl.popEvent
+          valid = @impl.getEvent(event)
         end
       end
     end
+  end
 
-    class Session
-      attr_reader :handle, :handler
+  class Session
+    attr_reader :handle, :handler
 
-      def initialize(conn, label, handler)
-        @conn = conn
-        @label = label
-        @handler = handler
-        @handle = Qmfengine::SessionHandle.new
-        @conn.add_sess_handler(@handler)
-        result = @conn.impl.createSession(label, self, @handle)
-      end
+    def initialize(conn, label, handler)
+      @conn = conn
+      @label = label
+      @handler = handler
+      @handle = Qmfengine::SessionHandle.new
+      @conn.add_sess_handler(@handler)
+      result = @conn.impl.createSession(label, self, @handle)
     end
+  end
 
-    class ObjectId
-      attr_reader :impl
-      def initialize(impl=nil)
-        if impl
-          @impl = impl
-        else
-          @impl = Qmfengine::ObjectId.new
-        end
-      end
+  ##==============================================================================
+  ## OBJECTS
+  ##==============================================================================
 
-      def object_num_high
-        return @impl.getObjectNumHi
-      end
+  class QmfObject
+    attr_reader :impl, :object_class
+    def initialize(cls)
+      @object_class = cls
+      @impl = Qmfengine::Object.new(@object_class.impl)
+    end
 
-      def object_num_low
-        return @impl.getObjectNumLo
-      end
+    def destroy
+      @impl.destroy
+    end
 
-      def ==(other)
-        return (@impl.getObjectNumHi == other.impl.getObjectNumHi) &&
-           (@impl.getObjectNumLo == other.impl.getObjectNumLo)
-      end
+    def object_id
+      return ObjectId.new(@impl.getObjectId)
     end
 
-    class Arguments
-      attr_reader :map
-      def initialize(map)
-        @map = map
-        @by_hash = {}
-        key_count = @map.keyCount
-        a = 0
-        while a < key_count
-          @by_hash[@map.key(a)] = by_key(@map.key(a))
-          a += 1
-        end
-      end
+    def set_object_id(oid)
+      @impl.setObjectId(oid.impl)
+    end
 
-      def [] (key)
-        return @by_hash[key]
+    def get_attr(name)
+      val = value(name)
+      case val.getType
+      when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.asUint
+      when TYPE_UINT64 then val.asUint64
+      when TYPE_SSTR, TYPE_LSTR then val.asString
+      when TYPE_ABSTIME then val.asInt64
+      when TYPE_DELTATIME then val.asUint64
+      when TYPE_REF then val.asObjectId
+      when TYPE_BOOL then val.asBool
+      when TYPE_FLOAT then val.asFloat
+      when TYPE_DOUBLE then val.asDouble
+      when TYPE_UUID then val.asUuid
+      when TYPE_INT8, TYPE_INT16, TYPE_INT32 then val.asInt
+      when TYPE_INT64 then val.asInt64
+      when TYPE_MAP
+      when TYPE_OBJECT
+      when TYPE_LIST
+      when TYPE_ARRAY
       end
+    end
 
-      def []= (key, value)
-        @by_hash[key] = value
-        set(key, value)
-      end
-
-      def each
-        @by_hash.each { |k, v| yield(k, v) }
-      end
-
-      def by_key(key)
-        val = @map.byKey(key)
-        case val.getType
-        when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.asUint
-        when TYPE_UINT64                          then val.asUint64
-        when TYPE_SSTR, TYPE_LSTR                 then val.asString
-        when TYPE_ABSTIME                         then val.asInt64
-        when TYPE_DELTATIME                       then val.asUint64
-        when TYPE_REF                             then val.asObjectId
-        when TYPE_BOOL                            then val.asBool
-        when TYPE_FLOAT                           then val.asFloat
-        when TYPE_DOUBLE                          then val.asDouble
-        when TYPE_UUID                            then val.asUuid
-        when TYPE_INT8, TYPE_INT16, TYPE_INT32    then val.asInt
-        when TYPE_INT64                           then val.asInt64
-        when TYPE_MAP
-        when TYPE_OBJECT
-        when TYPE_LIST
-        when TYPE_ARRAY
-        end
+    def set_attr(name, v)
+      val = value(name)
+      case val.getType
+      when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.setUint(v)
+      when TYPE_UINT64 then val.setUint64(v)
+      when TYPE_SSTR, TYPE_LSTR then v ? val.setString(v) : val.setString('')
+      when TYPE_ABSTIME then val.setInt64(v)
+      when TYPE_DELTATIME then val.setUint64(v)
+      when TYPE_REF then val.setObjectId(v.impl)
+      when TYPE_BOOL then v ? val.setBool(v) : val.setBool(0)
+      when TYPE_FLOAT then val.setFloat(v)
+      when TYPE_DOUBLE then val.setDouble(v)
+      when TYPE_UUID then val.setUuid(v)
+      when TYPE_INT8, TYPE_INT16, TYPE_INT32 then val.setInt(v)
+      when TYPE_INT64 then val.setInt64(v)
+      when TYPE_MAP
+      when TYPE_OBJECT
+      when TYPE_LIST
+      when TYPE_ARRAY
       end
+    end
 
-      def set(key, value)
-        val = @map.byKey(key)
-        case val.getType
-        when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.setUint(value)
-        when TYPE_UINT64 then val.setUint64(value)
-        when TYPE_SSTR, TYPE_LSTR then value ? val.setString(value) : val.setString('')
-        when TYPE_ABSTIME then val.setInt64(value)
-        when TYPE_DELTATIME then val.setUint64(value)
-        when TYPE_REF then val.setObjectId(value.impl)
-        when TYPE_BOOL then value ? val.setBool(value) : val.setBool(0)
-        when TYPE_FLOAT then val.setFloat(value)
-        when TYPE_DOUBLE then val.setDouble(value)
-        when TYPE_UUID then val.setUuid(value)
-        when TYPE_INT8, TYPE_INT16, TYPE_INT32 then val.setInt(value)
-        when TYPE_INT64 then val.setInt64(value)
-        when TYPE_MAP
-        when TYPE_OBJECT
-        when TYPE_LIST
-        when TYPE_ARRAY
-        end
-      end
+    def [](name)
+      get_attr(name)
     end
 
-    class AgentHandler
-      def get_query(context, query, userId); end
-      def method_call(context, name, object_id, args, userId); end
+    def []=(name, value)
+      set_attr(name, value)
     end
 
-    class Agent < ConnectionHandler
-      def initialize(handler, label="")
-        if label == ""
-          @agentLabel = "rb-%s.%d" % [Socket.gethostname, Process::pid]
-        else
-          @agentLabel = label
-        end
-        @conn = nil
-        @handler = handler
-        @impl = Qmfengine::AgentEngine.new(@agentLabel)
-        @event = Qmfengine::AgentEvent.new
-        @xmtMessage = Qmfengine::Message.new
-      end
+    def inc_attr(name, by=1)
+      set_attr(name, get_attr(name) + by)
+    end
 
-      def set_connection(conn)
-        @conn = conn
-        @conn.add_conn_handler(self)
-      end
+    def dec_attr(name, by=1)
+      set_attr(name, get_attr(name) - by)
+    end
 
-      def register_class(cls)
-        @impl.registerClass(cls.impl)
+    private
+    def value(name)
+      val = @impl.getValue(name.to_s)
+      if val.nil?
+        raise ArgumentError, "Attribute '#{name}' not defined for class #{@object_class.impl.getName}"
       end
+      return val
+    end
+  end
 
-      def alloc_object_id(low = 0, high = 0)
-        ObjectId.new(@impl.allocObjectId(low, high))
+  class ObjectId
+    attr_reader :impl
+    def initialize(impl=nil)
+      if impl
+        @impl = impl
+      else
+        @impl = Qmfengine::ObjectId.new
       end
+    end
 
-      def query_response(context, object)
-        @impl.queryResponse(context, object.impl)
-      end
+    def object_num_high
+      return @impl.getObjectNumHi
+    end
 
-      def query_complete(context)
-        @impl.queryComplete(context)
-      end
+    def object_num_low
+      return @impl.getObjectNumLo
+    end
 
-      def method_response(context, status, text, arguments)
-        @impl.methodResponse(context, status, text, arguments.map)
-      end
+    def ==(other)
+      return (@impl.getObjectNumHi == other.impl.getObjectNumHi) &&
+        (@impl.getObjectNumLo == other.impl.getObjectNumLo)
+    end
+  end
 
-      def do_agent_events()
-        count = 0
-        valid = @impl.getEvent(@event)
-        while valid
-          count += 1
-          case @event.kind
-          when Qmfengine::AgentEvent::GET_QUERY
-            @handler.get_query(@event.sequence, Query.new(@event.query), @event.authUserId)
-          when Qmfengine::AgentEvent::START_SYNC
-          when Qmfengine::AgentEvent::END_SYNC
-          when Qmfengine::AgentEvent::METHOD_CALL
-            args = Arguments.new(@event.arguments)
-            @handler.method_call(@event.sequence, @event.name, ObjectId.new(@event.objectId),
-                                 args, @event.authUserId)
-          when Qmfengine::AgentEvent::DECLARE_QUEUE
-            @conn.impl.declareQueue(@session.handle, @event.name)
-          when Qmfengine::AgentEvent::DELETE_QUEUE
-            @conn.impl.deleteQueue(@session.handle, @event.name)
-          when Qmfengine::AgentEvent::BIND
-            @conn.impl.bind(@session.handle, @event.exchange, @event.name, @event.bindingKey)
-          when Qmfengine::AgentEvent::UNBIND
-            @conn.impl.unbind(@session.handle, @event.exchange, @event.name, @event.bindingKey)
-          when Qmfengine::AgentEvent::SETUP_COMPLETE
-            @impl.startProtocol()
-          end
-          @impl.popEvent
-          valid = @impl.getEvent(@event)
-        end
-        return count
+  class Arguments
+    attr_reader :map
+    def initialize(map)
+      @map = map
+      @by_hash = {}
+      key_count = @map.keyCount
+      a = 0
+      while a < key_count
+        @by_hash[@map.key(a)] = by_key(@map.key(a))
+        a += 1
       end
+    end
 
-      def do_agent_messages()
-        count = 0
-        valid = @impl.getXmtMessage(@xmtMessage)
-        while valid
-          count += 1
-          @conn.impl.sendMessage(@session.handle, @xmtMessage)
-          @impl.popXmt
-          valid = @impl.getXmtMessage(@xmtMessage)
-        end
-        return count
-      end
+    def [] (key)
+      return @by_hash[key]
+    end
 
-      def do_events()
-        begin
-          ecnt = do_agent_events
-          mcnt = do_agent_messages
-        end until ecnt == 0 and mcnt == 0
-      end
+    def []= (key, value)
+      @by_hash[key] = value
+      set(key, value)
+    end
 
-      def conn_event_connected()
-        puts "Agent Connection Established..."
-        @session = Session.new(@conn, "qmfa-%s.%d" % [Socket.gethostname, Process::pid], self)
-        @impl.newSession
-        do_events
-      end
+    def each
+      @by_hash.each { |k, v| yield(k, v) }
+    end
 
-      def conn_event_disconnected(error)
-        puts "Agent Connection Lost"
+    def by_key(key)
+      val = @map.byKey(key)
+      case val.getType
+      when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.asUint
+      when TYPE_UINT64                          then val.asUint64
+      when TYPE_SSTR, TYPE_LSTR                 then val.asString
+      when TYPE_ABSTIME                         then val.asInt64
+      when TYPE_DELTATIME                       then val.asUint64
+      when TYPE_REF                             then val.asObjectId
+      when TYPE_BOOL                            then val.asBool
+      when TYPE_FLOAT                           then val.asFloat
+      when TYPE_DOUBLE                          then val.asDouble
+      when TYPE_UUID                            then val.asUuid
+      when TYPE_INT8, TYPE_INT16, TYPE_INT32    then val.asInt
+      when TYPE_INT64                           then val.asInt64
+      when TYPE_MAP
+      when TYPE_OBJECT
+      when TYPE_LIST
+      when TYPE_ARRAY
       end
+    end
 
-      def sess_event_session_closed(context, error)
-        puts "Agent Session Lost"
+    def set(key, value)
+      val = @map.byKey(key)
+      case val.getType
+      when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.setUint(value)
+      when TYPE_UINT64 then val.setUint64(value)
+      when TYPE_SSTR, TYPE_LSTR then value ? val.setString(value) : val.setString('')
+      when TYPE_ABSTIME then val.setInt64(value)
+      when TYPE_DELTATIME then val.setUint64(value)
+      when TYPE_REF then val.setObjectId(value.impl)
+      when TYPE_BOOL then value ? val.setBool(value) : val.setBool(0)
+      when TYPE_FLOAT then val.setFloat(value)
+      when TYPE_DOUBLE then val.setDouble(value)
+      when TYPE_UUID then val.setUuid(value)
+      when TYPE_INT8, TYPE_INT16, TYPE_INT32 then val.setInt(value)
+      when TYPE_INT64 then val.setInt64(value)
+      when TYPE_MAP
+      when TYPE_OBJECT
+      when TYPE_LIST
+      when TYPE_ARRAY
       end
+    end
+  end
 
-      def sess_event_recv(context, message)
-        @impl.handleRcvMessage(message)
-        do_events
-      end
+  ##==============================================================================
+  ## SCHEMA
+  ##==============================================================================
+
+  class SchemaArgument
+    attr_reader :impl
+    def initialize(name, typecode, kwargs={})
+      @impl = Qmfengine::SchemaArgument.new(name, typecode)
+      @impl.setDirection(kwargs[:dir]) if kwargs.include?(:dir)
+      @impl.setUnit(kwargs[:unit])     if kwargs.include?(:unit)
+      @impl.setDesc(kwargs[:desc])     if kwargs.include?(:desc)
     end
+  end
 
-    class SchemaArgument
-      attr_reader :impl
-      def initialize(name, typecode, kwargs={})
-        @impl = Qmfengine::SchemaArgument.new(name, typecode)
-        @impl.setDirection(kwargs[:dir]) if kwargs.include?(:dir)
-        @impl.setUnit(kwargs[:unit])     if kwargs.include?(:unit)
-        @impl.setDesc(kwargs[:desc])     if kwargs.include?(:desc)
-      end
+  class SchemaMethod
+    attr_reader :impl
+    def initialize(name, kwargs={})
+      @impl = Qmfengine::SchemaMethod.new(name)
+      @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc)
+      @arguments = []
     end
 
-    class SchemaMethod
-      attr_reader :impl
-      def initialize(name, kwargs={})
-        @impl = Qmfengine::SchemaMethod.new(name)
-        @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc)
-        @arguments = []
-      end
+    def add_argument(arg)
+      @arguments << arg
+      @impl.addArgument(arg.impl)
+    end
+  end
 
-      def add_argument(arg)
-        @arguments << arg
-        @impl.addArgument(arg.impl)
-      end
+  class SchemaProperty
+    attr_reader :impl
+    def initialize(name, typecode, kwargs={})
+      @impl = Qmfengine::SchemaProperty.new(name, typecode)
+      @impl.setAccess(kwargs[:access])     if kwargs.include?(:access)
+      @impl.setIndex(kwargs[:index])       if kwargs.include?(:index)
+      @impl.setOptional(kwargs[:optional]) if kwargs.include?(:optional)
+      @impl.setUnit(kwargs[:unit])         if kwargs.include?(:unit)
+      @impl.setDesc(kwargs[:desc])         if kwargs.include?(:desc)
     end
 
-    class SchemaProperty
-      attr_reader :impl
-      def initialize(name, typecode, kwargs={})
-        @impl = Qmfengine::SchemaProperty.new(name, typecode)
-        @impl.setAccess(kwargs[:access])     if kwargs.include?(:access)
-        @impl.setIndex(kwargs[:index])       if kwargs.include?(:index)
-        @impl.setOptional(kwargs[:optional]) if kwargs.include?(:optional)
-        @impl.setUnit(kwargs[:unit])         if kwargs.include?(:unit)
-        @impl.setDesc(kwargs[:desc])         if kwargs.include?(:desc)
-      end
+    def name
+      @impl.getName
+    end
+  end
 
-      def name
-        @impl.getName
-      end
+  class SchemaStatistic
+    attr_reader :impl
+    def initialize(name, typecode, kwargs={})
+      @impl = Qmfengine::SchemaStatistic.new(name, typecode)
+      @impl.setUnit(kwargs[:unit]) if kwargs.include?(:unit)
+      @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc)
     end
+  end
 
-    class SchemaStatistic
-      attr_reader :impl
-      def initialize(name, typecode, kwargs={})
-        @impl = Qmfengine::SchemaStatistic.new(name, typecode)
-        @impl.setUnit(kwargs[:unit]) if kwargs.include?(:unit)
-        @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc)
-      end
+  class SchemaObjectClass
+    attr_reader :impl
+    def initialize(package, name, kwargs={})
+      @impl = Qmfengine::SchemaObjectClass.new(package, name)
+      @properties = []
+      @statistics = []
+      @methods = []
+    end
+
+    def add_property(prop)
+      @properties << prop
+      @impl.addProperty(prop.impl)
+    end
+
+    def add_statistic(stat)
+      @statistics << stat
+      @impl.addStatistic(stat.impl)
+    end
+
+    def add_method(meth)
+      @methods << meth
+      @impl.addMethod(meth.impl)
+    end
+
+    def name
+      @impl.getName
     end
 
-    class SchemaObjectClass
-      attr_reader :impl
-      def initialize(package, name, kwargs={})
-        @impl = Qmfengine::SchemaObjectClass.new(package, name)
+    def properties
+      unless @properties
         @properties = []
-        @statistics = []
-        @methods = []
+        @impl.getPropertyCount.times do |i|
+          @properties << @impl.getProperty(i)
+        end
       end
+      return @properties
+    end
+  end
 
-      def add_property(prop)
-        @properties << prop
-        @impl.addProperty(prop.impl)
-      end
+  class SchemaEventClass
+    attr_reader :impl
+    def initialize(package, name, kwargs={})
+      @impl = Qmfengine::SchemaEventClass.new(package, name)
+      @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc)
+      @arguments = []
+    end
 
-      def add_statistic(stat)
-        @statistics << stat
-        @impl.addStatistic(stat.impl)
-      end
+    def add_argument(arg)
+      @arguments << arg
+      @impl.addArgument(arg.impl)
+    end
+  end
 
-      def add_method(meth)
-        @methods << meth
-        @impl.addMethod(meth.impl)
-      end
+  ##==============================================================================
+  ## CONSOLE
+  ##==============================================================================
 
-      def name
-        @impl.getName
-      end
+  ##==============================================================================
+  ## AGENT
+  ##==============================================================================
 
-      def properties
-        unless @properties
-          @properties = []
-          @impl.getPropertyCount.times do |i|
-            @properties << @impl.getProperty(i)
-          end
-        end
-        return @properties
+  class AgentHandler
+    def get_query(context, query, userId); end
+    def method_call(context, name, object_id, args, userId); end
+  end
+
+  class Agent < ConnectionHandler
+    def initialize(handler, label="")
+      if label == ""
+        @agentLabel = "rb-%s.%d" % [Socket.gethostname, Process::pid]
+      else
+        @agentLabel = label
       end
+      @conn = nil
+      @handler = handler
+      @impl = Qmfengine::AgentEngine.new(@agentLabel)
+      @event = Qmfengine::AgentEvent.new
+      @xmtMessage = Qmfengine::Message.new
     end
 
-    class SchemaEventClass
-      attr_reader :impl
-      def initialize(package, name, kwargs={})
-        @impl = Qmfengine::SchemaEventClass.new(package, name)
-        @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc)
-        @arguments = []
-      end
+    def set_connection(conn)
+      @conn = conn
+      @conn.add_conn_handler(self)
+    end
 
-      def add_argument(arg)
-        @arguments << arg
-        @impl.addArgument(arg.impl)
-      end
+    def register_class(cls)
+      @impl.registerClass(cls.impl)
     end
 
-    class QmfObject
-      attr_reader :impl, :object_class
-      def initialize(cls)
-        @object_class = cls
-        @impl = Qmfengine::Object.new(@object_class.impl)
-      end
+    def alloc_object_id(low = 0, high = 0)
+      ObjectId.new(@impl.allocObjectId(low, high))
+    end
 
-      def destroy
-        @impl.destroy
-      end
+    def query_response(context, object)
+      @impl.queryResponse(context, object.impl)
+    end
 
-      def object_id
-        return ObjectId.new(@impl.getObjectId)
-      end
+    def query_complete(context)
+      @impl.queryComplete(context)
+    end
 
-      def set_object_id(oid)
-        @impl.setObjectId(oid.impl)
-      end
+    def method_response(context, status, text, arguments)
+      @impl.methodResponse(context, status, text, arguments.map)
+    end
 
-      def get_attr(name)
-        val = value(name)
-        case val.getType
-        when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.asUint
-        when TYPE_UINT64 then val.asUint64
-        when TYPE_SSTR, TYPE_LSTR then val.asString
-        when TYPE_ABSTIME then val.asInt64
-        when TYPE_DELTATIME then val.asUint64
-        when TYPE_REF then val.asObjectId
-        when TYPE_BOOL then val.asBool
-        when TYPE_FLOAT then val.asFloat
-        when TYPE_DOUBLE then val.asDouble
-        when TYPE_UUID then val.asUuid
-        when TYPE_INT8, TYPE_INT16, TYPE_INT32 then val.asInt
-        when TYPE_INT64 then val.asInt64
-        when TYPE_MAP
-        when TYPE_OBJECT
-        when TYPE_LIST
-        when TYPE_ARRAY
+    def do_agent_events()
+      count = 0
+      valid = @impl.getEvent(@event)
+      while valid
+        count += 1
+        case @event.kind
+        when Qmfengine::AgentEvent::GET_QUERY
+          @handler.get_query(@event.sequence, Query.new(@event.query), @event.authUserId)
+        when Qmfengine::AgentEvent::START_SYNC
+        when Qmfengine::AgentEvent::END_SYNC
+        when Qmfengine::AgentEvent::METHOD_CALL
+          args = Arguments.new(@event.arguments)
+          @handler.method_call(@event.sequence, @event.name, ObjectId.new(@event.objectId),
+                               args, @event.authUserId)
+        when Qmfengine::AgentEvent::DECLARE_QUEUE
+          @conn.impl.declareQueue(@session.handle, @event.name)
+        when Qmfengine::AgentEvent::DELETE_QUEUE
+          @conn.impl.deleteQueue(@session.handle, @event.name)
+        when Qmfengine::AgentEvent::BIND
+          @conn.impl.bind(@session.handle, @event.exchange, @event.name, @event.bindingKey)
+        when Qmfengine::AgentEvent::UNBIND
+          @conn.impl.unbind(@session.handle, @event.exchange, @event.name, @event.bindingKey)
+        when Qmfengine::AgentEvent::SETUP_COMPLETE
+          @impl.startProtocol()
         end
+        @impl.popEvent
+        valid = @impl.getEvent(@event)
       end
+      return count
+    end
 
-      def set_attr(name, v)
-        val = value(name)
-        case val.getType
-        when TYPE_UINT8, TYPE_UINT16, TYPE_UINT32 then val.setUint(v)
-        when TYPE_UINT64 then val.setUint64(v)
-        when TYPE_SSTR, TYPE_LSTR then v ? val.setString(v) : val.setString('')
-        when TYPE_ABSTIME then val.setInt64(v)
-        when TYPE_DELTATIME then val.setUint64(v)
-        when TYPE_REF then val.setObjectId(v.impl)
-        when TYPE_BOOL then v ? val.setBool(v) : val.setBool(0)
-        when TYPE_FLOAT then val.setFloat(v)
-        when TYPE_DOUBLE then val.setDouble(v)
-        when TYPE_UUID then val.setUuid(v)
-        when TYPE_INT8, TYPE_INT16, TYPE_INT32 then val.setInt(v)
-        when TYPE_INT64 then val.setInt64(v)
-        when TYPE_MAP
-        when TYPE_OBJECT
-        when TYPE_LIST
-        when TYPE_ARRAY
-        end
+    def do_agent_messages()
+      count = 0
+      valid = @impl.getXmtMessage(@xmtMessage)
+      while valid
+        count += 1
+        @conn.impl.sendMessage(@session.handle, @xmtMessage)
+        @impl.popXmt
+        valid = @impl.getXmtMessage(@xmtMessage)
       end
+      return count
+    end
 
-      def [](name)
-          get_attr(name)
-      end
+    def do_events()
+      begin
+        ecnt = do_agent_events
+        mcnt = do_agent_messages
+      end until ecnt == 0 and mcnt == 0
+    end
 
-      def []=(name, value)
-          set_attr(name, value)
-      end
+    def conn_event_connected()
+      puts "Agent Connection Established..."
+      @session = Session.new(@conn, "qmfa-%s.%d" % [Socket.gethostname, Process::pid], self)
+      @impl.newSession
+      do_events
+    end
 
-      def inc_attr(name, by=1)
-        set_attr(name, get_attr(name) + by)
-      end
+    def conn_event_disconnected(error)
+      puts "Agent Connection Lost"
+    end
 
-      def dec_attr(name, by=1)
-        set_attr(name, get_attr(name) - by)
-      end
+    def sess_event_session_closed(context, error)
+      puts "Agent Session Lost"
+    end
 
-      private
-      def value(name)
-          val = @impl.getValue(name.to_s)
-          if val.nil?
-              raise ArgumentError, "Attribute '#{name}' not defined for class #{@object_class.impl.getName}"
-          end
-          return val
-      end
+    def sess_event_recv(context, message)
+      @impl.handleRcvMessage(message)
+      do_events
     end
+  end
 
 end



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org