Example #1
0
    static void Main(String[] args)
    {
        LBMContext ctx = null; /* Context object: container for UM "instance". */
        LBMSource  src = null; /* Source object: for sending messages. */
        LBM        lbm = new LBM();

        /*** Initialization: create necessary UM objects. ***/
        try
        {
            LBMTopic            topic   = null;
            LBMSourceAttributes srcAttr = null;

            lbm.setLogger(new LBMLogging(logger));

            ctx     = new LBMContext();
            srcAttr = new LBMSourceAttributes();
            srcAttr.setValue("late_join", "1");
            topic = ctx.allocTopic("test.topic", srcAttr);
            src   = ctx.createSource(topic, null, null, null);
        }
        catch (LBMException ex)
        {
            System.Console.Error.Write("Error initializing LBM objects: " + ex.Message);
            System.Environment.Exit(1);
        }

        /* Cleanup */
        src.close();
        ctx.close();
    } /* main */
Example #2
0
        } // TmonReceiver

        public void Init()
        {
            _tmonUmSource = _parentTmonContext.GetTmonUmSource();
            _timeOfDay    = new TmonGetTimeOfDay();

            _messageBuffer.Clear();
            if (_rcvType == ReceiverType.Regular)
            {
                _messageBuffer.Append('R');
            }
            else if (_rcvType == ReceiverType.Wildcard)
            {
                _messageBuffer.Append('W');
            }
            else
            {
                throw new TmonException("invalid rcvType " + (int)_rcvType);
            }
            _messageBuffer.Append(',');
            _messageBuffer.Append(_parentTmonContext.GetMessageHeader());
            _messageBuffer.Append(','); _messageBuffer.Append(_timeOfDay.GetSec());
            _messageBuffer.Append(','); _messageBuffer.Append(_timeOfDay.GetUsec());
            _messageBuffer.Append(','); _messageBuffer.Append(_objectId);
            _messageBuffer.Append(','); _messageBuffer.Append(_topicName);

            _tmonUmSource.send(Encoding.ASCII.GetBytes(_messageBuffer.ToString()), _messageBuffer.Length, 0);
        } // Init
Example #3
0
        public void Init()
        {
            using (LBMContext myContext = new LBMContext())
            {
                LBMTopic myTopic = new LBMTopic(myContext, "Greeting", new LBMSourceAttributes());

                using (LBMSource mySource = new LBMSource(myContext, myTopic))
                {
                    //System.Diagnostics.Debug.WriteLine("call lbmEventQueue.run(-1);");
                    //lbmEventQueue.run(-1);
                    //System.Diagnostics.Debug.WriteLine("call lbmEventQueue.run(-1); done");


                    var index = 1;
                    while (true)
                    {
                        var    msg       = string.Format("Hello {0} !", index);
                        byte[] myMessage = Encoding.UTF8.GetBytes(msg);

                        System.Diagnostics.Debug.WriteLine(msg);
                        mySource.send(myMessage, myMessage.Length, LBM.MSG_FLUSH | LBM.SRC_BLOCK);

                        index++;

                        Thread.Sleep(100);
                    }
                }
            }
        }
    public static void Main(String[] args)
    {
        /* Initialization: create necessary UM objects. */
        LBMContext ctx = new LBMContext();

        /* Create LBMReceiverCallback using the method onReceive defined in this class */
        LBMReceiverCallback rcvCallback = new LBMReceiverCallback(onReceive);

        /* Create receiver objects */
        LBMReceiverAttributes rcv_attr = new LBMReceiverAttributes();
        LBMTopic    rtopic             = new LBMTopic(ctx, "test.topic", rcv_attr);
        LBMReceiver rcv = new LBMReceiver(ctx, rtopic, rcvCallback, null, null);

        /* Initialize and create source */
        LBMTopic  stopic = new LBMTopic(ctx, "test.topic", new LBMSourceAttributes());
        LBMSource src    = new LBMSource(ctx, stopic);

        String msgData = "request";

        byte[] bytes = new byte[msgData.Length * sizeof(char)];
        System.Buffer.BlockCopy(msgData.ToCharArray(), 0, bytes, 0, bytes.Length);

        LBMRequest          req = new LBMRequest(bytes, bytes.Length);
        LBMResponseCallback myResponseCallback = new LBMResponseCallback(onResponse);

        req.addResponseCallback(myResponseCallback);

        /* Sleep for 1 second to allow TR to complete */
        try
        {
            System.Threading.Thread.Sleep(1000);
        }
        catch (Exception ex)
        {
            System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
            System.Environment.Exit(1);
        }

        /* Send a message. */
        src.send(req, LBM.MSG_FLUSH | LBM.SRC_BLOCK);

        while (run == 1)
        {
            try
            {
                System.Threading.Thread.Sleep(1000);
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
                System.Environment.Exit(1);
            }
        }

        /* Cleanup: delete UM objects. */
        req.close();
        src.close();
        rcv.close();
        ctx.close();
    }  /* main */
Example #5
0
        } // UmCtxCreate

        private void UmSrcCreate()
        {
            LBMSourceAttributes srcAttr = new LBMSourceAttributes("29west_tmon_context", _topicName);

            // Configure the tmon source.
            if (_cfgFile != null)
            {
                SourceAttrSetoptFromFile(srcAttr, _cfgFile);
            }

            // Any options supplied in transport_opts override
            // Step through transport options to find source opts
            foreach (var opt in _transportOpts)
            {
                string[] keyVal = opt.Split('=');
                if (keyVal.Length != 2)
                {
                    throw new TmonException("invalid transport option '" + opt + "' in '" + _transportOptsStr + "'");
                }
                string[] scopeOpt = keyVal[0].Split('|');
                if (scopeOpt.Length == 2 &&
                    scopeOpt[0].Equals("source", StringComparison.OrdinalIgnoreCase))
                {
                    srcAttr.setValue(scopeOpt[1], keyVal[1]);
                }
            } // foreach

            LBMTopic topic = _tmonUmContext.allocTopic(_topicName, srcAttr);

            _tmonUmSource = _tmonUmContext.createSource(topic, null, null, null);
        } // UmSrcCreate
Example #6
0
        static void Main(string[] args)
        {
            LBMContext ctx = nil;  /* Context object: container for UM "instance". */
              LBMSource src = nil;   /* Source object: for sending messages. */

              /*** Initialization: create necessary UM objects. ***/

              ctx = new LBMContext();

              {
            LBMTopic topic = nil;
            topic = new LBMTopic(ctx, "Greeting");
            src = new LBMSource(ctx, topic);
              }

              System.Threading.Thread.Sleep(3000);

              /*** Send a message. ***/

              src.send(Encoding.ASCII.GetBytes("Hello!"), 7, LBM.MSG_FLUSH | LBM.SRC_BLOCK);

              /*** Cleanup: delete UM objects. ***/

              System.Threading.Thread.Sleep(2000);

              src.close();
              ctx.close();
        }
Example #7
0
        static void Main(string[] args)
        {
            LBMContext ctx = null;  /* Context object: container for UM "instance". */
            LBMSource  src = null;  /* Source object: for sending messages. */


            /*** Initialization: create necessary UM objects. ***/

            ctx = new LBMContext();

            {
                LBMTopic topic = null;
                topic = new LBMTopic(ctx, "Greeting");
                src   = new LBMSource(ctx, topic);
            }

            System.Threading.Thread.Sleep(3000);


            /*** Send a message. ***/

            src.send(Encoding.ASCII.GetBytes("Hello!"), 7, LBM.MSG_FLUSH | LBM.SRC_BLOCK);


            /*** Cleanup: delete UM objects. ***/

            System.Threading.Thread.Sleep(2000);

            src.close();
            ctx.close();
        } /* Main */
Example #8
0
    public static void main(String[] args)
    {
        /* Initialization: create necessary UM objects. */
        LBMContext ctx = new LBMContext();

        /* Create LBMReceiverCallback using the method onReceive defined in this class */
        LBMReceiverCallback rcvCallback = new LBMReceiverCallback(onReceive);

        /* Create receiver objects */
        LBMReceiverAttributes rcv_attr = new LBMReceiverAttributes();
        LBMTopic rtopic = new LBMTopic(ctx, "test.topic", rcv_attr);
        LBMReceiver rcv = new LBMReceiver(ctx, rtopic, rcvCallback, null, null);

        /* Initialize and create source */
        LBMTopic stopic = new LBMTopic(ctx, "test.topic", new LBMSourceAttributes());
        LBMSource src = new LBMSource(ctx, stopic);

        String msgData = "request";
        byte[] bytes = new byte[msgData.Length * sizeof(char)];
        System.Buffer.BlockCopy(msgData.ToCharArray(), 0, bytes, 0, bytes.Length);

        LBMRequest req = new LBMRequest(bytes, bytes.Length);
        LBMResponseCallback myResponseCallback = new LBMResponseCallback(onResponse);
        req.addResponseCallback(myResponseCallback);

        /* Sleep for 1 second to allow TR to complete */
        try
        {
            System.Threading.Thread.Sleep(1000);
        }
        catch (Exception ex)
        {
            System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
            System.Environment.Exit(1);
        }

        /* Send a message. */
        src.send(req, LBM.MSG_FLUSH | LBM.SRC_BLOCK);

        while (run == 1)
        {
            try
            {
                System.Threading.Thread.Sleep(1000);
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
                System.Environment.Exit(1);
            }
        }

        /* Cleanup: delete UM objects. */
        req.close();
        src.close();
        rcv.close();
        ctx.close();
    }
