internal StompClient( IStompFrameReader reader, IStompFrameWriter writer, TimeSpan? retryInterval = null, bool cascadeDispose = false, bool useRandomNumberGenerator = false) { if(reader.ProtocolVersion != writer.ProtocolVersion) throw new ArgumentException("Reader and writer MUST use the same protocol version."); _cascadeDispose = cascadeDispose; _reader = reader; _writer = writer; _frameObservable = new StompFrameObservable(reader); _frameWriter = new StompFrameWriterWithConfirmation(writer, _frameObservable, retryInterval); if (!useRandomNumberGenerator) { _receiptNumberGenerator = new SequenceNumberGenerator(); _subscriptionNumberGenerator = new SequenceNumberGenerator(); _transactionNumberGenerator = new SequenceNumberGenerator(); } else { _receiptNumberGenerator = new RandomSequenceNumberGenerator(); _subscriptionNumberGenerator = _receiptNumberGenerator; _transactionNumberGenerator = _receiptNumberGenerator; } }
internal StompClient( IStompFrameReader reader, IStompFrameWriter writer, TimeSpan?retryInterval = null, bool cascadeDispose = false, bool useRandomNumberGenerator = false) { if (reader.ProtocolVersion != writer.ProtocolVersion) { throw new ArgumentException("Reader and writer MUST use the same protocol version."); } _cascadeDispose = cascadeDispose; _reader = reader; _writer = writer; _frameObservable = new StompFrameObservable(reader); _frameWriter = new StompFrameWriterWithConfirmation(writer, _frameObservable, retryInterval); if (!useRandomNumberGenerator) { _receiptNumberGenerator = new SequenceNumberGenerator(); _subscriptionNumberGenerator = new SequenceNumberGenerator(); _transactionNumberGenerator = new SequenceNumberGenerator(); } else { _receiptNumberGenerator = new RandomSequenceNumberGenerator(); _subscriptionNumberGenerator = _receiptNumberGenerator; _transactionNumberGenerator = _receiptNumberGenerator; } }
/// <summary> /// Create an observer to <paramref name="frameObservable"/> /// </summary> /// <param name="client"></param> /// <param name="frameObservable"></param> public StompHeartbeatManager(IStompClient client, IStompFrameObservable frameObservable) { this.client = client; this.frameObservable = frameObservable; if (this.frameObservable == null) { throw new ArgumentNullException("frameObservable"); } this.frameObservable.SubscribeEx(this.OnNext); }
/// <summary> /// Constructor. /// </summary> /// <param name="writer">Frame writer.</param> /// <param name="frameObservable">Frame observable to be used to receive the confirmations.</param> /// <param name="retryInterval">When sending messages that requires receipt confirmation, /// this interval specifies how much time to wait before sending the frame again if /// no receipt is received.</param> public StompFrameWriterWithConfirmation(IStompFrameWriter writer, IStompFrameObservable frameObservable, TimeSpan? retryInterval = null) { if (writer == null) throw new ArgumentNullException("writer"); if (frameObservable == null) throw new ArgumentNullException("frameObservable"); if (frameObservable.ProtocolVersion != writer.ProtocolVersion) throw new ArgumentException("Reader and writer MUST use the same protocol version."); _writer = _writer as StompSerialFrameWriter ?? new StompSerialFrameWriter(writer); frameObservable.SubscribeEx(OnNext, OnError, OnCompleted); _receiptWaiters = new ConcurrentDictionary<string, TaskCompletionSource<object>>(); _retryInterval = retryInterval ?? DefRetryInterval; }
/// <summary> /// Constructor. /// </summary> /// <param name="writer">Frame writer.</param> /// <param name="frameObservable">Frame observable to be used to receive the confirmations.</param> /// <param name="retryInterval">When sending messages that requires receipt confirmation, /// this interval specifies how much time to wait before sending the frame again if /// no receipt is received.</param> public StompFrameWriterWithConfirmation(IStompFrameWriter writer, IStompFrameObservable frameObservable, TimeSpan?retryInterval = null) { if (writer == null) { throw new ArgumentNullException("writer"); } if (frameObservable == null) { throw new ArgumentNullException("frameObservable"); } if (frameObservable.ProtocolVersion != writer.ProtocolVersion) { throw new ArgumentException("Reader and writer MUST use the same protocol version."); } _writer = _writer as StompSerialFrameWriter ?? new StompSerialFrameWriter(writer); frameObservable.SubscribeEx(OnNext, OnError, OnCompleted); _receiptWaiters = new ConcurrentDictionary <string, TaskCompletionSource <object> >(); _retryInterval = retryInterval ?? DefRetryInterval; }
/// <summary> /// Start processing incoming frames. /// </summary> public static void Start(this IStompFrameObservable stompFrameObservable) { stompFrameObservable.Start(CancellationToken.None); }