コード例 #1
0
ファイル: StompClient.cs プロジェクト: krlito/StompNet
        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;
            }
        }
コード例 #2
0
ファイル: StompClient.cs プロジェクト: paulohebr/StompNet
        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;
            }
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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;
        }
コード例 #5
0
        /// <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;
        }
コード例 #6
0
 /// <summary>
 /// Start processing incoming frames.
 /// </summary>
 public static void Start(this IStompFrameObservable stompFrameObservable)
 {
     stompFrameObservable.Start(CancellationToken.None);
 }