Exemple #1
0
        public int onReceive(object cbArg, LBMMessage msg)
        {
            switch (msg.type())
            {
            case LBM.MSG_DATA:
                if (stotal_msg_count == 0)
                {
                    data_start_time = Environment.TickCount;
                }
                else
                {
                    data_end_time = Environment.TickCount;
                }
                msg_count++;
                total_msg_count++;
                if ((total_msg_count == 100) && _dereg == 1)
                {
                    System.Console.Out.WriteLine("Sending DEREGISTRATION\n");
                    System.Console.Out.Flush();
                    _lbmrcvr.umederegister();
                }
                stotal_msg_count++;
                subtotal_msg_count++;
                byte_count       += msg.data().Length;
                total_byte_count += msg.data().Length;

                if ((msg.flags() & LBM.MSG_FLAG_RETRANSMIT) != 0)
                {
                    rx_msgs++;
                }
                if ((msg.flags() & LBM.MSG_FLAG_OTR) != 0)
                {
                    otr_msgs++;
                }

                if (_verbose)
                {
                    System.Console.Error.Write("["
                                               + msg.topicName()
                                               + "]["
                                               + msg.source()
                                               + "]["
                                               + msg.sequenceNumber()
                                               + "]");
                    if ((msg.flags() & LBM.MSG_FLAG_UME_RETRANSMIT) != 0)
                    {
                        System.Console.Error.Write("-RX-");
                    }
                    if ((msg.flags() & LBM.MSG_FLAG_OTR) != 0)
                    {
                        System.Console.Error.Write("-OTR-");
                    }
                    System.Console.Error.Write(", ");
                    System.Console.Error.WriteLine(msg.data().Length
                                                   + " bytes");
                }
                if (_exack > 0)
                {
                    if ((msg.sequenceNumber() % _exack) == 0)
                    {
                        if (_verbose)
                        {
                            System.Console.Out.WriteLine(" Sending Explicit ACK");
                        }
                        try
                        {
                            msg.sendExplicitAck();
                        }
                        catch (Exception e)
                        {
                            System.Console.Error.WriteLine("msg.sendExplicitAck(): " + e.Message);
                        }
                    }
                }
                break;

            case LBM.MSG_BOS:
                System.Console.Error.WriteLine("[" + msg.topicName() + "][" + msg.source() + "], Beginning of Transport Session");
                break;

            case LBM.MSG_EOS:
                System.Console.Error.WriteLine("[" + msg.topicName() + "][" + msg.source() + "], End of Transport Session");
                if (_end_on_eos)
                {
                    if (_summary)
                    {
                        print_summary();
                    }
                    end();
                }
                subtotal_msg_count = 0;
                break;

            case LBM.MSG_UNRECOVERABLE_LOSS:
                unrec_count++;
                total_unrec_count++;
                if (_verbose)
                {
                    System.Console.Error.WriteLine("[" + msg.topicName() + "][" + msg.source() + "][" + msg.sequenceNumber().ToString("x") + "], LOST");
                }
                break;

            case LBM.MSG_UNRECOVERABLE_LOSS_BURST:
                burst_loss++;
                if (_verbose)
                {
                    System.Console.Error.WriteLine("[" + msg.topicName() + "][" + msg.source() + "], LOST BURST");
                }
                break;

            case LBM.MSG_REQUEST:
                if (stotal_msg_count == 0)
                {
                    data_start_time = Environment.TickCount;
                }
                else
                {
                    data_end_time = Environment.TickCount;
                }
                msg_count++;
                stotal_msg_count++;
                subtotal_msg_count++;
                byte_count       += msg.data().Length;
                total_byte_count += msg.data().Length;
                break;

            case LBM.MSG_UME_REGISTRATION_ERROR:
                System.Console.Error.WriteLine("[" + msg.topicName() + "][" + msg.source() + "] UME registration error: " + msg.dataString());
                break;

            case LBM.MSG_UME_DEREGISTRATION_SUCCESS_EX:
                System.Console.Out.Write("Received MSG_UME_DEREGISTRATION_SUCCESS_EX\n");
                UMEDeregistrationSuccessInfo dereg = msg.deregistrationSuccessInfo();
                System.Console.Out.Write("[" + msg.topicName() + "][" + msg.source()
                                         + "] store " + dereg.storeIndex() + ": "
                                         + dereg.store() + " UME registration successful. SrcRegID "
                                         + dereg.sourceRegistrationId() + " RcvRegID " + dereg.receiverRegistrationId()
                                         + ". Flags " + dereg.flags() + " ");
                if ((dereg.flags() & LBM.MSG_UME_REGISTRATION_SUCCESS_EX_FLAG_OLD) != 0)
                {
                    System.Console.Out.Write("OLD[SQN " + dereg.sequenceNumber() + "] ");
                }
                if ((dereg.flags() & LBM.MSG_UME_REGISTRATION_SUCCESS_EX_FLAG_NOCACHE) != 0)
                {
                    System.Console.Out.Write("NOCACHE ");
                }
                System.Console.Out.WriteLine();
                break;

            case LBM.MSG_UME_DEREGISTRATION_COMPLETE_EX:
                System.Console.Out.Write("Received MSG_UME_DEREGISTRATION_COMPLETE_EX\n");
                break;

            case LBM.MSG_UME_REGISTRATION_SUCCESS_EX:
                UMERegistrationSuccessInfo reg = msg.registrationSuccessInfo();
                System.Console.Out.Write("[" + msg.topicName() + "][" + msg.source()
                                         + "] store " + reg.storeIndex() + ": "
                                         + reg.store() + " UME registration successful. SrcRegID "
                                         + reg.sourceRegistrationId() + " RcvRegID " + reg.receiverRegistrationId()
                                         + ". Flags " + reg.flags() + " ");
                if ((reg.flags() & LBM.MSG_UME_REGISTRATION_SUCCESS_EX_FLAG_OLD) != 0)
                {
                    System.Console.Out.Write("OLD[SQN " + reg.sequenceNumber() + "] ");
                }
                if ((reg.flags() & LBM.MSG_UME_REGISTRATION_SUCCESS_EX_FLAG_NOCACHE) != 0)
                {
                    System.Console.Out.Write("NOCACHE ");
                }
                if ((reg.flags() & LBM.MSG_UME_REGISTRATION_SUCCESS_EX_FLAG_SRC_SID) != 0)
                {
                    System.Console.Out.Write("Src Session ID 0x" + reg.sourceSessionId().ToString("x") + " ");
                }
                System.Console.Out.WriteLine();
                break;

            case LBM.MSG_UME_REGISTRATION_COMPLETE_EX:
                UMERegistrationCompleteInfo regcomplete = msg.registrationCompleteInfo();
                System.Console.Out.Write("[" + msg.topicName() + "][" + msg.source()
                                         + "] UME registration complete. SQN " + regcomplete.sequenceNumber()
                                         + ". Flags " + regcomplete.flags() + " ");
                if ((regcomplete.flags() & LBM.MSG_UME_REGISTRATION_COMPLETE_EX_FLAG_QUORUM) != 0)
                {
                    System.Console.Out.Write("QUORUM ");
                }
                if ((regcomplete.flags() & LBM.MSG_UME_REGISTRATION_COMPLETE_EX_FLAG_RXREQMAX) != 0)
                {
                    System.Console.Out.Write("RXREQMAX ");
                }
                if ((regcomplete.flags() & LBM.MSG_UME_REGISTRATION_COMPLETE_EX_FLAG_SRC_SID) != 0)
                {
                    System.Console.Out.Write("Src Session ID 0x" + regcomplete.sourceSessionId().ToString("x") + " ");
                }
                System.Console.Out.WriteLine();
                break;

            case LBM.MSG_UME_REGISTRATION_CHANGE:
                System.Console.Error.WriteLine("[" + msg.topicName() + "][" + msg.source() + "] UME registration change: " + msg.dataString());
                break;

            default:
                System.Console.Out.WriteLine("Unhandled receiver event [" + msg.type() + "] from source [" + msg.source() + "] with topic [" + msg.topicName() + "]. Refer to https://ultramessaging.github.io/currdoc/doc/dotnet_example/index.html#unhandledcsevents for a detailed description.");
                break;
            }
            msg.dispose();              // Send ACK now
            System.Console.Out.Flush();
            return(0);
        }