Beispiel #1
0
        private bool ReadMessage(List<IScsMessage> messages)
        {
            Stream.Position = 0;

            if (Stream.Length < 4)
                return false;

            byte[] headerBytes = new byte[4];
            Stream.Read(headerBytes, 0, 4);

            int length = BitConverter.ToUInt16(headerBytes, 0);

            if (Stream.Length < length)
                return false;

            InnerNetworkMessage message = new InnerNetworkMessage
            {
                OpCode = BitConverter.ToInt16(headerBytes, 2),
                Data = new byte[length - 4]
            };

            Stream.Read(message.Data, 0, message.Data.Length);

            messages.Add(message);

            TrimStream();

            return true;
        }
Beispiel #2
0
        private bool ReadMessage(List <IScsMessage> messages)
        {
            Stream.Position = 0;

            if (Stream.Length < 4)
            {
                return(false);
            }

            byte[] headerBytes = new byte[4];
            Stream.Read(headerBytes, 0, 4);

            int length = BitConverter.ToUInt16(headerBytes, 0);

            if (Stream.Length < length)
            {
                return(false);
            }

            InnerNetworkMessage message = new InnerNetworkMessage
            {
                OpCode = BitConverter.ToInt16(headerBytes, 2),
                Data   = new byte[length - 4]
            };

            Stream.Read(message.Data, 0, message.Data.Length);

            messages.Add(message);

            TrimStream();

            return(true);
        }
Beispiel #3
0
        private bool Send()
        {
            InnerNetworkMessage message;

            if (SendLock == null)
            {
                return(false);
            }

            lock (SendLock)
            {
                if (SendData.Count == 0)
                {
                    return(InnerClient.CommunicationState == CommunicationStates.Connected);
                }

                message = new InnerNetworkMessage {
                    Data = new byte[SendDataSize]
                };

                int pointer = 0;
                for (int i = 0; i < SendData.Count; i++)
                {
                    Array.Copy(SendData[i], 0, message.Data, pointer, SendData[i].Length);
                    pointer += SendData[i].Length;
                }

                SendData.Clear();
                SendDataSize = 0;
            }

            try
            {
                InnerClient.SendMessage(message);
            }
            catch
            {
                //Already closed
                return(false);
            }

            return(true);
        }
Beispiel #4
0
        private bool Send()
        {
            InnerNetworkMessage message;

            if (SendLock == null)
                return false;

            lock (SendLock)
            {
                if (SendData.Count == 0)
                    return InnerClient.CommunicationState == CommunicationStates.Connected;

                message = new InnerNetworkMessage { Data = new byte[SendDataSize] };

                int pointer = 0;
                for (int i = 0; i < SendData.Count; i++)
                {
                    Array.Copy(SendData[i], 0, message.Data, pointer, SendData[i].Length);
                    pointer += SendData[i].Length;
                }

                SendData.Clear();
                SendDataSize = 0;
            }

            try
            {
                InnerClient.SendMessage(message);
            }
            catch
            {
                //Already closed
                return false;
            }

            return true;
        }