public void OnNetworkReceive(long peerId, byte[] data) { var readBuffer = data; var offset = 0; readBuffer = ApplyRemainedBuffer(readBuffer); var bufferLength = readBuffer.Length; do { var headerStream = new CodedInputStream(readBuffer, offset, NetUtil.HeaderSize); var header = headerStream.ReadSFixed32(); NetUtil.DeserializeHeader(header, out ushort size, out ushort code); if (readBuffer.Length < NetUtil.HeaderSize + size) { //Log.Warn(this, // $"Received buffer is smaller than header size. buffer_length: {readBuffer.Length}, sizeInHeader: {size}, offset: {offset}, code: {code}"); break; } offset += NetUtil.HeaderSize; var bodyStream = new CodedInputStream(readBuffer, offset, size); OnReceived?.Invoke(peerId, code, bodyStream); offset += size; } while (offset + NetUtil.HeaderSize < bufferLength); if (offset < readBuffer.Length) { SaveRemainedBuffer(readBuffer, offset, readBuffer.Length - offset); } }
public void OnNetworkReceive(NetConnection conn, byte[] data) { var readBuffer = data; var bufferLength = readBuffer.Length; var offset = 0; do { var headerStream = new CodedInputStream(readBuffer, offset, NetUtil.HeaderSize); var header = headerStream.ReadSFixed32(); NetUtil.DeserializeHeader(header, out ushort size, out ushort code); offset += NetUtil.HeaderSize; var bodyStream = new CodedInputStream(readBuffer, offset, size); OnReceived?.Invoke(conn.RemoteUniqueIdentifier, code, bodyStream); offset += size; } while (offset + NetUtil.HeaderSize < bufferLength); }