Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 public NoResponseException(TCPResponse response) : base(Encoding.ASCII.GetString(response.RawData))
 {
 }