Пример #1
0
        public static void Main(string[] args)
        {
            parseCommandLine(args);

            try
            {
                initializeMama();
                buildDataDictionary();

                /* Subscribe to the symbol list */
                MamaSubscription symbolListSubscription = new MamaSubscription();
                symbolListSubscription.setSubscriptionType(mamaSubscriptionType.MAMA_SUBSC_TYPE_SYMBOL_LIST);
                symbolListSubscription.create(myDefaultQueue,
                                              symbolListSubscriptionCallback,
                                              mySource,
                                              "Symbol List",
                                              null);

                Console.WriteLine("Type CTRL-C to exit.");
                Mama.start(myBridge);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
                Environment.Exit(1);
            }
        }
Пример #2
0
        private void createSubscriptions()
        {
            mamaSource = new MamaSource();
            mamaSource.symbolNamespace = mamaSourceName;
            mamaSource.transport       = mamaTransport;

            for (int i = 0; i < mamaNumSymbols; i++)
            {
                mamaSubscriptions[i] = new MamaSubscription();

                mamaSubscriptions[i].setServiceLevel(mamaServiceLevel.MAMA_SERVICE_LEVEL_REAL_TIME);

                mamaSubscriptions[i].setSubscriptionType(mamaSubscriptionType.MAMA_SUBSC_TYPE_NORMAL);

                mamaSubscriptions[i].setTimeout(10);

                mamaSubscriptions[i].setRetries(3);

                mamaSubscriptions[i].setRequiresInitial(true);

                mamaSubscriptions[i].create(
                    mamaQueueGroup == null ? mamaDefaultQueue : mamaQueueGroup.getNextQueue(),
                    this,
                    mamaSource,
                    mamaSymbols[i]);
            }
        }
Пример #3
0
            public void onMsg(MamaSubscription subscription, MamaMsg msg)
            {
                MamaMsgIterator iterator = new MamaMsgIterator(mDictionary);

                // Set the iterator to the beginning of the message
                msg.begin(ref iterator);

                Console.WriteLine("\n+------------------------+--------+--------------+-------------------");
                Console.WriteLine("| FIELD NAME             | FID    | TYPE         | VALUE (AS STRING) ");
                Console.WriteLine("+------------------------+--------+--------------+-------------------");

                // Keep going until there are no more fields
                MamaMsgField field = iterator.getField();

                while (field != null)
                {
                    string fieldType          = field.getTypeName();
                    string fieldName          = field.getName();
                    int    fid                = field.getFid();
                    string fieldValueAsString = field.getAsString();

                    Console.WriteLine("| {0,-22} | {1,-6} | {2,-12} | {3}",
                                      fieldName,
                                      fid,
                                      fieldType,
                                      fieldValueAsString);


                    iterator++;

                    // Get the next field
                    field = iterator.getField();
                }
            }
Пример #4
0
        private static MamaDictionary buildDataDictionary()
        {
            bool[] gotDict = new bool[] { false };
            MamaDictionaryCallback dictionaryCallback = new DictionaryCallback(gotDict);

            lock (dictionaryCallback)
            {
                MamaSubscription subscription = new MamaSubscription();

                MamaDictionary dictionary = new MamaDictionary();
                dictionary.create(
                    myDefaultQueue,
                    dictionaryCallback,
                    myDictSource,
                    3,
                    10);

                Mama.start(myBridge);
                if (!gotDict[0])
                {
                    if (!Monitor.TryEnter(dictionaryCallback, 30000))
                    {
                        Console.Error.WriteLine("Timed out waiting for dictionary.");
                        Environment.Exit(0);
                    }
                    Monitor.Exit(dictionaryCallback);
                }
                return(dictionary);
            }
        }
Пример #5
0
        private static MamaDictionary buildDataDictionary(
			MamaTransport transport,
			MamaQueue defaultQueue,
			MamaSource dictionarySource)
        {
            bool[] gotDict = new bool[] { false };
            MamaDictionaryCallback dictionaryCallback = new DictionaryCallback(gotDict);
            lock (dictionaryCallback)
            {
                MamaSubscription subscription = new MamaSubscription ();

                MamaDictionary dictionary = new MamaDictionary();
                dictionary.create(
                    defaultQueue,
                    dictionaryCallback,
                    dictionarySource,
                    3,
                    10);

                Mama.start(myBridge);
                if (!gotDict[0])
                {
                    if (!Monitor.TryEnter(dictionaryCallback, 30000))
                    {
                        Console.Error.WriteLine("Timed out waiting for dictionary.");
                        Environment.Exit(0);
                    }
                    Monitor.Exit(dictionaryCallback);
                }
                return dictionary;
            }
        }