Example #9
0
        static void Main(string[] args)
        {
            LBMContext    ctx = null; /* Context object: container for UM "instance". */
            LBMSource     src = null; /* Source object: for sending messages. */
            LBMEventQueue evq = null; /* Event Queue object: process source events on app thread */
            SrcCB         cb  = null;


            /*** Create a source using an event queue ***/
            try
            {
                LBMTopic            topic   = null;
                LBMSourceAttributes srcAttr = null;

                ctx     = new LBMContext();
                srcAttr = new LBMSourceAttributes();

                /* create callback to process events */
                cb = new SrcCB();

                /* define Event Queue. This allows us to process events on an  */
                /* application thread, as opposed to the default behavior,     */
                /* which is to process events on the (internal) context thread.*/
                evq = new LBMEventQueue();

                topic = ctx.allocTopic("test.topic", srcAttr);
                src   = new LBMSource(ctx, topic, evq);
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }


            /* run the event queue for 60 seconds       */
            /* all the source events will be processed  */

            /* in this thread
             * evq.run(60000);
             *
             * try
             * {
             *  src.close();
             *  ctx.close();
             *  evq.close();
             * }
             * catch (LBMException ex)
             * {
             *  System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
             *  System.Environment.Exit(1);
             * }
             *
             * } /* main */
        } /* class eventQ */
Example #10
0
        static void Main(string[] args)
        {
            LBMContext ctx = null; /* Context object: container for UM "instance". */
            LBMSource src = null; /* Source object: for sending messages. */
            LBMEventQueue evq = null; /* Event Queue object: process source events on app thread */
            SrcCB cb = null;


            /*** Create a source using an event queue ***/
            try
            {
                LBMTopic topic = null;
                LBMSourceAttributes srcAttr = null;

                ctx = new LBMContext();
                srcAttr = new LBMSourceAttributes();

                /* create callback to process events */
                cb = new SrcCB();

                /* define Event Queue. This allows us to process events on an  */
                /* application thread, as opposed to the default behavior,     */
                /* which is to process events on the (internal) context thread.*/
                evq = new LBMEventQueue();

                topic = ctx.allocTopic("test.topic", srcAttr);
                src = new LBMSource(ctx, topic, evq);
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }


            /* run the event queue for 60 seconds       */
            /* all the source events will be processed  */
            /* in this thread
            evq.run(60000);

            try
            {
                src.close();
                ctx.close();
                evq.close();
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }

        } /* main */
    } /* class eventQ */
Example #11
0
            public lbmlatpingreceiver(LBMContext lbmctx, LBMTopic lbmtopic, lbmlatping mylatping)
            {
                latping   = mylatping;
                source    = latping.ping_src;
                buffer    = latping.msgbuf;
                bufferptr = latping.msgbufPtr;

                if (source.buffAcquire(out bufferAcquired, (uint)buffer.Length, 0) == 0)
                {
                    bufferAcquiredSize = buffer.Length;
                }
                receiver = new LBMReceiver(lbmctx, lbmtopic, new LBMReceiverCallback(onReceive), null, null);
            }
Example #12
0
    static void Main(String[] args)
    {
        LBMContext          ctx       = null;                               /* Context object: container for UM "instance". */
        LBMReceiver         lateRcv   = null;                               /* Receiver object: for sending messages. */
        LBMReceiverCallback cb        = new LBMReceiverCallback(onReceive); /* Wrapping the onReceive functor in a callback */
        LBMSource           early_src = null;                               /* Source object: for sending messages. */

        ctx = new LBMContext();


        try
        {
            LBMTopic            srcTopic = null;
            LBMSourceAttributes srcAttr  = null;

            srcAttr = new LBMSourceAttributes();

            srcAttr.setValue("late_join", "1");
            srcAttr.setValue("retransmit_retention_size_threshold", "1");

            srcTopic  = ctx.allocTopic("test.topic", srcAttr);
            early_src = new LBMSource(ctx, srcTopic);

            early_src.send(Encoding.ASCII.GetBytes("test"), 4, LBM.MSG_FLUSH | LBM.SRC_NONBLOCK);
        }
        catch (LBMException ex)
        {
            System.Console.Error.WriteLine("Error initializing LBM objects:  " + ex.Message);
            System.Environment.Exit(1);
        }

        {
            LBMTopic topic = null;
            topic = ctx.lookupTopic("test.topic");

            lateRcv = new LBMReceiver(ctx, topic, onReceive, null, null);
        }

        Thread.Sleep(100);

        try {
            early_src.close();
            lateRcv.close();
            ctx.close();
        }
        catch (LBMException ex)
        {
            System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
            System.Environment.Exit(1);
        }
    }
Example #13
0
 public SrcStatsTimer(LBMContext ctx, LBMSource src, long tmo, LBMEventQueue evq, LBMObjectRecyclerBase recycler) : base(ctx, tmo, evq)
 {
     _recycler = recycler;
     _src      = src;
     _tmo      = tmo;
     if (tmo == 0)
     {
         print_stats();
     }
     else
     {
         this.addTimerCallback(new LBMTimerCallback(onExpiration));
     }
 }
Example #14
0
        } // Dispose

        private void Dispose(bool disposing)
        {
            if (_tmonUmSource != null)
            {
                _tmonUmSource.flush();
                _tmonUmSource.close();
                _tmonUmSource = null;
            }
            if (_tmonUmContext != null)
            {
                _tmonUmContext.close();
                _tmonUmContext = null;
            }
        } // Dispose
Example #15
0
    static void Main(String[] args)
    {
        LBMContext ctx = null;      /* Context object: container for UM "instance". */
        LBMReceiver lateRcv = null; /* Receiver object: for sending messages. */
        LBMReceiverCallback cb = new LBMReceiverCallback(onReceive);    /* Wrapping the onReceive functor in a callback */
        LBMSource early_src = null;   /* Source object: for sending messages. */

        ctx = new LBMContext();

        try
        {
            LBMTopic srcTopic = null;
            LBMSourceAttributes srcAttr = null;

            srcAttr = new LBMSourceAttributes();

            srcAttr.setValue("late_join", "1");
            srcAttr.setValue("retransmit_retention_size_threshold", "1");

            srcTopic = ctx.allocTopic("test.topic", srcAttr);
            early_src = new LBMSource(ctx, srcTopic);

            early_src.send(Encoding.ASCII.GetBytes("test"), 4, LBM.MSG_FLUSH | LBM.SRC_NONBLOCK);
        }
        catch (LBMException ex)
        {
            System.Console.Error.WriteLine("Error initializing LBM objects:  " + ex.Message);
            System.Environment.Exit(1);
        }

        {
            LBMTopic topic = null;
            topic = ctx.lookupTopic("test.topic");

            lateRcv = new LBMReceiver(ctx, topic, onReceive, null, null);
        }

        Thread.Sleep(100);

        try {
            early_src.close();
            lateRcv.close();
            ctx.close();
        }
        catch(LBMException ex)
        {
            System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
            System.Environment.Exit(1);
        }
    }
Example #16
0
        } // TmonSource

        public void Init()
        {
            _tmonUmSource = _parentTmonContext.GetTmonUmSource();
            _timeOfDay    = new TmonGetTimeOfDay();

            _messageBuffer.Clear();
            _messageBuffer.Append('S'); _messageBuffer.Append(',');
            _messageBuffer.Append(_parentTmonContext.GetMessageHeader());
            _messageBuffer.Append(','); _messageBuffer.Append(_timeOfDay.GetSec());
            _messageBuffer.Append(','); _messageBuffer.Append(_timeOfDay.GetUsec());
            _messageBuffer.Append(','); _messageBuffer.Append(_objectId);
            _messageBuffer.Append(','); _messageBuffer.Append(_topicName);

            _tmonUmSource.send(Encoding.ASCII.GetBytes(_messageBuffer.ToString()), _messageBuffer.Length, 0);
        } // Init
Example #17
0
        public SrcStatsTimer(LBMContext lbmctx, LBMSource src, long milliseconds, LBMEventQueue lbmevq, LBMObjectRecyclerBase recycler)
            : base(lbmctx, milliseconds, lbmevq)
        {
            _recycler     = recycler;
            _src          = src;
            _milliseconds = milliseconds;

            if (milliseconds == 0)
            {
                print_stats();
            }
            else
            {
                this.addTimerCallback(new LBMTimerCallback(onExpiration));
            }
        }
Example #18
0
 public PongLBMReceiver(LBMContext ctx, LBMTopic topic, LBMEventQueue evq, LBMSource src,
                        bool ping, int msecpause, int msgs, bool verbose, bool end_on_eos,
                        bool rtt_collect, int ignore, bool mim)
 {
     _ctx        = ctx;
     _rcv        = new LBMReceiver(ctx, topic, new LBMReceiverCallback(onReceive), null, evq);
     _msgs       = msgs;
     _verbose    = verbose;
     _msecpause  = msecpause;
     _ping       = ping;
     _evq        = evq;
     _end_on_eos = end_on_eos;
     _src        = src;
     if (rtt_collect)
     {
         rtt_data = new double[msgs];
     }
     rtt_ignore = ignore;
     use_mim    = mim;
     use_smx    = src.getAttributeValue("transport").ToLower().Contains("smx");
 }
Example #19
0
        public void Init()
        {
            using (LBMContext myContext = new LBMContext())
            {
                LBMTopic myTopic = new LBMTopic(myContext, "Greeting", new LBMSourceAttributes());
                using (LBMSource mySource = new LBMSource(myContext, myTopic))
                {
                    var index = 1;
                    while (true)
                    {
                        var    msg       = string.Format("Hello {0} !", index);
                        byte[] myMessage = Encoding.UTF8.GetBytes(msg);

                        Console.WriteLine(msg);
                        mySource.send(myMessage, myMessage.Length, LBM.MSG_FLUSH | LBM.SRC_BLOCK);

                        index++;

                        Thread.Sleep(1000);
                    }
                }
            }
        }
