public SOEReader(SOEMessage message) { Stream = new MemoryStream(message.GetRaw()); // Skip the message OpCode ReadHostInt16(); }
public SOEWriter(SOEMessage message) { // Message information Data = new List <byte>(message.GetRaw()); OpCode = message.GetOpCode(); // We're a message! IsMessage = true; }
public void AddMessage(SOEMessage message) { if (IsMessage) { // Handle multi messages if (OpCode == (ushort)SOEOPCodes.MULTI_MESSAGE) { if (message.GetOpCode() == (ushort)SOEOPCodes.MULTI_MESSAGE) { // Setup a reader SOEReader reader = new SOEReader(message); // Get the messages and add them byte[] messages = reader.ReadToEnd(); AddBytes(messages); } else { // Get the size of the message int size = message.GetLength(); // Is the size bigger than 255? if (size > 0xFF) { // Do the stupid >255 thing AddByte(0xFF); size -= 0xFF; // Get how many bytes to add byte toAdd = (byte)((size / 0xFF) + (size % 0xFF) & 0xFF); AddByte(toAdd); // Add sizes until we're at a value of 0 while (size > 0) { // Do we not want to add 0xFF? if (size < 0xFF) { // Add the rest of the size AddByte((byte)size); size = 0; } else { // Add 0xFF AddByte(0xFF); size -= 0xFF; } } } else { // Just do the regular size adding AddByte((byte)(size & 0xFF)); } // Add the actual message AddBytes(message.GetRaw()); } } } else { // Just add the message AddBytes(message.GetRaw()); } }