Пример #1
0
        /// <summary>
        /// Builds the data frame.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="data">The data.</param>
        /// <param name="final">if set to <c>true</c> than this frame is final for the stream.</param>
        /// <returns>returns DataFrame.</returns>
        public DataFrame BuildDataFrame(SMStream stream, SMData data, bool final)
        {
            DataFrame frame = BuildDataFrame(stream.StreamId, data);

            frame.IsFinal = final;
            return(frame);
        }
Пример #2
0
        /// <summary>
        /// Builds the data frame.
        /// </summary>
        /// <param name="streamId">The stream id.</param>
        /// <param name="data">The data.</param>
        /// <returns>Returns DataFrame.</returns>
        public DataFrame BuildDataFrame(int streamId, SMData data)
        {
            DataFrame frame = new DataFrame {
                Data = data.Data, StreamId = streamId, Length = data.Data.Length
            };

            return(frame);
        }
Пример #3
0
        /// <summary>
        /// Sends the data to the stream.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="isFin">if set to <c>true</c> than this stream will be half-closed.</param>
        public void SendData(SMData data, bool isFin)
        {
            SMData dataFrame;

            if (Session.IsFlowControlEnabled)
            {
                Session.CurrentCreditBalanceToServer -= data.Data.Length;
                dataFrame = new SMData(data.Data);
            }
            else
            {
                dataFrame = new SMData(data.Data);
            }

            this.protocol.SendData(this, dataFrame, isFin);
        }