Example #20
0
        static void Main(string[] args)
        {
            /*
             * Create a context object.  A context is an environment in which
             * LBM functions.  Each context can have its own attributes and
             * configuration settings, which can be specified in an
             * LBMContextAttributes object.  In this example program, we'll
             * just use the default attributes.
             */
            LBMContext myContext = new LBMContext();

            /*
             * Create a topic object.  A topic object is little more than a
             * string (the topic name).  During operation, LBM keeps some state
             * information in the topic object as well.  The topic is bound to
             * the containing context, and will also be bound to a receiver
             * object.  Topics can also have a set of attributes; these are
             * specified using either an LBMReceiverAttributes object or an
             * LBMSourceAttributes object.  The simplest LBMTopic constructor
             * makes a Receiver topic with the default set of attributes.
             * However, there is a difference between "receiver" topics and
             * "source" topics.  To make a "source topic", we need to use a
             * constructor that lets us pass in an LBMSourceAttributes object.
             * Here, we pass in default attributes by creating a dummy
             * LBMSourceAttributes object.  Note that "Greeting" is the topic
             * string.
             */
            LBMTopic myTopic = new LBMTopic(myContext, "Greeting", new LBMSourceAttributes());

            /*
             * Create the source object and bind it to a topic.  Sources must be
             * associated with a context.
             */
            LBMSource mySource = new LBMSource(myContext, myTopic);

            /*
             * Need to wait for receivers to find us before first send.  There are
             * other ways to accomplish this, but sleep is easy.  See https://communities.informatica.com/infakb/faq/5/Pages/80061.aspx
             * for details.
             */
            System.Threading.Thread.Sleep(3000);

            /*
             * Send a message to the "Greeting" topic.  The flags make sure the
             * call to lbm_src_send doesn't return until the message is sent.
             * LBM expects messages to be byte arrays.  Since C# strings are
             * encoded with Unicode by default, and we'd rather have ASCII
             * for this simple test program, we'll explicitly encode the string
             * using ASCII.
             */
            byte[] myMessage = Encoding.ASCII.GetBytes("Hello!");
            mySource.send(myMessage, myMessage.Length, LBM.MSG_FLUSH | LBM.SRC_BLOCK);

            /*
             * We've sent our one message.  Let's close things down.
             */

            /*
             * For some transport types (mostly UDP-based), a short delay before
             * deleting the source is advisable.  Even though the message is sent,
             * there may have been packet loss, and some transports need a bit of
             * time to request re-transmission.  Also, if the above lbm_src_send call
             * didn't include the flush, some time might also be needed to empty the
             * batching buffer.
             */
            System.Threading.Thread.Sleep(2000);

            /*
             * First, we close the source.
             */
            mySource.close();

            /*
             * Notice that we don't "close" the topic.  LBM keeps track of
             * topics for you.
             */

            /*
             * Now, we close the context itself.  Always close a context that
             * is no longer in use and won't be used again.
             */
            myContext.close();
        } /* Main */
Example #21
0
        static void Main(string[] args)
        {
            if (Environment.GetEnvironmentVariable("LBM_LICENSE_FILENAME") == null &&
                Environment.GetEnvironmentVariable("LBM_LICENSE_INFO") == null)
            {
                SetEnvironmentVariable("LBM_LICENSE_FILENAME", "lbm_license.txt");
            }

            LBM lbm = new LBM();

            lbm.setLogger(logger);

            string target             = null;
            int    send_rate          = 0;              //	Used for lbmtrm | lbtru transports
            int    retrans_rate       = 0;              //
            char   protocol           = '\0';           //
            int    linger             = 5;
            int    msglen             = MIN_ALLOC_MSGLEN;
            int    pause_milliseconds = 5;
            int    delay = 1;
            int    i;
            int    n     = args.Length;
            bool   error = false;
            bool   done  = false;

            for (i = 0; i < n; i++)
            {
                try
                {
                    switch (args[i])
                    {
                    case "-c":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        try
                        {
                            LBM.setConfiguration(args[i]);
                        }
                        catch (LBMException Ex)
                        {
                            Console.Error.WriteLine("lbmreq error: " + Ex.Message);
                            error = true;
                        }
                        break;

                    case "-d":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        delay = Convert.ToInt32(args[i]);
                        break;

                    case "-h":
                        print_help_exit(0);
                        break;

                    case "-i":
                        send_immediate = true;
                        break;

                    case "-q":
                        eventq = true;
                        break;

                    case "-l":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        msglen = Convert.ToInt32(args[i]);
                        break;

                    case "-L":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        linger = Convert.ToInt32(args[i]);
                        break;

                    case "-P":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        pause_milliseconds = Convert.ToInt32(args[i]);
                        break;

                    case "-R":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        requests = Convert.ToInt32(args[i]);
                        break;

                    case "-r":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        ParseRateVars parseRateVars = lbmExampleUtil.parseRate(args[i]);
                        if (parseRateVars.error)
                        {
                            print_help_exit(1);
                        }
                        send_rate    = parseRateVars.rate;
                        retrans_rate = parseRateVars.retrans;
                        protocol     = parseRateVars.protocol;
                        break;

                    case "-s":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        stats_sec = Convert.ToInt32(args[i]);
                        break;

                    case "-T":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        target = args[i];
                        break;

                    case "-v":
                        verbose++;
                        break;

                    default:
                        if (args[i].StartsWith("-"))
                        {
                            error = true;
                        }
                        else
                        {
                            done = true;
                        }
                        break;
                    }
                    if (error || done)
                    {
                        break;
                    }
                }
                catch (Exception e)
                {
                    /* type conversion exception */
                    Console.Error.WriteLine("lbmreq: error\n" + e.Message + "\n");
                    print_help_exit(1);
                }
            }
            if (error || i >= n)
            {
                /* An error occurred processing the command line - print help and exit */
                print_help_exit(1);
            }
            string topic_str = null;

            if (i >= n)
            {
                if (!send_immediate)
                {
                    print_help_exit(1);
                }
            }
            else
            {
                topic_str = args[i];
            }

            byte[] message = null;

            /* if message buffer is too small, then the enc.GetBytes will cause issues.
             *          Therefore, allocate with a MIN_ALLOC_MSGLEN */
            if (msglen < MIN_ALLOC_MSGLEN)
            {
                message = new byte[MIN_ALLOC_MSGLEN];
            }
            else
            {
                message = new byte[msglen];
            }

            LBMSourceAttributes  lbmSourceAttributes  = new LBMSourceAttributes();
            LBMContextAttributes lbmContextAttributes = new LBMContextAttributes();

            /* Check if protocol needs to be set to lbtrm | lbtru */
            if (protocol == 'M')
            {
                try
                {
                    lbmSourceAttributes.setValue("transport", "LBTRM");

                    lbmContextAttributes.setValue("transport_lbtrm_data_rate_limit", send_rate.ToString());
                    lbmContextAttributes.setValue("transport_lbtrm_retransmit_rate_limit", retrans_rate.ToString());
                }
                catch (LBMException ex)
                {
                    Console.Error.WriteLine("Error setting LBTRM rate: " + ex.Message);
                    Environment.Exit(1);
                }
            }
            if (protocol == 'U')
            {
                try
                {
                    lbmSourceAttributes.setValue("transport", "LBTRU");

                    lbmContextAttributes.setValue("transport_lbtru_data_rate_limit", send_rate.ToString());
                    lbmContextAttributes.setValue("transport_lbtru_retransmit_rate_limit", retrans_rate.ToString());
                }
                catch (LBMException ex)
                {
                    Console.Error.WriteLine("Error setting LBTRU rate: " + ex.Message);
                    Environment.Exit(1);
                }
            }

            LBMContext       ctx = new LBMContext(lbmContextAttributes);
            LBMreqEventQueue lbmReqEventQueue = null;

            if (eventq)
            {
                lbmReqEventQueue = new LBMreqEventQueue();
                Console.Error.WriteLine("Event queue in use.");
            }
            else
            {
                Console.Error.WriteLine("No event queue\n");
            }

            LBMTopic  topic;
            LBMSource src            = null;
            LBMreqCB  lbMreqCallBack = new LBMreqCB(verbose);

            if (!send_immediate)
            {
                topic = ctx.allocTopic(topic_str, lbmSourceAttributes);
                src   = ctx.createSource(topic, lbMreqCallBack.onSourceEvent, null, lbmReqEventQueue);
                if (delay > 0)
                {
                    Console.Out.WriteLine("Delaying requests for {0} second{1}...\n",
                                          delay, ((delay > 1) ? "s" : ""));
                    Thread.Sleep(delay * 1000);
                }
            }
            ASCIIEncoding enc = new ASCIIEncoding();

            if (requests > 0)
            {
                Console.Out.WriteLine("Will send {0} request{1}\n", requests, (requests == 1 ? "" : "s"));
            }

            Console.Out.Flush();

            for (int count = 0; count < requests; count++)
            {
                LBMTimer      qTimer;
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("Request data {0}", count);
                enc.GetBytes(sb.ToString(), 0, sb.ToString().Length, message, 0);

                LBMRequest req = new LBMRequest(message, msglen);
                req.addResponseCallback(lbMreqCallBack.onResponse);

                Console.Out.WriteLine("Sending request " + count);

                if (send_immediate)
                {
                    if (target == null)
                    {
                        if (eventq)
                        {
                            ctx.send(topic_str, req, lbmReqEventQueue, 0);
                        }
                        else
                        {
                            ctx.send(topic_str, req, 0);
                        }
                    }
                    else
                    {
                        if (eventq)
                        {
                            ctx.send(target, topic_str, req, lbmReqEventQueue, 0);
                        }
                        else
                        {
                            ctx.send(target, topic_str, req, 0);
                        }
                    }
                }
                else
                {
                    if (eventq)
                    {
                        src.send(req, lbmReqEventQueue, 0);
                    }
                    else
                    {
                        src.send(req, 0);
                    }
                }

                if (verbose > 0)
                {
                    Console.Out.Write("Sent request " + count + ". ");
                }

                if (!eventq)
                {
                    if (verbose > 0)
                    {
                        Console.Out.WriteLine("Pausing " + pause_milliseconds + " seconds.");
                    }

                    Thread.Sleep(pause_milliseconds);
                }
                else
                {
                    if (verbose > 0)
                    {
                        Console.Out.WriteLine("Creating timer for " + pause_milliseconds + " seconds and initiating event pump.");
                    }

                    qTimer = new EQTimer(ctx, pause_milliseconds, lbmReqEventQueue);
                    lbmReqEventQueue.run(LBM.EVENT_QUEUE_BLOCK);
                }

                Console.Out.WriteLine("Done waiting for responses, {0} response{1} ({2} total bytes) received. Deleting request.\n",
                                      lbMreqCallBack.response_count, (lbMreqCallBack.response_count == 1 ? "" : "s"), lbMreqCallBack.response_byte_count);

                lbMreqCallBack.response_count      = 0;
                lbMreqCallBack.response_byte_count = 0;

                req.close();

                Console.Out.Flush();
            }//end of for

            if (linger > 0)
            {
                Console.Out.WriteLine("\nLingering for {0} second{1}...\n", linger, ((linger > 1) ? "s" : ""));
                Thread.Sleep(linger * 1000);
            }

            Console.Out.WriteLine("Quitting...");
            if (src != null)
            {
                src.close();
            }
            ctx.close();
        }
        static void Main(string[] args)
        {
            LBMContext ctx = null;  /* Context object: container for UM "instance". */
            LBMSource src = null;   /* Source object: for sending messages. */

            try
            {
                LBMTopic topic = null;
                LBMSourceAttributes srcAttr = null;

                ctx = new LBMContext();
                srcAttr = new LBMSourceAttributes();
                srcAttr.setValue("ume_store", "127.0.0.1:29999");
                srcAttr.setValue("ume_flight_size", maxFlightSize.ToString());
                topic = ctx.allocTopic("test.topic", srcAttr);
                src = new LBMSource(ctx, topic);
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error initializing LBM objects:  " + ex.Message);
                System.Environment.Exit(1);
            }

            try
            {
                System.Threading.Thread.Sleep(3000);
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
                System.Environment.Exit(1);
            }

            while (true)
            {
                /*** Send a message. ***/
                try
                {
                    src.send(Encoding.ASCII.GetBytes("test"), 4, LBM.MSG_FLUSH | LBM.SRC_NONBLOCK);
                }
                catch (LBMEWouldBlockException ex)
                {
                    try
                    {
                        int currentFlightSize = src.getInflight(LBM.FLIGHT_SIZE_TYPE_UME);

                        if (currentFlightSize == maxFlightSize)
                        {
                            System.Console.Error.WriteLine("Source is blocked on flight. Exiting");
                            break;
                        }
                    }
                    catch (LBMException exInflight)
                    {
                        System.Console.Error.WriteLine("Error getting flightsize: " + exInflight.Message);
                    }
                }
                catch (LBMException ex)
                {
                    System.Console.Error.WriteLine("Error sending: " + ex.Message);
                }
            }

            /*** Cleanup: delete UM objects. ***/
            try
            {
                System.Threading.Thread.Sleep(3000);
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
                System.Environment.Exit(1);
            }

            try
            {
                src.close();
                ctx.close();
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }
        }
