private ReceivedData ReceiveData() { #region Working with the stream #if DEBUG Console.WriteLine("Waiting for next packet..."); #endif byte[] packetSize = new byte[DataIDs.PACKET_TOTAL_HEADER_SIZE_COMPLEXITY]; byte[] packetID = new byte[DataIDs.PACKET_ID_COMPLEXITY]; byte[] fromClient = new byte[DataIDs.CLIENT_IDENTIFICATION_COMPLEXITY]; Int64 totalReceived = 0; while (totalReceived < packetSize.Length && ListeningForData) { totalReceived += mainNetworkStream.Read(packetSize, 0, packetSize.Length); if (totalReceived == 0) { return(new ReceivedData(typeof(SocketException), 0, 0, 0)); } } totalReceived = 0; Int64 toReceive = BitConverter.ToInt64(packetSize, 0); while (totalReceived < DataIDs.PACKET_ID_COMPLEXITY) { totalReceived += mainNetworkStream.Read(packetID, 0, DataIDs.PACKET_ID_COMPLEXITY); } totalReceived = 0; while (totalReceived < DataIDs.CLIENT_IDENTIFICATION_COMPLEXITY && ListeningForData) { totalReceived += mainNetworkStream.Read(fromClient, 0, DataIDs.CLIENT_IDENTIFICATION_COMPLEXITY); } #if DEBUG Console.WriteLine("Waiting for Data 0/" + toReceive + " bytes"); #endif byte[] data = new byte[toReceive]; totalReceived = 0; while (totalReceived < toReceive && ListeningForData) { totalReceived += mainNetworkStream.Read(data, (int)totalReceived, (int)(toReceive - totalReceived)); #if DEBUG Console.WriteLine("Waiting for Data " + totalReceived + "/" + toReceive + " bytes"); #endif } #endregion byte senderID = fromClient[0]; byte packetIDSingle = packetID[0]; Type dataType = dataIDs.IdentifyID(packetIDSingle, senderID, data); object dataObject; if (packetIDSingle == DataIDs.STRING_ID) { dataObject = Encoding.UTF8.GetString(data); } else if (packetIDSingle == DataIDs.INT64_ID) { dataObject = BitConverter.ToInt64(data, 0); } else if (dataType == typeof(TCPResponse)) { TCPResponse resp; dataObject = resp = new TCPResponse(data[0], new byte[data.Length - 1], ResponseGenerator.GetResponseType(data[0]), serializationConfig); Array.Copy(data, 1, resp.RawData, 0, resp.RawData.Length); } else if (dataType == typeof(TCPRequest)) { dataObject = data[0]; } else if (dataType == typeof(OnPropertySynchronizationEventArgs) || dataType == typeof(UndefinedPacketEventArgs)) { dataObject = data; } else if (dataType == typeof(TCPClientInfo)) { dataObject = SimpleTCPHelper.GetObject(dataType, data, serializationConfig); } else { dataObject = SimpleTCPHelper.GetObject(dataIDs.customIDs[packetIDSingle].DataType, data, serializationConfig); } return(new ReceivedData(dataType, senderID, packetIDSingle, dataObject)); }
public NoResponseException(TCPResponse response) : base(Encoding.ASCII.GetString(response.RawData)) { }