Esempio n. 1
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();
        }
Esempio n. 2
0
 public LBMreqCB(int verbose, LBMreqEventQueue eq)
 {
     _verbose = verbose;
     _evq     = eq;
 }