Example #23
0
        static void Main(string[] args)
        {
            LBMContext ctx = null;      /* Container for UM instance */
            LBMTopic topic1 = null;		/* Object used to create topic */
            LBMTopic topic2 = null;	    /* Object used to create topic */
            LBMSource src1 = null;      /* Used for sending messages on a single topic */
            LBMSource src2 = null;      /* Used for sending messages on a single topic */
            LBMSourceAttributes srcAttr = null; 	/* Object used to configure sources */
            int resPort;
            int desPort;

            /* We are using certain lbm objects that require an application level 	*/
            /* memory manager called the LBMObjectRecycler to cleanup 				*/
            LBMObjectRecycler objRec = new LBMObjectRecycler();

            try
            {
                /* create ctxAttr to set config values before creating context */
                LBMContextAttributes ctxAttr = new LBMContextAttributes();
                ctxAttr.setObjectRecycler(objRec, null);

                /* Modify resolver address by setting attributes */
                ctxAttr.setValue("resolver_multicast_address", "224.10.11.12");

                /* Create a context with default attributes */
                ctx = new LBMContext(ctxAttr);
                /* Create source attributes object, used to configure sources */
                srcAttr = new LBMSourceAttributes();
                srcAttr.setObjectRecycler(objRec, null);

                /* Set configuration value using strings */
                srcAttr.setValue("transport", "lbtrm");

                /* The Java API only accepts string values. ints, for example */
                /* must be converted to strings */
                desPort = 14001;
                srcAttr.setValue("transport_lbtrm_destination_port", desPort.ToString());

                /* Create topic for the first source with configured attributes */
                topic1 = new LBMTopic(ctx, "test.topic1", srcAttr);
                src1 = new LBMSource(ctx, topic1);
                /* Modify Configuration for second topic to use a new port */
                desPort = 14002;
                srcAttr.setValue("transport_lbtrm_destination_port", desPort.ToString());

                /* Create second topic and source using modified configuration values */
                topic2 = new LBMTopic(ctx, "test.topic2", srcAttr);
                src2 = new LBMSource(ctx, topic2);
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }
            System.Console.Out.WriteLine("Context Attributes: ");
            List<LBMConfigOption> cfgOptList = ctx.dumpAttributeList();
            for (int i = 0; i < cfgOptList.Count; i++)
            {
                System.Console.Out.WriteLine(cfgOptList[i].Type + " " + cfgOptList[i].OptionName + " " + cfgOptList[i].Value);
            }
            System.Console.Out.WriteLine("Source #1 Attributes: ");
            cfgOptList = src1.dumpAttributeList();
            for (int i = 0; i < cfgOptList.Count; i++)
            {
                System.Console.Out.WriteLine(cfgOptList[i].Type + " " + cfgOptList[i].OptionName + " " + cfgOptList[i].Value);
            }
            System.Console.Out.WriteLine("Source #2 Attributes: ");
            cfgOptList = src2.dumpAttributeList();
            for (int i = 0; i < cfgOptList.Count; i++)
            {
                System.Console.Out.WriteLine(cfgOptList[i].Type + " " + cfgOptList[i].OptionName + " " + cfgOptList[i].Value);
            }
            /* Cleanup all LBM objects */
            try
            {
                objRec.close();
                src2.close();
                src1.close();
                ctx.close();
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }
        }
Example #24
0
        public static int Main(string[] args)
        {
            lbmlatpong latpong = null;

            LBMContext           ctx      = null;
            LBMContextAttributes ctx_attr = null;

            LBMTopic            pong_src_topic      = null;
            LBMSourceAttributes pong_src_topic_attr = null;
            LBMSource           pong_src            = null;

            LBMTopic ping_rcv_topic = null;
            LBMReceiverAttributes ping_rcv_topic_attr = null;
            lbmlatpongreceiver    ping_rcv            = null;

            latpong = new lbmlatpong(args);
            if (latpong.cpu >= 0)
            {
                Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(latpong.cpu);
            }

            /* Create the context. */
            ctx_attr = new LBMContextAttributes();
            ctx_attr.setValue("resolver_cache", "0");
            ctx_attr.setValue("operational_mode", "sequential");
            ctx_attr.setValue("request_tcp_port_high", "50000");
            ctx_attr.setValue("transport_lbtipc_receiver_thread_behavior", "busy_wait");
            ctx = new LBMContext(ctx_attr);
            ctx_attr.dispose();

            /* Create the pong source. */
            pong_src_topic_attr = new LBMSourceAttributes();
            pong_src_topic_attr.setValue("resolver_advertisement_sustain_interval", "0");
            pong_src_topic_attr.setValue("transport", "lbtsmx");
            pong_src_topic = new LBMTopic(ctx, "lbmlat-pong", pong_src_topic_attr);
            pong_src_topic_attr.dispose();
            pong_src         = new LBMSource(ctx, pong_src_topic);
            latpong.pong_src = pong_src;

            /* Create the ping receiver. */
            ping_rcv_topic_attr = new LBMReceiverAttributes();
            ping_rcv_topic_attr.enableSingleReceiverCallback(true);
            ping_rcv_topic_attr.setSourceNotificationCallbacks(
                new LBMSourceCreationCallback(latpong.onNewSource),
                new LBMSourceDeletionCallback(latpong.onSourceDelete),
                null);
            ping_rcv_topic = new LBMTopic(ctx, "lbmlat-ping", ping_rcv_topic_attr);
            ping_rcv_topic_attr.dispose();
            ping_rcv = new lbmlatpongreceiver(ctx, ping_rcv_topic, latpong, pong_src);

            /* Wait a bit for things to get set up. */
            System.Threading.Thread.Sleep(1000);

            /* Run the context until we've discovered the pinger's source. */
            while (!latpong.found_pinger)
            {
                ctx.processEvents(1000);
            }

            /* Wait a bit for things to get set up. */
            System.Threading.Thread.Sleep(1000);

            /* Send in a dummy pong message to kick things off. */
            IntPtr writeBuff;

            if (pong_src.buffAcquire(out writeBuff, (uint)16, 0) == 0)
            {
                Marshal.WriteInt64(writeBuff, 0, 1234567890);
                pong_src.buffsComplete();
            }

            /* Wait forever. */
            while (true)
            {
                System.Threading.Thread.Sleep(1000000);
                // ctx.processEvents(1000000);
            }
        }
