private void OnReceive(BufferData data) { do { inboundData.ShiftProcessedData(); inboundData.Append(data); var sizeAvailable = inboundData.RemainingLength; if (sizeAvailable == 0) { break; } var sizeNeeded = ReadExpectedSize(inboundData); if (sizeNeeded > sizeAvailable) { // Likely a fragmented packet //Logger.WriteLog(LogType.Network, "===== Fragmented packet ====="); break; } //Logger.WriteLog(LogType.Network, "[N] > needed : {0} available : {1}", sizeNeeded, sizeAvailable); if (!DecodePacket(inboundData, out ushort subsize)) { break; } }while (true); if (data.RemainingLength > 0) { throw new Exception("Did not read all of data from socket, processing will be corrupted!"); } }