Example #1
0
        public Reply ProcessReply()
        {
            if (Packet == null || Packet.Length == 0)
            {
                return(null);
            }

            if (Packet[0] != MagicByte || Packet[1] != MagicByte)
            {
                return(null);
            }

            byte[] tmpSize = GlobalFunction.SplitByteArray(Packet, 2, 2);
            if (GlobalFunction.BE2ToDec(tmpSize) != Packet.Length)
            {
                return(null);
            }

            byte[] tmpType = GlobalFunction.SplitByteArray(Packet, 4, 3);
            if (GlobalFunction.BE3ToDec(tmpType) != (decimal)MessageType.Type.REPLY)
            {
                return(null);
            }

            byte[] tmpID = GlobalFunction.SplitByteArray(Packet, 8, 8);
            if (GlobalFunction.BE8ToDec(tmpID) != PacketID)
            {
                return(null);
            }

            var dataReply = GlobalFunction.SplitByteArray(Packet, 16, Packet.Length - 16);
            var reply     = Serializer.Deserialize <Reply>(new MemoryStream(dataReply));

            return(reply);
        }
Example #2
0
        public byte[] ReceiveReply()
        {
            var buffer = new byte[BufferLength];
            var packet = new List <byte>();

            try
            {
                var ret = Connection.Receive(buffer);
#if DEBUG
                //logger.Info(ret);
#endif
                if (ret == 0)
                {
                    return(null);
                }
                var receive = GlobalFunction.SplitByteArray(buffer, 0, ret);
                packet.AddRange(receive);
                //Console.WriteLine("Receive {0:d} bytes", ret);

                while (ret < 4)
                {
                    //if (Connection.Available == 0) break;
                    var ret_ = Connection.Receive(buffer);
#if DEBUG
                    logger.Info(ret_);
#endif
                    if (ret_ == 0)
                    {
                        break;
                    }
                    ret += ret_;
                    var receive_ = GlobalFunction.SplitByteArray(buffer, 0, ret_);
                    packet.AddRange(receive_);
                }

                var tmpSize = GlobalFunction.SplitByteArray(buffer, 2, 2);
                var size    = GlobalFunction.BE2ToDec(tmpSize);

                while (ret < size)
                {
                    //Console.WriteLine("need receive more {0:d} bytes.", size - ret);
                    //if (Connection.Available == 0) break;
                    var ret_ = Connection.Receive(buffer);
#if DEBUG
                    logger.Info(ret_);
#endif
                    if (ret_ == 0)
                    {
                        break;
                    }
                    ret += ret_;
                    var receive_ = GlobalFunction.SplitByteArray(buffer, 0, ret_);
                    packet.AddRange(receive_);
                }
            }
            catch (SocketException se)
            {
                if (se.SocketErrorCode == SocketError.TimedOut)
                {
#if DEBUG
                    logger.Error(se.Message);
#endif
                    DebugHelper.WriteLine("Receive timed out!");
                    return(null);
                }
            }
            return(packet.ToArray());
        }