示例#1
0
        private void ProcessNewData(int receive, SocketBuffer buffer)
        {
            buffer.outBuffer.AddRange(buffer.socketBuffer.Take(receive));

            do
            {
                EnvelopeRead(buffer);

                if (buffer.outBuffer.Count >= buffer.messageLength)
                {
                    var msg = buffer.outBuffer.GetRange(0, buffer.messageLength).ToArray();
                    buffer.outBuffer.RemoveRange(0, buffer.messageLength);

                    OnMessageReceived(msg, buffer.messageKind);

                    buffer.messageKind   = MessageKind.Unknown;
                    buffer.messageLength = buffer.outBuffer.Count >= Const.TotalSizeOfEnvelope ? 0 : int.MaxValue;
                }
            } while (buffer.outBuffer.Count >= buffer.messageLength);
        }
示例#2
0
 private void BeginReceive()
 {
     using (mreBeginReceive = new ManualResetEvent(false))
         using (var buffer = new SocketBuffer())
         {
             try
             {
                 while (!closed)
                 {
                     mreBeginReceive.Reset();
                     socket.BeginReceive(buffer.socketBuffer, 0, Const.BufferSize, SocketFlags.None, EndReceive, buffer);
                     mreInit.SetIfNotNull();
                     mreBeginReceive.WaitOne();
                     mreIsConnected.WaitOne();
                 }
             }
             catch (Exception e)
             {
                 this.HandleError(e);
             }
         }
 }
示例#3
0
        private void EnvelopeRead(SocketBuffer buffer)
        {
            if (buffer.messageKind == MessageKind.Unknown && buffer.outBuffer.Count >= Const.TotalSizeOfEnvelope)
            {
                buffer.messageKind = (MessageKind)buffer.outBuffer[0];

                if (!Enum.IsDefined(typeof(MessageKind), buffer.messageKind))
                {
                    buffer.messageKind = MessageKind.Unknown;
                    throw new FormatException("Doesn't understand the envelope!");
                }

                byte[] length = buffer.outBuffer.GetRange(Const.SizeOfEnvelopeKind, Const.SizeOfEnvelopeLength).ToArray();

                buffer.messageLength = length.ToInt();

                if (buffer.messageLength > ushort.MaxValue || buffer.messageLength < 0)
                {
                    throw new ArgumentOutOfRangeException();
                }

                buffer.outBuffer.RemoveRange(0, Const.TotalSizeOfEnvelope);
            }
        }
示例#4
0
		private void EnvelopeRead(SocketBuffer buffer)
		{
			if (buffer.messageKind == MessageKind.Unknown && buffer.outBuffer.Count >= Const.TotalSizeOfEnvelope)
			{
				buffer.messageKind = (MessageKind)buffer.outBuffer[0];

				if (!Enum.IsDefined(typeof(MessageKind), buffer.messageKind))
				{
					buffer.messageKind = MessageKind.Unknown;
					throw new FormatException("Doesn't understand the envelope!");
				}

				byte[] length = buffer.outBuffer.GetRange(Const.SizeOfEnvelopeKind, Const.SizeOfEnvelopeLength).ToArray();

				buffer.messageLength = length.ToInt();

				if (buffer.messageLength > ushort.MaxValue || buffer.messageLength < 0)
				{
					throw new ArgumentOutOfRangeException();
				}

				buffer.outBuffer.RemoveRange(0, Const.TotalSizeOfEnvelope);
			}
		}
示例#5
0
		private void ProcessNewData(int receive, SocketBuffer buffer)
		{
			buffer.outBuffer.AddRange(buffer.socketBuffer.Take(receive));

			do
			{
				EnvelopeRead(buffer);

				if (buffer.outBuffer.Count >= buffer.messageLength)
				{
					var msg = buffer.outBuffer.GetRange(0, buffer.messageLength).ToArray();
					buffer.outBuffer.RemoveRange(0, buffer.messageLength);

					OnMessageReceived(msg, buffer.messageKind);

					buffer.messageKind = MessageKind.Unknown;
					buffer.messageLength = buffer.outBuffer.Count >= Const.TotalSizeOfEnvelope ? 0 : int.MaxValue;
				}
			} while (buffer.outBuffer.Count >= buffer.messageLength);
		}
示例#6
0
		private void BeginReceive()
		{
			using (mreBeginReceive = new ManualResetEvent(false))
			using (var buffer = new SocketBuffer())
			{
				try
				{
					while (!closed)
					{
						mreBeginReceive.Reset();
						socket.BeginReceive(buffer.socketBuffer, 0, Const.BufferSize, SocketFlags.None, EndReceive, buffer);
						mreInit.SetIfNotNull();
						mreBeginReceive.WaitOne();
						mreIsConnected.WaitOne();
					}
				}
				catch (Exception e)
				{
					this.HandleError(e);
				}
			}
		}