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); }