public void InjectMessage(ReceivedTransportMessage message, bool forceMessage = false) { var sequence = _ringBuffer.Next(); var entry = _ringBuffer[sequence]; entry.InitialTransportMessage = message; entry.ForceMessageThrough = forceMessage; entry.QueuedInboundEntries = null; entry.IsInfrastructureMessage = false; entry.IsStrandardMessage = false; entry.IsCommand = false; entry.Command = null; _ringBuffer.Publish(sequence); }
public bool IsSequenceNumberValid(ReceivedTransportMessage data, bool syncProcessorInitialized) { var transportMessageSequenceNumber = data.SequenceNumber; if (!transportMessageSequenceNumber.HasValue) return true; var peerKey = new PeerTransportKey(data.PeerId, data.Endpoint); int currentSeqNum; if (!_sequenceNumber.TryGetValue(peerKey, out currentSeqNum)) { _sequenceNumber.Add(peerKey, -1); currentSeqNum = -1; } if (syncProcessorInitialized) { if (_peerConfiguration.PeerId != peerKey.Peer) { if (transportMessageSequenceNumber != (currentSeqNum + 1)) { _logger.Info(string.Format("missed message from endpoint {3} from peer {0} from sequence number {1} to {2}", peerKey.Peer, currentSeqNum + 1, transportMessageSequenceNumber, peerKey.Endpoint)); #if DEBUG Debugger.Break(); //we missed a message #endif return false; } _sequenceNumber[peerKey] = transportMessageSequenceNumber.Value; } } else { _sequenceNumber[peerKey] = transportMessageSequenceNumber.Value; } return true; }
public ProcessMessageCommand(ReceivedTransportMessage messagesToProcess) { MessagesToProcess = messagesToProcess; }