internal override StreamBuffer SerializeOperationToMessage(byte opCode, Dictionary <byte, object> parameters, EgMessageType messageType, bool encrypt) { StreamBuffer streamBuffer = PeerBase.MessageBufferPoolGet(); streamBuffer.SetLength(0L); if (!encrypt) { streamBuffer.Write(this.messageHeader, 0, this.messageHeader.Length); } base.SerializationProtocol.SerializeOperationRequest(streamBuffer, opCode, parameters, false); if (encrypt) { byte[] array = base.CryptoProvider.Encrypt(streamBuffer.GetBuffer(), 0, streamBuffer.IntLength); streamBuffer.SetLength(0L); streamBuffer.Write(this.messageHeader, 0, this.messageHeader.Length); streamBuffer.Write(array, 0, array.Length); } byte[] buffer = streamBuffer.GetBuffer(); if (messageType != EgMessageType.Operation) { buffer[this.messageHeader.Length - 1] = (byte)messageType; } if (encrypt) { buffer[this.messageHeader.Length - 1] = (byte)(buffer[this.messageHeader.Length - 1] | 0x80); } if (this.DoFraming) { int num = 1; Protocol.Serialize(streamBuffer.IntLength, buffer, ref num); } return(streamBuffer); }
internal StreamBuffer SerializeMessageToMessage(object message, bool encrypt, byte[] messageHeader, bool writeLength = true) { StreamBuffer streamBuffer = PeerBase.MessageBufferPoolGet(); streamBuffer.SetLength(0L); if (!encrypt) { streamBuffer.Write(messageHeader, 0, messageHeader.Length); } if (message is byte[]) { byte[] array = message as byte[]; streamBuffer.Write(array, 0, array.Length); } else { this.SerializationProtocol.SerializeMessage(streamBuffer, message); } if (encrypt) { byte[] array2 = this.CryptoProvider.Encrypt(streamBuffer.GetBuffer(), 0, streamBuffer.IntLength); streamBuffer.SetLength(0L); streamBuffer.Write(messageHeader, 0, messageHeader.Length); streamBuffer.Write(array2, 0, array2.Length); } byte[] buffer = streamBuffer.GetBuffer(); buffer[messageHeader.Length - 1] = (byte)((message is byte[]) ? 9 : 8); if (encrypt) { buffer[messageHeader.Length - 1] = (byte)(buffer[messageHeader.Length - 1] | 0x80); } if (writeLength) { int num = 1; Protocol.Serialize(streamBuffer.IntLength, buffer, ref num); } return(streamBuffer); }
internal NCommand(EnetPeer peer, byte[] inBuff, ref int readingOffset) { this.commandType = inBuff[readingOffset++]; this.commandChannelID = inBuff[readingOffset++]; this.commandFlags = inBuff[readingOffset++]; this.reservedByte = inBuff[readingOffset++]; Protocol.Deserialize(out this.Size, inBuff, ref readingOffset); Protocol.Deserialize(out this.reliableSequenceNumber, inBuff, ref readingOffset); peer.bytesIn += this.Size; int num = 0; switch (this.commandType) { case 1: case 16: Protocol.Deserialize(out this.ackReceivedReliableSequenceNumber, inBuff, ref readingOffset); Protocol.Deserialize(out this.ackReceivedSentTime, inBuff, ref readingOffset); break; case 6: case 14: num = this.Size - 12; break; case 7: Protocol.Deserialize(out this.unreliableSequenceNumber, inBuff, ref readingOffset); num = this.Size - 16; break; case 11: Protocol.Deserialize(out this.unsequencedGroupNumber, inBuff, ref readingOffset); num = this.Size - 16; break; case 8: case 15: Protocol.Deserialize(out this.startSequenceNumber, inBuff, ref readingOffset); Protocol.Deserialize(out this.fragmentCount, inBuff, ref readingOffset); Protocol.Deserialize(out this.fragmentNumber, inBuff, ref readingOffset); Protocol.Deserialize(out this.totalLength, inBuff, ref readingOffset); Protocol.Deserialize(out this.fragmentOffset, inBuff, ref readingOffset); num = this.Size - 32; this.fragmentsRemaining = this.fragmentCount; break; case 3: { short peerID = default(short); Protocol.Deserialize(out peerID, inBuff, ref readingOffset); readingOffset += 30; if (peer.peerID == -1 || peer.peerID == -2) { peer.peerID = peerID; } break; } } if (num != 0) { StreamBuffer streamBuffer = PeerBase.MessageBufferPoolGet(); streamBuffer.Write(inBuff, readingOffset, num); this.Payload = streamBuffer; this.Payload.IntPosition = 0; readingOffset += num; } }