public SOEMessage GetFinalSOEMessage(SOEClient client) { // Are we a packet? if (!IsMessage) { // Yes, and there really isn't a nice way to deal with this.. client.Server.Log("[ERROR] Tried Calling 'GetFinalSOEMessage' on written SOEPacket. Returning null."); // Welp, goodbye world! :'( return(null); } // Make our message SOEMessage message = new SOEMessage(OpCode, GetRaw()); // Does this message have to be fragmented? if (Data.Count > client.GetBufferSize()) { // Setup a reader and keep track of our size SOEReader reader = new SOEReader(GetRaw()); int size = message.GetLength(); // While there are fragments to be added.. while (size > 0) { // Store the next fragment byte[] raw; // Is this fragment going to be smaller than the buffer size? if (size < client.GetBufferSize()) { raw = reader.ReadBytes(size); size = 0; } else { raw = reader.ReadBytes((int)client.GetBufferSize()); size -= (int)client.GetBufferSize(); } // Add the finalized fragment message.AddFragment(raw); } } // Return the message we made return(message); }
public void HandleMultiData(SOEClient sender, SOEMessage message) { // Setup a reader and skip the OpCode SOEReader reader = new SOEReader(message); int offset = 2; // Get the data length int dataLength = message.GetLength(); // Get the packets while (offset < dataLength) { // Message size int MessageSize = reader.ReadByte(); byte extendedMessageAmount = 0; // If the first byte is 0xFF then: // Read how many bytes to add, and then add that many if (MessageSize == 0xFF) { // How many bytes are there? extendedMessageAmount = reader.ReadByte(); // Add that many bytes for (int i = 0; i < extendedMessageAmount; i++) { MessageSize += reader.ReadByte(); } extendedMessageAmount++; } // Read the Message data from the size byte[] data = reader.ReadBytes(MessageSize); // Handle the Message sender.ReceiveMessage(data); // Move along offset += MessageSize + extendedMessageAmount + 1; } }
public SOEMessage GetFinalSOEMessage(SOEClient client) { // Are we a packet? if (!IsMessage) { // Yes, and there really isn't a nice way to deal with this.. client.Server.Log("[ERROR] Tried Calling 'GetFinalSOEMessage' on written SOEPacket. Returning null."); // Welp, goodbye world! :'( return null; } // Make our message SOEMessage message = new SOEMessage(OpCode, GetRaw()); // Does this message have to be fragmented? if (Data.Count > client.GetBufferSize()) { // Setup a reader and keep track of our size SOEReader reader = new SOEReader(GetRaw()); int size = message.GetLength(); // While there are fragments to be added.. while (size > 0) { // Store the next fragment byte[] raw; // Is this fragment going to be smaller than the buffer size? if (size < client.GetBufferSize()) { raw = reader.ReadBytes(size); size = 0; } else { raw = reader.ReadBytes((int)client.GetBufferSize()); size -= (int)client.GetBufferSize(); } // Add the finalized fragment message.AddFragment(raw); } } // Return the message we made return message; }