Пример #6
0
 public void onMsg(MamaSubscription subscription, MamaMsg msg)
 {
     if (quietness < 1)
     {
         Console.WriteLine("Recieved message of type " + msg.stringForType(msg.getType()) + " for " + subscription.subscSymbol);
     }
 }
Пример #7
0
 public void onCreate(MamaSubscription subscription)
 {
     if (quietness < 1)
     {
         Console.WriteLine("Created symbol list subscription.\n");
     }
 }
Пример #8
0
        public void onTimer(MamaTimer mamaTimer, object closure)
        {
            mamaTimer.destroy();

            // Only continue if the application is not shutting down
            bool shuttingDown = m_killEvent.WaitOne(0, false);

            if (!shuttingDown)
            {
                int i = (int)closure;

                mamaSubscriptions[i].destroy();

                mamaSubscriptions[i] = new MamaSubscription();

                mamaSubscriptions[i].setServiceLevel(mamaServiceLevel.MAMA_SERVICE_LEVEL_REAL_TIME);

                mamaSubscriptions[i].setSubscriptionType(mamaSubscriptionType.MAMA_SUBSC_TYPE_NORMAL);

                mamaSubscriptions[i].setTimeout(10);

                mamaSubscriptions[i].setRetries(3);

                mamaSubscriptions[i].setRequiresInitial(true);

                mamaSubscriptions[i].create(
                    mamaQueueGroup == null ? mamaDefaultQueue : mamaQueueGroup.getNextQueue(),
                    this,
                    mamaSource,
                    mamaSymbols[i]);
                stats.mRecreates++;
            }
        }
Пример #9
0
        private static void subscribeToSubjects()
        {
            int howMany = 0;

            queueGroup = new MamaQueueGroup(myBridge, numThreads);

            /* Subscribe to all symbols parsed from the symbol list */
            for (IEnumerator enumerator = subjectList.GetEnumerator(); enumerator.MoveNext();)
            {
                string symbol = (string)enumerator.Current;

                MamaSubscription subscription = new MamaSubscription();

                subscription.create(
                    queueGroup.getNextQueue(),
                    subscriptionCallback,
                    mySource,
                    symbol,
                    null);

                subscriptions.Add(subscription);
                if (++howMany % 1000 == 0)
                {
                    Console.WriteLine("Subscribed to " + howMany + " symbols.");
                }
            }
        }
Пример #10
0
 /*Invoked if any errors are encountered during subscription processing*/
 public void onError(MamaSubscription subscription,
                     MamaStatus.mamaStatus status,
                     string subject)
 {
     Console.WriteLine("Symbol=[" + subscription.subscSymbol + "] : " +
                       "An error occurred creating subscription: " +
                       MamaStatus.stringForStatus(status));
 }
Пример #11
0
            public void onCreate(MamaSubscription subscription)
            {
                // Increment the number of subscriptions
                int totalSubscriptions = Interlocked.Increment(ref m_numberSubscriptions);

                // Log a message if we've got them all
                if (totalSubscriptions == m_totalSubscriptions)
                {
                    Console.WriteLine("All Subscriptions created.");
                }
            }
Пример #12
0
        /// <summary>
        /// This function will create subscriptions for all the symbols in the array list.
        /// </summary>
        private void createSubscriptions()
        {
            // There must be at least 1 symbol
            if (m_symbols.Count < 1)
            {
                throw new ApplicationException("There are no symbols to subscribe to.");
            }

            ListenerSubscriptionCallback subscriptionCallback = new ListenerSubscriptionCallback(m_dictionary, m_iterator, m_quietness, m_symbols.Count);

            // Enumerate all the symbol names and create a subscription for each one
            foreach (string symbol in m_symbols)
            {
                MamaSubscription subscription = new MamaSubscription();

                // Set the service level depending on whether we need a snapshot subscription or not
                if (m_snapshot)
                {
                    subscription.setServiceLevel(mamaServiceLevel.MAMA_SERVICE_LEVEL_SNAPSHOT);
                }

                else
                {
                    subscription.setServiceLevel(mamaServiceLevel.MAMA_SERVICE_LEVEL_REAL_TIME);
                }

                // Complete the remaining properties
                subscription.setSubscriptionType(mamaSubscriptionType.MAMA_SUBSC_TYPE_NORMAL);
                subscription.setTimeout(10);
                subscription.setRetries(3);
                subscription.setRequiresInitial(true);

                /* Determine the queue to use, if there are multiple threads running then the next queue in the
                 * group will be acquired.
                 */
                MamaQueue queue = m_defaultQueue;
                if (m_queueGroup != null)
                {
                    queue = m_queueGroup.getNextQueue();
                }

                subscription.create(queue, subscriptionCallback, m_source, symbol);

                // Add the subscription to the array list so that they can all be destroyed later on
                m_subscriptions.Add(subscription);
            }
        }
