/// <summary> /// /// </summary> /// <param name="e"></param> protected void OnProcessMessage(MessageBufferEventArgs e) { if (MessageAvailable != null) { MessageAvailable(this, e); } }
/// <summary> /// Handle a message from the messagebuffer /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void OnRecvReaderProcessMessage(object sender, MessageBufferEventArgs e) { if (e.Length > MessageHeader.Tcp.HEADERLENGTH) { // save encoded type byte encodedType = e.MessageBuffer[MessageHeader.Tcp.HEADERLENGTH]; // decode type e.MessageBuffer[MessageHeader.Tcp.HEADERLENGTH] = PIDecoder.Decode(encodedType); try { // mark as incoming message e.Direction = MessageDirection.ServerToClient; // parse the message to a typed instance GameMessage typedMessage = ExtractMessage(e); // set encoded pi and memoryaddres typedMessage.EncryptedPI = encodedType; typedMessage.Header.MemoryStartAddress = e.MemoryAddress; // examine serversave value CheckServerSave(typedMessage); // trigger event for this new message OnNewMessageAvailable(new GameMessageEventArgs(typedMessage)); } catch (Exception Error) { byte[] dump = new byte[e.Length]; Array.Copy(e.MessageBuffer, 0, dump, 0, e.Length); OnHandlerError(new HandlerErrorEventArgs(dump, Error.Message)); } } else { OnEmptyPacketFound(new EmptyMessageFoundEventArgs()); } }
/// <summary> /// Handle a message from the recv messagebuffer /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void OnSendReaderProcessMessage(object sender, MessageBufferEventArgs e) { if (e.Length > GameMessage.HEADERLENGTH) { try { // set the direction as outgoing e.Direction = MessageDirection.ClientToServer; // parse the message GameMessage typedMessage = ExtractMessage(e); typedMessage.EncryptedPI = typedMessage.PI; typedMessage.MemoryStartAddress = e.MemoryAddress; CheckServerSave(typedMessage); // Advance the hashtable if encryption is enabled (3. TX packet) and if it's not a blacklisted packet if (CRCCreatorEnabled && advanceHashTable && ((MessageTypeGameMode)typedMessage.PI != MessageTypeGameMode.Blacklisted)) { CRCCreator.AdvanceHashTable(); } OnNewMessageAvailable(new GameMessageEventArgs(typedMessage)); } catch (Exception Error) { byte[] dump = new byte[e.Length]; Array.Copy(e.MessageBuffer, 0, dump, 0, e.Length); OnHandlerError(new HandlerErrorEventArgs(dump, Error.Message)); } } else { OnEmptyPacketFound(new EmptyMessageFoundEventArgs()); } }