Example #25
0
 public lbmlatpongreceiver(LBMContext lbmctx, LBMTopic lbmtopic, lbmlatpong mylatpong, LBMSource src)
 {
     latpong  = mylatpong;
     source   = src;
     receiver = new LBMReceiver(lbmctx, lbmtopic, new LBMReceiverCallback(onReceive), null, null);
 }
Example #26
0
        private lbmpong(string[] args)
        {
            if (System.Environment.GetEnvironmentVariable("LBM_LICENSE_FILENAME") == null &&
                System.Environment.GetEnvironmentVariable("LBM_LICENSE_INFO") == null)
            {
                SetEnvironmentVariable("LBM_LICENSE_FILENAME", "lbm_license.txt");
            }
            LBM lbm = new LBM();

            lbm.setLogger(new LBMLogging(logger));

            process_cmdline(args);

            if (use_mim && !eventq)
            {
                System.Console.Out.WriteLine("Using mim requires event queue to send from receive callback - forcing use");
                eventq = true;
            }
            if (msecpause > 0 && !eventq)
            {
                System.Console.Out.WriteLine("Setting pause value requires event queue - forcing use");
                eventq = true;
            }
            LBMSourceAttributes  sattr = new LBMSourceAttributes();
            LBMContextAttributes cattr = new LBMContextAttributes();

            /* Check if protocol needs to be set to lbtrm | lbtru */
            if (protocol == 'M')
            {
                try
                {
                    sattr.setValue("transport", "LBTRM");
                    cattr.setValue("transport_lbtrm_data_rate_limit", send_rate.ToString());
                    cattr.setValue("transport_lbtrm_retransmit_rate_limit", retrans_rate.ToString());
                }
                catch (LBMException ex)
                {
                    System.Console.Error.WriteLine("Error setting LBTRM rate: " + ex.Message);
                    System.Environment.Exit(1);
                }
            }
            if (protocol == 'U')
            {
                try
                {
                    sattr.setValue("transport", "LBTRU");
                    cattr.setValue("transport_lbtru_data_rate_limit", send_rate.ToString());
                    cattr.setValue("transport_lbtru_retransmit_rate_limit", retrans_rate.ToString());
                }
                catch (LBMException ex)
                {
                    System.Console.Error.WriteLine("Error setting LBTRU rate: " + ex.Message);
                    System.Environment.Exit(1);
                }
            }

            LBMContext        ctx = new LBMContext(cattr);
            PongLBMEventQueue evq = null;

            if (eventq)
            {
                System.Console.Error.WriteLine("Event queue in use");
                evq = new PongLBMEventQueue();
            }
            else
            {
                System.Console.Error.WriteLine("No event queue");
            }
            System.Console.Out.Flush();
            LBMSource       src = null;
            PongLBMReceiver rcv;
            LBMTopic        src_topic = null;
            LBMTopic        rcv_topic;

            if (ping)
            {
                System.Console.Error.WriteLine(
                    "Sending " + msgs + " " + msglen +
                    " byte messages to topic lbmpong/ping pausing "
                    + msecpause + " msec between");
                if (!use_mim)
                {
                    src_topic = ctx.allocTopic("lbmpong/ping", sattr);
                }
                rcv_topic = ctx.lookupTopic("lbmpong/pong");
            }
            else
            {
                rcv_topic = ctx.lookupTopic("lbmpong/ping");
                if (!use_mim)
                {
                    src_topic = ctx.allocTopic("lbmpong/pong", sattr);
                }
            }
            PongSrcCB srccb = new PongSrcCB();

            if (!use_mim)
            {
                src     = ctx.createSource(src_topic, new LBMSourceEventCallback(srccb.onSourceEvent), null);
                use_smx = src.getAttributeValue("transport").ToLower().Contains("smx");

                if (use_smx)
                {
                    /* Perform configuration validation */
                    const int smx_header_size  = 16;
                    int       max_payload_size =
                        Convert.ToInt32(src.getAttributeValue("transport_lbtsmx_datagram_max_size")) + smx_header_size;
                    if (msglen > max_payload_size)
                    {
                        /* The SMX transport doesn't fragment, so payload must be within maximum size limits */
                        System.Console.WriteLine("Error: Message size requested is larger than configured SMX datagram size.");
                        System.Environment.Exit(1);
                    }
                }
            }
            rcv = new PongLBMReceiver(ctx, rcv_topic, evq, src, ping, msecpause, msgs, verbose,
                                      end_on_eos, rtt_collect, rtt_ignore, use_mim);
            System.Threading.Thread.Sleep(5000);
            if (ping)
            {
                byte [] message = new byte[msglen];
                rcv.start();

                format(message, 0, System.Diagnostics.Stopwatch.GetTimestamp() * lbmpong.pspertick / 1000);
                if (use_mim)
                {
                    ctx.send("lbmpong/ping", message, msglen, LBM.MSG_FLUSH);
                }
                else if (use_smx)
                {
                    try
                    {
                        IntPtr writeBuff;
                        if (src.buffAcquire(out writeBuff, (uint)msglen, 0) == 0)
                        {
                            Marshal.Copy(message, 0, writeBuff, msglen);
                            src.buffsComplete();
                        }
                    }
                    catch (LBMException ex)
                    {
                        System.Console.Error.WriteLine("Error (while doing SMX acquire/complete): " + ex.Message);
                        System.Environment.Exit(1);
                    }
                }
                else
                {
                    src.send(message, msglen, LBM.MSG_FLUSH);
                }
            }
            if (eventq)
            {
                evq.run(run_secs * 1000);
            }
            else
            {
                System.Threading.Thread.Sleep(run_secs * 1000);
            }

            System.Console.Error.WriteLine("Quitting....");
            if (!use_mim)
            {
                src.close();
            }
            rcv.close();
            ctx.close();
            if (eventq)
            {
                evq.close();
            }
        }
