コード例 #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="e"></param>
 protected void OnProcessMessage(MessageBufferEventArgs e)
 {
     if (MessageAvailable != null)
     {
         MessageAvailable(this, e);
     }
 }
コード例 #2
0
        /// <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());
            }
        }
コード例 #3
0
        /// <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());
            }
        }