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); }
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()); }