Example #27
0
        static void Main(string[] args)
        {
            if (System.Environment.GetEnvironmentVariable("LBM_LICENSE_FILENAME") == null &&
                System.Environment.GetEnvironmentVariable("LBM_LICENSE_INFO") == null)
            {
                SetEnvironmentVariable("LBM_LICENSE_FILENAME", "lbm_license.txt");
            }
            LBM lbm = new LBM();

            lbm.setLogger(new LBMLogging(logger));

            LBMObjectRecycler objRec = new LBMObjectRecycler();

            int          send_rate            = 0;                                      //	Used for lbmtrm | lbtru transports
            int          retrans_rate         = 0;                                      //
            char         protocol             = '\0';                                   //
            int          linger               = 5;
            int          delay                = 1;
            int          msglen               = 25;
            int          pause                = 0;
            bool         do_stats             = false;
            int          initial_topic_number = default_initial_topic_number;
            string       topicroot            = default_topic_root;
            int          num_srcs             = default_num_sources;
            int          num_thrds            = default_num_threads;
            int          i;
            int          n = args.Length;
            bool         monitor_context       = false;
            int          monitor_context_ivl   = 0;
            bool         monitor_source        = false;
            int          monitor_source_ivl    = 0;
            string       application_id        = null;
            int          mon_format            = LBMMonitor.FORMAT_CSV;
            int          mon_transport         = LBMMonitor.TRANSPORT_LBM;
            string       mon_format_options    = null;
            string       mon_transport_options = null;
            bool         error = false;
            bool         done  = false;
            const string OPTION_MONITOR_CTX            = "--monitor-ctx";
            const string OPTION_MONITOR_SRC            = "--monitor-src";
            const string OPTION_MONITOR_TRANSPORT      = "--monitor-transport";
            const string OPTION_MONITOR_TRANSPORT_OPTS = "--monitor-transport-opts";
            const string OPTION_MONITOR_FORMAT         = "--monitor-format";
            const string OPTION_MONITOR_FORMAT_OPTS    = "--monitor-format-opts";
            const string OPTION_MONITOR_APPID          = "--monitor-appid";

            for (i = 0; i < n; i++)
            {
                try
                {
                    switch (args[i])
                    {
                    case OPTION_MONITOR_APPID:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        application_id = args[i];
                        break;

                    case OPTION_MONITOR_CTX:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        monitor_context     = true;
                        monitor_context_ivl = Convert.ToInt32(args[i]);
                        break;

                    case OPTION_MONITOR_SRC:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        monitor_source     = true;
                        monitor_source_ivl = Convert.ToInt32(args[i]);
                        break;

                    case OPTION_MONITOR_FORMAT:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        if (args[i].ToLower().CompareTo("csv") == 0)
                        {
                            mon_format = LBMMonitor.FORMAT_CSV;
                        }
                        else
                        {
                            error = true;
                            break;
                        }
                        break;

                    case OPTION_MONITOR_TRANSPORT:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        if (args[i].ToLower().CompareTo("lbm") == 0)
                        {
                            mon_transport = LBMMonitor.TRANSPORT_LBM;
                        }
                        else if (args[i].ToLower().CompareTo("udp") == 0)
                        {
                            mon_transport = LBMMonitor.TRANSPORT_UDP;
                        }
                        else if (args[i].ToLower().CompareTo("lbmsnmp") == 0)
                        {
                            mon_transport = LBMMonitor.TRANSPORT_LBMSNMP;
                        }
                        else
                        {
                            error = true;
                            break;
                        }
                        break;

                    case OPTION_MONITOR_TRANSPORT_OPTS:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        mon_transport_options += args[i];
                        break;

                    case OPTION_MONITOR_FORMAT_OPTS:
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        mon_format_options += args[i];
                        break;

                    case "-c":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        try
                        {
                            LBM.setConfiguration(args[i]);
                        }
                        catch (LBMException Ex)
                        {
                            System.Console.Error.WriteLine("lbmmsrc error: " + Ex.Message);
                            error = true;
                        }
                        break;

                    case "-d":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        delay = Convert.ToInt32(args[i]);
                        System.Console.Out.WriteLine("DELAY " + delay);
                        break;

                    case "-h":
                        print_help_exit(0);
                        break;

                    case "-i":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        initial_topic_number = Convert.ToInt32(args[i]);
                        break;

                    case "-l":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        msglen = Convert.ToInt32(args[i]);
                        break;

                    case "-L":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        linger = Convert.ToInt32(args[i]);
                        break;

                    case "-M":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        msgs = Convert.ToInt32(args[i]);
                        break;

                    case "-P":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        pause = Convert.ToInt32(args[i]);
                        break;

                    case "-r":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        topicroot = args[i];
                        break;

                    case "-R":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        ParseRateVars parseRateVars = lbmExampleUtil.parseRate(args[i]);
                        if (parseRateVars.error)
                        {
                            print_help_exit(1);
                        }
                        send_rate    = parseRateVars.rate;
                        retrans_rate = parseRateVars.retrans;
                        protocol     = parseRateVars.protocol;
                        break;

                    case "-s":
                        do_stats = true;
                        break;

                    case "-S":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        num_srcs = Convert.ToInt32(args[i]);
                        if (num_srcs > max_num_sources)
                        {
                            System.Console.Error.WriteLine("Too many sources specified. Max number of sources is " + max_num_sources);
                            System.Environment.Exit(1);
                        }
                        break;

                    case "-T":
                        if (++i >= n)
                        {
                            error = true;
                            break;
                        }
                        num_thrds = Convert.ToInt32(args[i]);
                        if (num_thrds > max_num_threads)
                        {
                            System.Console.Error.WriteLine("Too many threads specified. Max number of threads is " + max_num_threads);
                            System.Environment.Exit(1);
                        }
                        break;

                    default:
                        if (args[i].StartsWith("-"))
                        {
                            System.Console.Out.WriteLine("DEFAULT ERROR=TRUE");
                            error = true;
                        }
                        else
                        {
                            done = true;
                        }
                        break;
                    }
                    if (error || done)
                    {
                        break;
                    }
                }
                catch (Exception e)
                {
                    /* type conversion exception */
                    System.Console.Error.WriteLine("lbmmsrc: error\n" + e.Message + "\n");
                    print_help_exit(1);
                }
            }
            if (error)
            {
                /* An error occurred processing the command line - print help and exit */
                print_help_exit(1);
            }
            byte [] message = new byte[msglen];
            if (num_thrds > num_srcs)
            {
                System.Console.Error.WriteLine("Number of threads must be less than or equal to number of sources");
                System.Environment.Exit(1);
            }
            LBMSourceAttributes sattr = new LBMSourceAttributes();

            sattr.setObjectRecycler(objRec, null);
            LBMContextAttributes cattr = new LBMContextAttributes();

            cattr.setObjectRecycler(objRec, null);

            /* Check if protocol needs to be set to lbtrm | lbtru */
            if (protocol == 'M')
            {
                try
                {
                    sattr.setValue("transport", "LBTRM");
                    cattr.setValue("transport_lbtrm_data_rate_limit", send_rate.ToString());
                    cattr.setValue("transport_lbtrm_retransmit_rate_limit", retrans_rate.ToString());
                }
                catch (LBMException ex)
                {
                    System.Console.Error.WriteLine("Error setting LBTRM rate: " + ex.Message);
                    System.Environment.Exit(1);
                }
            }
            if (protocol == 'U')
            {
                try
                {
                    sattr.setValue("transport", "LBTRU");
                    cattr.setValue("transport_lbtru_data_rate_limit", send_rate.ToString());
                    cattr.setValue("transport_lbtru_retransmit_rate_limit", retrans_rate.ToString());
                }
                catch (LBMException ex)
                {
                    System.Console.Error.WriteLine("Error setting LBTRU rate: " + ex.Message);
                    System.Environment.Exit(1);
                }
            }

            LBMContext       ctx       = new LBMContext(cattr);
            LBMMonitorSource lbmmonsrc = null;

            if (monitor_context || monitor_source)
            {
                lbmmonsrc = new LBMMonitorSource(mon_format, mon_format_options, mon_transport, mon_transport_options);
                if (monitor_context)
                {
                    lbmmonsrc.start(ctx, application_id, monitor_context_ivl);
                }
            }
            MSrcCB srccb = new MSrcCB();

            LBMSource [] sources = new LBMSource[num_srcs];;
            for (i = 0; i < num_srcs; i++)
            {
                int    topicnum  = initial_topic_number + i;
                string topicname = topicroot + "." + topicnum;

                LBMTopic topic = ctx.allocTopic(topicname, sattr);
                sources[i] = ctx.createSource(topic, new LBMSourceEventCallback(srccb.onSourceEvent), null, null);
                if (i > 1 && (i % 1000) == 0)
                {
                    System.Console.Out.WriteLine("Created " + i + " sources");
                }
                if (monitor_source)
                {
                    lbmmonsrc.start(sources[i],
                                    application_id + "(" + i + ")",
                                    monitor_source_ivl);
                }
            }

            if (delay > 0)
            {
                System.Console.Out.WriteLine("Delaying sending for {0} second{1}...\n",
                                             delay, ((delay > 1) ? "s" : ""));
                Thread.Sleep(delay * 1000);
            }

            System.Console.Out.WriteLine("Created " + num_srcs + " sources. Will start sending data now.\n");
            System.Console.Out.WriteLine("Using " + num_thrds + " threads to send " +
                                         msgs + " messages of size " + msglen +
                                         " bytes (" + (msgs / num_thrds) + " messages per thread).");
            System.Console.Out.Flush();
            LBMSrcThread [] srcthreads = new LBMSrcThread[num_thrds];
            for (i = 1; i < num_thrds; i++)
            {
                srcthreads[i] = new LBMSrcThread(i, num_thrds, message, msglen, msgs / num_thrds, sources, num_srcs, pause);
                srcthreads[i].start();
            }
            srcthreads[0] = new LBMSrcThread(0, num_thrds, message, msglen, msgs / num_thrds, sources, num_srcs, pause);
            srcthreads[0].run();
            System.Console.Out.WriteLine("\nDone sending on thread 0. Waiting for any other threads to finish.");
            for (i = 1; i < num_thrds; i++)
            {
                System.Console.Out.WriteLine("Joining thread " + i);
                srcthreads[i].join();
                System.Console.Out.WriteLine("Joined thread " + i);
            }
            System.Console.Out.Flush();
            if (linger > 0)
            {
                System.Console.Out.WriteLine("\nLingering for {0} second{1}...\n",
                                             linger, ((linger > 1) ? "s" : ""));
                System.Threading.Thread.Sleep(linger * 1000);
            }
            if (do_stats)
            {
                print_stats(ctx, num_srcs, sources[0].getAttributeValue("transport"), objRec);
            }
            System.Console.Out.WriteLine("Quitting...");
            objRec.close();
            for (i = 0; i < num_srcs; i++)
            {
                sources[i].close();
            }
            ctx.close();
        }
Example #28
0
    static void Main(String[] args)
    {
        LBMContext ctx = null; /* Context object: container for UM "instance". */
        LBMSource  src = null; /* Source object: for sending messages. */

        SrcCB srccb = null;

        /*** Initialization: create necessary UM objects. ***/
        try
        {
            LBMTopic            topic   = null;
            LBMSourceAttributes srcAttr = null;

            srccb   = new SrcCB();
            ctx     = new LBMContext();
            srcAttr = new LBMSourceAttributes();
            srcAttr.setValue("ume_store", "127.0.0.1:29999");
            srcAttr.setValue("ume_store_behavior", "qc");
            topic = ctx.allocTopic("test.topic", srcAttr);
            src   = ctx.createSource(topic, new LBMSourceEventCallback(srccb.onSourceEvent), null, null);
        }
        catch (LBMException ex)
        {
            System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
            System.Environment.Exit(1);
        }

        while (true)
        {
            if (srcReady == 1)
            {
                /*** Send a message. ***/
                try
                {
                    src.send(Encoding.ASCII.GetBytes("test"), 4, LBM.MSG_FLUSH | LBM.SRC_NONBLOCK);
                }
                catch (LBMException ex)
                {
                    /* Error trying to send, wait 1 second and try again */
                    try
                    {
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch (Exception eex)
                    {
                        System.Console.Error.WriteLine("Error Thread.sleep interrupted: " + eex.Message);
                        System.Environment.Exit(1);
                    }
                }
            }
            else
            {
                /* No quorum, wait 1 second and check again */
                System.Console.Out.Write("Source is not ready to send (no quorum)");
                try
                {
                    System.Threading.Thread.Sleep(1000);
                }
                catch (Exception eex)
                {
                    System.Console.Error.WriteLine("Error Thread.sleep interrupted: " + eex.Message);
                    System.Environment.Exit(1);
                }
            }
        }
    } /* main */
Example #29
0
        static void Main(string[] args)
        {
            LBMContext ctx = null;  /* Context object: container for UM "instance". */
            LBMSource  src = null;  /* Source object: for sending messages. */

            try
            {
                LBMTopic            topic   = null;
                LBMSourceAttributes srcAttr = null;

                ctx     = new LBMContext();
                srcAttr = new LBMSourceAttributes();
                srcAttr.setValue("ume_store", "127.0.0.1:29999");
                srcAttr.setValue("ume_flight_size", maxFlightSize.ToString());
                topic = ctx.allocTopic("test.topic", srcAttr);
                src   = new LBMSource(ctx, topic);
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error initializing LBM objects:  " + ex.Message);
                System.Environment.Exit(1);
            }

            try
            {
                System.Threading.Thread.Sleep(3000);
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
                System.Environment.Exit(1);
            }

            while (true)
            {
                /*** Send a message. ***/
                try
                {
                    src.send(Encoding.ASCII.GetBytes("test"), 4, LBM.MSG_FLUSH | LBM.SRC_NONBLOCK);
                }
                catch (LBMEWouldBlockException ex)
                {
                    try
                    {
                        int currentFlightSize = src.getInflight(LBM.FLIGHT_SIZE_TYPE_UME);

                        if (currentFlightSize == maxFlightSize)
                        {
                            System.Console.Error.WriteLine("Source is blocked on flight. Exiting");
                            break;
                        }
                    }
                    catch (LBMException exInflight)
                    {
                        System.Console.Error.WriteLine("Error getting flightsize: " + exInflight.Message);
                    }
                }
                catch (LBMException ex)
                {
                    System.Console.Error.WriteLine("Error sending: " + ex.Message);
                }
            }

            /*** Cleanup: delete UM objects. ***/
            try
            {
                System.Threading.Thread.Sleep(3000);
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + ex.Message);
                System.Environment.Exit(1);
            }

            try
            {
                src.close();
                ctx.close();
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }
        } /* Main */
