/// <summary>Prepares received data to be used by the appropriate packet handler methods.</summary> /// <param name="data">The recieved data.</param> private bool HandleData(byte[] data) { int packetLength = 0; receivedData.SetBytes(data); if (receivedData.UnreadLength() >= 4) { // If client's received data contains a packet packetLength = receivedData.ReadInt(); if (packetLength <= 0) { // If packet contains no data return(true); // Reset receivedData instance to allow it to be reused } } while (packetLength > 0 && packetLength <= receivedData.UnreadLength()) { // While packet contains data AND packet data length doesn't exceed the length of the packet we're reading byte[] packetBytes = receivedData.ReadBytes(packetLength); ThreadManager.ExecuteOnMainThread(() => { using (Packet packet = new Packet(packetBytes)) { int packetId = packet.ReadInt(); Server.packetHandlers[packetId](id, packet); // Call appropriate method to handle the packet } }); packetLength = 0; // Reset packet length if (receivedData.UnreadLength() >= 4) { // If client's received data contains another packet packetLength = receivedData.ReadInt(); if (packetLength <= 0) { // If packet contains no data return(true); // Reset receivedData instance to allow it to be reused } } } if (packetLength <= 1) { return(true); // Reset receivedData instance to allow it to be reused } return(false); }
private bool HandleData(byte[] data) { int packetLength = 0; receivedData.SetBytes(data); if (receivedData.UnreadLength() >= 4) { packetLength = receivedData.ReadInt(); if (packetLength <= 0) { return(true); } } while (packetLength > 0 && packetLength <= receivedData.UnreadLength()) { byte[] packetBytes = receivedData.ReadBytes(packetLength); ThreadManager.ExecuteOnMainThread(() => { using (Packet packet = new Packet(packetBytes)) { int packetId = packet.ReadInt(); instance.packetHandlers[packetId](packet); } }); packetLength = 0; if (receivedData.UnreadLength() >= 4) { packetLength = receivedData.ReadInt(); if (packetLength <= 0) { return(true); } } } if (packetLength <= 1) { return(true); } return(false); }