Пример #4
0
        public void SendFrameOnCloseStreamFailure()
        {
            Reset();
            Uri uri;

            Uri.TryCreate(Host + Port, UriKind.Absolute, out uri);
            CreateSession(uri);
            AttachSessionEvents(_session);

            _eventRaisedSession.WaitOne();
            _eventRaisedSession.Reset();
            Check(CheckModes.session);

            string fileName = FileName;
            bool   isFin    = true;

            SMStream stream = DownloadPath(fileName, isFin);

            _eventRaisedStream.WaitOne();
            _eventRaisedStream.Reset();
            Check(CheckModes.stream);
            if ((stream.State == SMStreamState.HalfClosed) ^ isFin)
            {
                Assert.Fail("Incorrect SMStreamState.");
            }
            AttachStreamEvents(stream);

            _eventRaisedStream.Reset();
            _eventRaisedStream.WaitOne();
            Check(CheckModes.fin);
            if ((stream.State == SMStreamState.Closed) ^ isFin)
            {
                Assert.Fail("Incorrect value Stream.State.");
            }

            _isError = false;
            SMData data = new SMData(new byte[] { 12, 3, 23, 35, 3, 11 });

            stream.SendData(data, isFin);
            _eventRaisedSession.WaitOne();
            _eventRaisedSession.Reset();

            Assert.IsTrue(_isError);
        }
 /// <summary>
 /// Sends the data to the stream.
 /// </summary>
 /// <param name="data">The data.</param>
 /// <param name="isFin">if set to <c>true</c> than this stream will be half-closed.</param>
 public void SendData(SMData data, bool isFin)
 {
     this.protocol.SendData(this, data, isFin);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="StreamDataEventArgs"/> class.
 /// </summary>
 /// <param name="stream">The stream.</param>
 /// <param name="data">The data.</param>
 /// <param name="isFin">final flag.</param>
 public StreamDataEventArgs(SMStream stream, SMData data, bool isFin)
     : base(stream)
 {
     this.Data = data;
     this.IsFin = isFin;
 }
 /// <summary>
 /// Builds the data frame.
 /// </summary>
 /// <param name="stream">The stream.</param>
 /// <param name="data">The data.</param>
 /// <returns>Returns DataFrame.</returns>
 public DataFrame BuildDataFrame(SMStream stream, SMData data)
 {
     return this.BuildDataFrame(stream, data, false);
 }
 /// <summary>
 /// Builds the data frame.
 /// </summary>
 /// <param name="streamId">The stream id.</param>
 /// <param name="data">The data.</param>
 /// <returns>Returns DataFrame.</returns>
 public DataFrame BuildDataFrame(int streamId, SMData data)
 {
     DataFrame frame = new DataFrame { Data = data.Data, StreamId = streamId, Length = data.Data.Length };
     return frame;
 }
 /// <summary>
 /// Builds the data frame.
 /// </summary>
 /// <param name="stream">The stream.</param>
 /// <param name="data">The data.</param>
 /// <param name="final">if set to <c>true</c> than this frame is final for the stream.</param>
 /// <returns>returns DataFrame.</returns>
 public DataFrame BuildDataFrame(SMStream stream, SMData data, bool final)
 {
     DataFrame frame = BuildDataFrame(stream.StreamId, data);
     frame.IsFinal = final;
     return frame;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="StreamDataEventArgs"/> class.
 /// </summary>
 /// <param name="stream">The stream.</param>
 /// <param name="data">The data.</param>
 /// <param name="isFin">final flag.</param>
 public StreamDataEventArgs(SMStream stream, SMData data, bool isFin)
     : base(stream)
 {
     this.Data  = data;
     this.IsFin = isFin;
 }
Пример #11
0
        /// <summary>
        /// Sends the data to the stream.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="isFin">if set to <c>true</c> than this stream will be half-closed.</param>
        public void SendData(SMData data, bool isFin)
        {
            SMData dataFrame;
            if (Session.IsFlowControlEnabled)
            {
                Session.CurrentCreditBalanceToServer -=  data.Data.Length;
                dataFrame = new SMData(data.Data);
            }
            else
            {
                dataFrame = new SMData(data.Data);
            }

            this.protocol.SendData(this, dataFrame, isFin);
        }
 /// <summary>
 /// Sends the data.
 /// </summary>
 /// <param name="stream">The stream.</param>
 /// <param name="data">The data.</param>
 /// <param name="isFin">FIN flag.</param>
 public void SendData(SMStream stream, SMData data, bool isFin)
 {
     this.SendFrame(stream, this.builder.BuildDataFrame(stream, data, isFin));
 }
        public void SendFrameOnCloseStreamFailure()
        {
            ManualResetEvent eventRaised = new ManualResetEvent(false);
            Uri uri;
            Uri.TryCreate(Host + Port, UriKind.Absolute, out uri);
            CreateSession(uri);

            bool isError = false;
            string errorMessage = String.Empty;

            bool isOpenSession = false;
            _session.OnOpen += (s, e) =>
                                {
                                    isOpenSession = true;
                                    eventRaised.Set();
                                };
            _session.OnError += (s, e) =>
                                    {
                                        isError = true;
                                        errorMessage = "Internal session error.";
                                        eventRaised.Set();
                                    };
            _session.OnStreamOpened += (s, e) => eventRaised.Set();

            eventRaised.WaitOne();

            if (isError)
                Assert.Fail(errorMessage);
            if (!isOpenSession)
                Assert.Fail("Could not open session.");

            eventRaised.Reset();

            string fileName = FileName;
            bool isReceived = false;
            bool isFin = true;

            SMStream stream = DownloadPath(fileName, isFin);

            eventRaised.WaitOne();
            eventRaised.Reset();
            if ((stream.State == SMStreamState.HalfClosed) ^ isFin)
                Assert.Fail("Incorrect SMStreamState.");

            stream.OnRSTReceived += (s, e) => eventRaised.Set();
            stream.OnDataReceived += (s, e) =>
                                        {
                                            string file = Path.GetFileName(e.Stream.Headers[SMHeaders.Path]);

                                            using (var fs = new FileStream(file, FileMode.Create))
                                            {
                                                fs.Write(e.Data.Data, 0, e.Data.Data.Length);
                                            }

                                            string text = e.Data.AsUtf8Text();
                                            isReceived = !string.IsNullOrEmpty(text);
                                        };

            bool isClose = false;
            stream.OnClose += (s, e) =>
                                {
                                    isClose = true;
                                    eventRaised.Set();
                                };

            _session.OnError += (s, e) =>
                                    {
                                        isError = true;
                                        eventRaised.Set();
                                    };
            eventRaised.Reset();
            eventRaised.WaitOne();

            if (isError)
                Assert.Fail(errorMessage);
            if ((stream.State == SMStreamState.Closed) ^ isFin)
                Assert.Fail("Incorrect value Stream.State.");
            if (!isClose)
                Assert.Fail("Could not close stream.");

            isError = false;
            SMData data = new SMData(new byte[] { 12, 3, 23, 35, 3, 11 });
            eventRaised.Reset();

            stream.SendData(data, isFin);
            eventRaised.WaitOne();

            Assert.IsTrue(isError);
        }
Пример #14
0
 /// <summary>
 /// Builds the data frame.
 /// </summary>
 /// <param name="stream">The stream.</param>
 /// <param name="data">The data.</param>
 /// <returns>Returns DataFrame.</returns>
 public DataFrame BuildDataFrame(SMStream stream, SMData data)
 {
     return(this.BuildDataFrame(stream, data, false));
 }