Example #30
0
    static void Main(String[] args)
    {
        LBMContext ctx = null; /* Context object: container for UM "instance". */
                LBMEventQueue evq = new LBMEventQueue();

                /* Initialization: create necessary UM objects. */
                try {
                        LBMContextAttributes ctxAttr = new LBMContextAttributes();
                        ctx = new LBMContext(ctxAttr);
                }
                catch(LBMException ex)
                {
                        System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
                        System.Environment.Exit(1);
                }

                /* Initialize and create receiver and receiver callback */
                LBMReceiverCallback myReceiverCallback = new LBMReceiverCallback(onReceive);

                LBMReceiverAttributes rcv_attr = new LBMReceiverAttributes();
                LBMTopic rtopic = new LBMTopic(ctx, "test.topic", rcv_attr);
                LBMReceiver rcv = new LBMReceiver(ctx, rtopic, myReceiverCallback, evq);

                /* Initialize and create source */
                LBMTopic stopic = new LBMTopic(ctx, "test.topic", new LBMSourceAttributes());
                LBMSource src = new LBMSource(ctx, stopic);

                EQThread evqThread = new EQThread(evq);
                evqThread.start();

                try
                {
                    System.Threading.Thread.Sleep(1000);
                }
                catch (Exception eex)
                {
                    System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + eex.Message);
                    System.Environment.Exit(1);
                }

                src.send(Encoding.ASCII.GetBytes("hello"), 5, LBM.MSG_FLUSH);

                while (cleanup == 0)
                {
                    try
                    {
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch (Exception eex)
                    {
                        System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + eex.Message);
                        System.Environment.Exit(1);
                    }
                }

                evq.stop();
                evqThread.join();

                src.close();
                rcv.close();
                ctx.close();
                evq.close();
    }
Example #31
0
        static void Main(string[] args)
        {
            LBMContext          ctx     = null; /* Container for UM instance */
            LBMTopic            topic1  = null; /* Object used to create topic */
            LBMTopic            topic2  = null; /* Object used to create topic */
            LBMSource           src1    = null; /* Used for sending messages on a single topic */
            LBMSource           src2    = null; /* Used for sending messages on a single topic */
            LBMSourceAttributes srcAttr = null; /* Object used to configure sources */
            int resPort;
            int desPort;

            /* We are using certain lbm objects that require an application level   */
            /* memory manager called the LBMObjectRecycler to cleanup               */
            LBMObjectRecycler objRec = new LBMObjectRecycler();

            try
            {
                /* create ctxAttr to set config values before creating context */
                LBMContextAttributes ctxAttr = new LBMContextAttributes();
                ctxAttr.setObjectRecycler(objRec, null);

                /* Modify resolver address by setting attributes */
                ctxAttr.setValue("resolver_multicast_address", "224.10.11.12");

                /* Create a context with default attributes */
                ctx = new LBMContext(ctxAttr);
                /* Create source attributes object, used to configure sources */
                srcAttr = new LBMSourceAttributes();
                srcAttr.setObjectRecycler(objRec, null);

                /* Set configuration value using strings */
                srcAttr.setValue("transport", "lbtrm");

                /* The Java API only accepts string values. ints, for example */
                /* must be converted to strings */
                desPort = 14001;
                srcAttr.setValue("transport_lbtrm_destination_port", desPort.ToString());

                /* Create topic for the first source with configured attributes */
                topic1 = new LBMTopic(ctx, "test.topic1", srcAttr);
                src1   = new LBMSource(ctx, topic1);
                /* Modify Configuration for second topic to use a new port */
                desPort = 14002;
                srcAttr.setValue("transport_lbtrm_destination_port", desPort.ToString());

                /* Create second topic and source using modified configuration values */
                topic2 = new LBMTopic(ctx, "test.topic2", srcAttr);
                src2   = new LBMSource(ctx, topic2);
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }
            System.Console.Out.WriteLine("Context Attributes: ");
            List <LBMConfigOption> cfgOptList = ctx.dumpAttributeList();

            for (int i = 0; i < cfgOptList.Count; i++)
            {
                System.Console.Out.WriteLine(cfgOptList[i].Type + " " + cfgOptList[i].OptionName + " " + cfgOptList[i].Value);
            }
            System.Console.Out.WriteLine("Source #1 Attributes: ");
            cfgOptList = src1.dumpAttributeList();
            for (int i = 0; i < cfgOptList.Count; i++)
            {
                System.Console.Out.WriteLine(cfgOptList[i].Type + " " + cfgOptList[i].OptionName + " " + cfgOptList[i].Value);
            }
            System.Console.Out.WriteLine("Source #2 Attributes: ");
            cfgOptList = src2.dumpAttributeList();
            for (int i = 0; i < cfgOptList.Count; i++)
            {
                System.Console.Out.WriteLine(cfgOptList[i].Type + " " + cfgOptList[i].OptionName + " " + cfgOptList[i].Value);
            }
            /* Cleanup all LBM objects */
            try
            {
                objRec.close();
                src2.close();
                src1.close();
                ctx.close();
            }
            catch (LBMException ex)
            {
                System.Console.Error.WriteLine("Error closing LBM objects: " + ex.Message);
                System.Environment.Exit(1);
            }
        }
Example #32
0
    static void Main(String[] args)
    {
        LBMContext    ctx = null; /* Context object: container for UM "instance". */
        LBMEventQueue evq = new LBMEventQueue();

        /* Initialization: create necessary UM objects. */
        try
        {
            LBMContextAttributes ctxAttr = new LBMContextAttributes();
            ctx = new LBMContext(ctxAttr);
        }
        catch (LBMException ex)
        {
            System.Console.Error.WriteLine("Error initializing LBM objects: " + ex.Message);
            System.Environment.Exit(1);
        }

        /* Initialize and create receiver and receiver callback */
        LBMReceiverCallback myReceiverCallback = new LBMReceiverCallback(onReceive);

        LBMReceiverAttributes rcv_attr = new LBMReceiverAttributes();
        LBMTopic    rtopic             = new LBMTopic(ctx, "test.topic", rcv_attr);
        LBMReceiver rcv = new LBMReceiver(ctx, rtopic, myReceiverCallback, evq);

        /* Initialize and create source */
        LBMTopic  stopic = new LBMTopic(ctx, "test.topic", new LBMSourceAttributes());
        LBMSource src    = new LBMSource(ctx, stopic);

        EQThread evqThread = new EQThread(evq);

        evqThread.start();

        try
        {
            System.Threading.Thread.Sleep(1000);
        }
        catch (Exception eex)
        {
            System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + eex.Message);
            System.Environment.Exit(1);
        }

        src.send(Encoding.ASCII.GetBytes("hello"), 5, LBM.MSG_FLUSH);

        while (cleanup == 0)
        {
            try
            {
                System.Threading.Thread.Sleep(1000);
            }
            catch (Exception eex)
            {
                System.Console.Error.WriteLine("Error System.Threading.Thread.Sleep() exception:  " + eex.Message);
                System.Environment.Exit(1);
            }
        }

        evq.stop();
        evqThread.join();

        src.close();
        rcv.close();
        ctx.close();
        evq.close();
    } /* main */