Пример #13
0
        public void onMsg(MamaSubscription subscription,
                          MamaMsg msg)
        {
            if (msg.getType() == mamaMsgType.MAMA_MSG_TYPE_INITIAL)
            {
                stats.mInitialMsgCount++;
            }
            else
            {
                stats.mOtherMsgCount++;
            }

            if (mamaLogLevel > MamaLogLevel.MAMA_LOG_LEVEL_NORMAL)
            {
                Console.WriteLine("msg.getSymbol msg.getStatus");
            }
        }
Пример #14
0
            public void onMsg(MamaSubscription subscription, MamaMsg msg)
            {
                // Create a field callback class to display the field contents
                ListenerFieldCallback fieldCallback = new ListenerFieldCallback(m_dictionary, m_iterator, m_quietness);

                if (m_quietness < 2)
                {
                    Console.WriteLine(subscription.subscSource + "." +
                                      subscription.subscSymbol + " TYPE: " +
                                      msg.getType() + " Status: " +
                                      msg.getStatus());
                }

                if (m_quietness < 1)
                {
                    if (m_iterator)
                    {
                        // Set the iterator to the beginning of the message
                        msg.begin(ref m_messageIterator);

                        // Keep going until there are no more fields
                        MamaMsgField field = m_messageIterator.getField();
                        while (field != null)
                        {
                            // Display the field
                            fieldCallback.displayField(field, 0);

                            m_messageIterator++;

                            // Get the next field
                            field = m_messageIterator.getField();
                        }
                    }

                    else
                    {
                        // Otherwise use the iteration function on the message itself
                        int indentlevel = 0;
                        msg.iterateFields(fieldCallback, m_dictionary, indentlevel);
                    }
                }
            }
Пример #15
0
            public void onMsg(MamaSubscription subscription, MamaMsg msg)
            {
                switch (msg.getType())
                {
                case mamaMsgType.MAMA_MSG_TYPE_INITIAL:
                    char[]   delimiter     = { ',' };
                    string   newSymbols    = msg.getString(MamaReservedFields.SymbolList.getName(), (ushort)MamaReservedFields.SymbolList.getFid());
                    string[] parsedSymbols = newSymbols.Split(delimiter);
                    for (int i = 0; i < parsedSymbols.Length; i++)
                    {
                        subjectList.Add((Object)parsedSymbols[i]);
                    }
                    Console.WriteLine("Received initial for symbol list subscription.  Updating list of symbols to subscribe to.\n");
                    break;

                case mamaMsgType.MAMA_MSG_TYPE_END_OF_INITIALS:
                    Console.WriteLine("End of initials.  Subscribing to symbols.\n");
                    subscribeToSubjects();
                    break;

                default:
                    break;
                }
            }
Пример #16
0
 public void onError(MamaSubscription subscription,
                     MamaStatus.mamaStatus status,
                     string subject)
 {
     Console.WriteLine("Subscription error:" + subject);
 }
Пример #17
0
 public void onError(MamaSubscription subscription, MamaStatus.mamaStatus status, string subject)
 {
     Console.WriteLine("An error occurred creating subscription for " + subject + ": " + status.ToString());
 }
Пример #18
0
 public void onQuality(MamaSubscription subscription, mamaQuality quality, string symbol)
 {
     // You may add your own event handling logic here
 }
Пример #19
0
 /*Invoked once the subscrption request has been dispatched from the
  * throttle queue.*/
 public void onCreate(MamaSubscription subscription)
 {
 }
Пример #20
0
 public void onGap(MamaSubscription subscription)
 {
     // You may add your own event handling logic here
 }
