// Token: 0x0600228E RID: 8846 RVA: 0x000A0EC8 File Offset: 0x0009F0C8
        public static byte[] SerializeToBytes(PassiveStatusMsg.Flags msgFlags, long ackCounter, uint genInNetworkBuffer, uint genWrittenToInspector, uint lastGenInspected, uint lastGenReplayed, bool isCrossSite)
        {
            NetworkChannelPacket networkChannelPacket = new NetworkChannelPacket(54);

            networkChannelPacket.GrowthDisabled = true;
            networkChannelPacket.Append(1);
            int val = 49;

            networkChannelPacket.Append(val);
            val = 1096045392;
            networkChannelPacket.Append(val);
            val = 49;
            networkChannelPacket.Append(val);
            DateTime utcNow = DateTime.UtcNow;

            networkChannelPacket.Append(utcNow);
            networkChannelPacket.Append((long)msgFlags);
            networkChannelPacket.Append(ackCounter);
            networkChannelPacket.Append(genInNetworkBuffer);
            networkChannelPacket.Append(genWrittenToInspector);
            networkChannelPacket.Append(lastGenInspected);
            networkChannelPacket.Append(lastGenReplayed);
            networkChannelPacket.Append(isCrossSite);
            return(networkChannelPacket.Buffer);
        }
Beispiel #2
0
        private void TrySendStatusMessageToActive(PassiveStatusMsg.Flags statusFlags, long requestAckCounter, out NetworkTransportException sendException, out bool sendSkippedBecauseChannelBusy)
        {
            sendException = null;
            sendSkippedBecauseChannelBusy = false;
            NetworkChannel netCh = this.m_netChannel;

            if (this.m_asyncNetWritePending || netCh == null)
            {
                PassiveBlockMode.Tracer.TraceError((long)this.GetHashCode(), "SendStatusMessageToActive skipped because channel is busy");
                sendSkippedBecauseChannelBusy = true;
                return;
            }
            ReplayState replayState        = this.Configuration.ReplayState;
            long        highestCompleteGen = replayState.CopyNotificationGenerationNumber;

            byte[] statusMsgBuf = PassiveStatusMsg.SerializeToBytes(statusFlags, requestAckCounter, (uint)highestCompleteGen, (uint)replayState.CopyGenerationNumber, (uint)replayState.InspectorGenerationNumber, (uint)replayState.ReplayGenerationNumber, this.m_isCrossSite);
            bool   writeStarted = false;

            try
            {
                Exception ex = NetworkChannel.RunNetworkFunction(delegate
                {
                    ExTraceGlobals.FaultInjectionTracer.TraceTest(PassiveBlockMode.ackMessageSendFailed);
                    PassiveBlockMode.Tracer.TraceDebug <string, long>((long)this.GetHashCode(), "Sending PassiveStatusMsg({0}) Gen 0x{1:X}", this.DatabaseName, highestCompleteGen);
                    this.m_nextPingDue          = DateTime.UtcNow.AddMilliseconds((double)RegistryParameters.LogShipTimeoutInMsec);
                    this.m_asyncNetWritePending = true;
                    netCh.TcpChannel.Stream.BeginWrite(statusMsgBuf, 0, statusMsgBuf.Length, new AsyncCallback(this.NetWriteCompletion), netCh);
                    writeStarted = true;
                });
                if (ex != null)
                {
                    PassiveBlockMode.Tracer.TraceError <Exception>((long)this.GetHashCode(), "SendStatusMessageToActive Failed to ping Active: {0}", ex);
                    ReplayEventLogConstants.Tuple_NotifyActiveSendFailed.LogEvent(null, new object[]
                    {
                        this.DatabaseName,
                        replayState.ReplayGenerationNumber,
                        replayState.InspectorGenerationNumber,
                        replayState.CopyGenerationNumber,
                        ex.Message
                    });
                    sendException = (ex as NetworkTransportException);
                    if (sendException == null)
                    {
                        sendException = new NetworkCommunicationException(netCh.PartnerNodeName, ex.Message, ex);
                    }
                }
            }
            finally
            {
                if (!writeStarted)
                {
                    this.m_asyncNetWritePending = false;
                }
            }
        }