Example #33
0
        void Run(string[] args)
        {
            string cfgFile = "application.cfg";
            string test    = "1";

            if (args.Length == 2)
            {
                cfgFile = args[0];
                test    = args[1];
            }
            else if (args.Length == 1)
            {
                cfgFile = args[0];
            }
            else if (args.Length != 0)
            {
                throw new TmonException("TmonExample: bad arg count (" + args.Length + ")");
            }

            LBM lbm = new LBM();

            lbm.setLogger(this.Logger);

            _timeOfDay = new TmonGetTimeOfDay();

            LBM.setConfiguration(cfgFile);

            MyLog("Creating context.");
            // Context name must be alpha, numeric, underscore, hyphen.
            LBMContextAttributes ctxAttr = new LBMContextAttributes("tmon_example_ctx");
            LBMContext           ctx     = new LBMContext(ctxAttr);

            MyLog("Creating topic monitor.");
            TmonContext tmonContext = new TmonContext(ctx);

            tmonContext.InitSender(); // I.e. this tmon context is for sending reports.

            MyLog("Creating wildcard rcv for '^.*2$' (will resolv, no msg)");
            TmonReceiver          tmonWRcv = tmonContext.ReceiverCreate(ReceiverType.Wildcard, "^.*2$");
            LBMReceiverAttributes rcvAttr  = new LBMReceiverAttributes("29west_tmon_context", "wc2");

            rcvAttr.setSourceNotificationCallbacks(this.OnDeliveryControllerCreate,
                                                   this.OnDeliveryControllerDelete, tmonWRcv);
            LBMWildcardReceiver wrcv = new LBMWildcardReceiver(ctx, "^.*2$", rcvAttr,
                                                               null, this.OnReceive, null);

            MyLog("Creating rcv for 'src\\1' (will resolv, rcv msg)");
            TmonReceiver tmonRcv1 = tmonContext.ReceiverCreate(ReceiverType.Regular, "src\\1");

            rcvAttr = new LBMReceiverAttributes("29west_tmon_context", "src\\1");
            rcvAttr.setSourceNotificationCallbacks(this.OnDeliveryControllerCreate,
                                                   this.OnDeliveryControllerDelete, tmonRcv1);
            LBMReceiver rcv1 = new LBMReceiver(ctx, ctx.lookupTopic("src\\1", rcvAttr),
                                               this.OnReceive, null, null);

            MyLog("Creating rcv for 'src3' (will resolve, no msg)");
            TmonReceiver tmonRcv3 = tmonContext.ReceiverCreate(ReceiverType.Regular, "src3");

            rcvAttr = new LBMReceiverAttributes("29west_tmon_context", "src3");
            rcvAttr.setSourceNotificationCallbacks(this.OnDeliveryControllerCreate,
                                                   this.OnDeliveryControllerDelete, tmonRcv3);
            LBMReceiver rcv3 = new LBMReceiver(ctx, ctx.lookupTopic("src3", rcvAttr),
                                               this.OnReceive, null, null);

            MyLog("Creating rcv for 'srcx' (will not resolve)");
            TmonReceiver tmonRcvx = tmonContext.ReceiverCreate(ReceiverType.Regular, "srcx");

            rcvAttr = new LBMReceiverAttributes("29west_tmon_context", "srcx");
            rcvAttr.setSourceNotificationCallbacks(this.OnDeliveryControllerCreate,
                                                   this.OnDeliveryControllerDelete, tmonRcvx);
            LBMReceiver rcvx = new LBMReceiver(ctx, ctx.lookupTopic("srcx", rcvAttr),
                                               this.OnReceive, null, null);

            MyLog("Creating src for 'src\\1' (will resolve, send msg)");
            TmonSource          tmonSrc1 = tmonContext.SourceCreate("src\\1");
            LBMSourceAttributes srcAttr  = new LBMSourceAttributes("29west_tmon_context", "src\\1");
            LBMSource           src1     = ctx.createSource(ctx.allocTopic("src\\1", srcAttr));

            Thread.Sleep(100); // Let receiver discover.

            MyLog("Creating src for 'src,2' (wildcard resolve, no msg)");
            TmonSource tmonSrc2 = tmonContext.SourceCreate("src,2");

            srcAttr = new LBMSourceAttributes("29west_tmon_context", "src,2");
            LBMSource src2 = ctx.createSource(ctx.allocTopic("src,2", srcAttr));

            Thread.Sleep(100); // Let receiver discover.

            MyLog("Creating src for 'src3' (will resolve, no msg)");
            TmonSource tmonSrc3 = tmonContext.SourceCreate("src3");

            srcAttr = new LBMSourceAttributes("29west_tmon_context", "src3");
            LBMSource src3 = ctx.createSource(ctx.allocTopic("src3", srcAttr));

            Thread.Sleep(100); // Let receiver discover.

            MyLog("Delete receiver for 'src,2' to get DC delete without BOS or EOS");
            wrcv.close();
            tmonWRcv.Close();

            MyLog("Sleeping 6 for BOS triggered by TSNI for 'src\\1', 'src3'");
            Thread.Sleep(6000);

            MyLog("Deleting rcv for 'src3' while src still up - should get DC delete without EOS");
            rcv3.close();
            tmonRcv3.Close();

            string msg = "Hello!";

            if (test.Equals("1"))
            {
                MyLog("Sending to 'src\\1'");
                src1.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0);

                MyLog("Wait for msg receive or EOS");
                while (_messagesReceived == 0)
                {
                    Thread.Sleep(1000);
                }
            }
            else if (test.Equals("2"))
            {
                MyLog("Sending 120 msgs to 'src\\1'");
                for (int i = 0; i < 120; i++)
                {
                    src1.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0);
                } // for
                MyLog("lingering 10 sec");
                Thread.Sleep(10000);
            }
            else
            {
                throw new TmonException("TmonExample: bad test number (" + test + ")");
            }

            MyLog("Delete sources");
            src1.close();
            tmonSrc1.Close();
            src2.close();
            tmonSrc2.Close();
            src3.close();
            tmonSrc3.Close();

            MyLog("Sleeping 6 sec for EOS and DC delete for 'src\\1'.");
            Thread.Sleep(6000);

            MyLog("Deleting rcvs for 'src\\1'");
            rcv1.close();
            tmonRcv1.Close();

            MyLog("Generate rolling EOS on srcx");
            LBM.setLbtrmSrcLossRate(100);
            TmonSource tmonSrcx = tmonContext.SourceCreate("srcx");

            srcAttr = new LBMSourceAttributes("29west_tmon_context", "srcx");
            LBMSource srcx = ctx.createSource(ctx.allocTopic("srcx", srcAttr));

            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Start SMs going.
            Thread.Sleep(13750);                                    // Wait 2.5 * RM activity timeouts.

            MyLog("Generate BOS on srcx and msg");
            LBM.setLbtrmSrcLossRate(0);
            msg = "1";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Trigger BOS.
            Thread.Sleep(100);

            MyLog("Generate unrecoverable loss on srcx");
            LBM.setLbtrmSrcLossRate(100);
            msg = "2";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Lost pkt.
            Thread.Sleep(100);
            LBM.setLbtrmSrcLossRate(0);
            msg = "3";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // gap.
            Thread.Sleep(200);                                      // 2*nak gen ivl.
            msg = "4";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // push out loss event.
            Thread.Sleep(100);

            MyLog("Generate suppressed unrecoverable loss");
            LBM.setLbtrmSrcLossRate(0);
            msg = "1";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Trigger BOS.
            Thread.Sleep(100);
            LBM.setLbtrmSrcLossRate(100);
            msg = "2";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Lost pkt.
            Thread.Sleep(100);
            LBM.setLbtrmSrcLossRate(0);
            msg = "3";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // gap.
            Thread.Sleep(200);                                      // 2*nak gen ivl.
            msg = "4";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // push out loss event.
            Thread.Sleep(100);

            Thread.Sleep(10100); // Expire tmon's 10-second loss suppression.

            MyLog("Generate unrecoverable burst loss");
            LBM.setLbtrmSrcLossRate(100);
            msg = "5";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Lost pkt.
            msg = "6";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Lost pkt.
            msg = "7";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Lost pkt.
            msg = "8";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // Lost pkt.
            Thread.Sleep(100);
            LBM.setLbtrmSrcLossRate(0);
            msg = "9";
            srcx.send(Encoding.ASCII.GetBytes(msg), msg.Length, 0); // gap.
            Thread.Sleep(200);                                      // Wait for BURST.

            MyLog("Delete rcvx, srcx.");
            rcvx.close();
            tmonRcvx.Close();
            srcx.close();
            tmonSrcx.Close();

            MyLog("Deleting tmon_ctx.");
            tmonContext.Close();

            MyLog("Deleting context.");
            ctx.close();
        } // Run
Example #34
0
        public static int Main(string[] args)
        {
            lbmlatping latping = null;

            LBMContext           ctx      = null;
            LBMContextAttributes ctx_attr = null;

            LBMTopic            ping_src_topic      = null;
            LBMSourceAttributes ping_src_topic_attr = null;
            LBMSource           ping_src            = null;

            LBMTopic pong_rcv_topic = null;
            LBMReceiverAttributes pong_rcv_topic_attr = null;
            lbmlatpingreceiver    pong_rcv            = null;

            latping = new lbmlatping(args);
            if (latping.cpu >= 0)
            {
                Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(latping.cpu);
            }
            try
            {
                /* Create the context. */
                ctx_attr = new LBMContextAttributes();
                ctx_attr.setValue("resolver_cache", "0");
                ctx_attr.setValue("operational_mode", "sequential");
                ctx_attr.setValue("request_tcp_port_high", "50000");
                ctx = new LBMContext(ctx_attr);
                ctx_attr.dispose();

                /* Create the ping source. */
                ping_src_topic_attr = new LBMSourceAttributes();
                ping_src_topic_attr.setValue("resolver_advertisement_sustain_interval", "0");
                ping_src_topic_attr.setValue("transport", "lbtsmx");
                ping_src_topic = new LBMTopic(ctx, "lbmlat-ping", ping_src_topic_attr);
                ping_src_topic_attr.dispose();
                ping_src         = new LBMSource(ctx, ping_src_topic);
                latping.ping_src = ping_src;

                /* Perform some configuration validation */
                const int smx_header_size  = 16;
                int       max_payload_size =
                    Convert.ToInt32(ping_src.getAttributeValue("transport_lbtsmx_datagram_max_size")) + smx_header_size;
                if (latping.msgbuf.Length > max_payload_size)
                {
                    /* The SMX transport doesn't fragment, so payload must be within maximum size limits */
                    System.Console.WriteLine("Error: Message size requested is larger than configured SMX datagram size.");
                    System.Environment.Exit(1);
                }

                /* Create the pong receiver. */
                pong_rcv_topic_attr = new LBMReceiverAttributes();
                pong_rcv_topic_attr.enableSingleReceiverCallback(true);
                pong_rcv_topic = new LBMTopic(ctx, "lbmlat-pong", pong_rcv_topic_attr);
                pong_rcv_topic_attr.dispose();
                pong_rcv = new lbmlatpingreceiver(ctx, pong_rcv_topic, latping);

                /* Run the context just long enough to advertise. */
                ctx.processEvents(1000);

                /* The ponger kicks things off as soon as he's discovered our ping source. */
                while (true)
                {
                    System.Threading.Thread.Sleep(1000000);
                    //ctx.processEvents(1000000);
                }
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine(e.ToString());
            }
            return(0);
        }