Пример #21
0
 public void onRecapRequest(MamaSubscription subscription)
 {
     // You may add your own event handling logic here
 }
Пример #22
0
        /// <summary>
        /// Subscription callbacks
        /// </summary>
        /// <param name="args"></param>
        ////////////////////////////////////////////////////////////////////////////////////

        public void onCreate(MamaSubscription subscription)
        {
            stats.mCreateMsgCount++;
        }
Пример #23
0
 public void onError(MamaSubscription subscription,
                     MamaStatus.mamaStatus status,
                     string subject)
 {
     stats.mErrorCount++;
 }
Пример #24
0
 public void onRecapRequest(MamaSubscription subscription)
 {
     Console.WriteLine(subscription.subscSymbol + ": recap requested ");
 }
Пример #25
0
 /*Invoked if the quality status for the subscription changes*/
 public void onQuality(MamaSubscription subscription, mamaQuality quality, string symbol)
 {
     Console.WriteLine("Symbol list subscription: quality is now " +
                       (int)quality);
 }
Пример #26
0
 public void onGap(MamaSubscription subscription)
 {
     Console.WriteLine(subscription.subscSymbol + ": gap detected ");
 }
Пример #27
0
 public void onGap(MamaSubscription subscription)
 {
     Console.WriteLine("Subscription gap");
 }
Пример #28
0
 public void onDestroy(MamaSubscription subscription)
 {
 }
Пример #29
0
 public void onQuality(MamaSubscription subscription, mamaQuality quality, string symbol)
 {
     Console.WriteLine("Subscription quality:" + (int)quality);
 }
Пример #30
0
 public void onRecapRequest(MamaSubscription subscription)
 {
     Console.WriteLine("Subscription recap request");
 }
Пример #31
0
        static void Main(string[] args)
        {
            // Parse the command line options to override defaults
            String middlewareName     = "qpid";
            String transportName      = "sub";
            String sourceName         = "OM";
            String symbolName         = null;
            String dictionaryFile     = "/opt/openmama/data/dictionaries/data.dict";
            bool   requiresDictionary = true;
            bool   requiresInitial    = true;

            if (args.Length == 0)
            {
                usageAndExit();
            }

            for (int i = 0; i < args.Length; i++)
            {
                switch (args[i])
                {
                case "-B":
                    requiresDictionary = false;
                    break;

                case "-d":
                    dictionaryFile = args[++i];
                    break;

                case "-I":
                    requiresInitial = false;
                    break;

                case "-m":
                    middlewareName = args[++i];
                    break;

                case "-s":
                    symbolName = args[++i];
                    break;

                case "-S":
                    sourceName = args[++i];
                    break;

                case "-t":
                    transportName = args[++i];
                    break;

                case "-v":
                    Mama.enableLogging(MamaLogLevel.MAMA_LOG_LEVEL_FINEST);
                    break;

                default:
                    usageAndExit();
                    break;
                }
            }

            // Symbol name is mandatory here, so error if it's null
            if (symbolName == null)
            {
                usageAndExit();
            }

            // Load the requested OpenMAMA middleware bridge (and default payload too)
            MamaBridge bridge = Mama.loadBridge(middlewareName);

            // Time to initialize OpenMAMA's underlying bridges with an "open"
            Mama.open();

            // Get default event queue from the bridge for testing
            MamaQueue queue = Mama.getDefaultEventQueue(bridge);

            // Set up the required transport on the specified bridge
            MamaTransport transport = new MamaTransport();

            transport.create(transportName, bridge);

            // Set up the data dictionary
            MamaDictionary dictionary = null;

            if (requiresDictionary)
            {
                dictionary = new MamaDictionary();
                dictionary.create(dictionaryFile);
            }

            // Set up the OpenMAMA source (symbol namespace)
            MamaSource source = new MamaSource();

            source.symbolNamespace = sourceName;
            source.transport       = transport;

            // Set up the event handlers for OpenMAMA
            SubscriptionEventHandler eventHandler = new SubscriptionEventHandler();

            eventHandler.mDictionary = dictionary;

            // Set up the OpenMAMA Subscription (interest in a topic)
            MamaSubscription subscription = new MamaSubscription();

            subscription.setRequiresInitial(requiresInitial);
            subscription.create(queue, eventHandler, source, symbolName);

            // Kick off OpenMAMA now (blocking call, non-blocking call also available)
            Mama.start(bridge);

            // Clean up connection on termination
            Mama.close();
        }