Пример #1
0
        private static void OnForwardLogicRequestMessageReceived(ForwardLogicRequestMessage message)
        {
            PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType);

            if (logicMessage == null)
            {
                throw new Exception("logicMessage should not be NULL!");
            }

            logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength);
            logicMessage.SetMessageVersion(message.MessageVersion);
            logicMessage.Decode();

            if (!logicMessage.IsServerToClientMessage())
            {
                switch (logicMessage.GetMessageType())
                {
                case AskForJoinableAlliancesListMessage.MESSAGE_TYPE:
                    ServerRequestManager.Create(new AvatarRequestMessage
                    {
                        AccountId = message.AccountId
                    }, ServerManager.GetDocumentSocket(9, message.AccountId), 5).OnComplete = args =>
                    {
                        SearchMessageManager.OnAvatarResponseMessageReceivedForJoinableAlliancesList(message, args);
                    };

                    break;

                case SearchAlliancesMessage.MESSAGE_TYPE:
                    SearchMessageManager.OnSearchAlliancesMessageReceived((SearchAlliancesMessage)logicMessage, message);
                    break;
                }
            }
        }
 public void Send(PiranhaMessage piranhaMessage)
 {
     if (!piranhaMessage.IsServerToClientMessage())
     {
         this.m_sendQueue.Enqueue(piranhaMessage);
     }
 }
Пример #3
0
        private static void OnForwardLogicMessageRequestMessageReceived(ForwardLogicRequestMessage message)
        {
            PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType);

            if (logicMessage == null)
            {
                throw new Exception("logicMessage should not be NULL!");
            }

            logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength);
            logicMessage.SetMessageVersion(message.MessageVersion);
            logicMessage.Decode();

            if (!logicMessage.IsServerToClientMessage())
            {
                switch (logicMessage.GetMessageType())
                {
                case AskForAllianceDataMessage.MESSAGE_TYPE:
                    AskForAllianceDataMessage askForAllianceDataMessage = (AskForAllianceDataMessage)logicMessage;
                    LogicLong allianceId = askForAllianceDataMessage.RemoveAllianceId();

                    if (AllianceManager.TryGet(allianceId, out Alliance alliance))
                    {
                        ServerMessageManager.SendMessage(StreamMessageManager.CreateForwardLogicMessage(alliance.GetAllianceDataMessage(), message.SessionId),
                                                         ServerManager.GetProxySocket(message.SessionId));
                    }

                    break;
                }
            }
        }
 public void Send(PiranhaMessage message)
 {
     if (message.IsServerToClientMessage())
     {
         MessageHandler.EnqueueSend(message, this.m_clientConnection);
     }
 }
Пример #5
0
 /// <summary>
 ///     Sends the specified message to server.
 /// </summary>
 internal void Send(PiranhaMessage message)
 {
     if (this._connection.IsConnected())
     {
         if (!message.IsServerToClientMessage())
         {
             this._sendMessageQueue.Enqueue(message);
             this.OnWakeup(this._connection);
         }
     }
 }
        private static void OnForwardLogicMessageRequestMessageReceived(ForwardLogicRequestMessage message)
        {
            PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType);

            if (logicMessage == null)
            {
                throw new Exception("logicMessage should not be NULL!");
            }

            logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength);
            logicMessage.SetMessageVersion(message.MessageVersion);
            logicMessage.Decode();

            if (!logicMessage.IsServerToClientMessage())
            {
                switch (logicMessage.GetMessageType())
                {
                case AskForAvatarProfileMessage.MESSAGE_TYPE:
                {
                    AskForAvatarProfileMessage askForAvatarProfileMessage = (AskForAvatarProfileMessage)logicMessage;
                    LogicLong avatarId = askForAvatarProfileMessage.RemoveAvatarId();

                    if (GameAvatarManager.TryGet(avatarId, out GameAvatar document))
                    {
                        AvatarProfileMessage   avatarProfileMessage   = new AvatarProfileMessage();
                        AvatarProfileFullEntry avatarProfileFullEntry = new AvatarProfileFullEntry();

                        avatarProfileFullEntry.SetLogicClientAvatar(document.LogicClientAvatar);
                        avatarProfileFullEntry.SetCompressedHomeJSON(document.LogicClientHome.GetCompressibleHomeJSON().GetCompressed());

                        avatarProfileMessage.SetAvatarProfileFullEntry(avatarProfileFullEntry);

                        ServerMessageManager.SendMessage(GameMessageManager.CreateForwardLogicMessage(avatarProfileMessage, message.SessionId), ServerManager.GetProxySocket(message.SessionId));
                    }
                    else
                    {
                        AvatarProfileFailedMessage avatarProfileFailedMessage = new AvatarProfileFailedMessage();
                        avatarProfileFailedMessage.SetErrorType(AvatarProfileFailedMessage.ErrorType.NOT_FOUND);
                        ServerMessageManager.SendMessage(GameMessageManager.CreateForwardLogicMessage(avatarProfileFailedMessage, message.SessionId),
                                                         ServerManager.GetProxySocket(message.SessionId));
                    }

                    break;
                }
                }
            }
        }
        private static void OnForwardLogicMessageReceived(ForwardLogicMessage message)
        {
            if (ChatSessionManager.TryGet(message.SessionId, out ChatSession session))
            {
                PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType);

                if (logicMessage == null)
                {
                    throw new Exception("logicMessage should not be NULL!");
                }

                logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength);
                logicMessage.SetMessageVersion(message.MessageVersion);
                logicMessage.Decode();

                if (!logicMessage.IsServerToClientMessage())
                {
                    session.LogicMessageManager.ReceiveMessage(logicMessage);
                }
            }
        }
        private static void OnForwardLogicRequestMessageReceived(ForwardLogicRequestMessage message)
        {
            PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType);

            if (logicMessage == null)
            {
                throw new Exception("logicMessage should not be NULL!");
            }

            logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength);
            logicMessage.SetMessageVersion(message.MessageVersion);
            logicMessage.Decode();

            if (!logicMessage.IsServerToClientMessage())
            {
                switch (logicMessage.GetMessageType())
                {
                case AskForAllianceRankingListMessage.MESSAGE_TYPE:
                    ScoringMessageManager.OnAskForAllianceRankingListMessageReceived((AskForAllianceRankingListMessage)logicMessage, message);
                    break;

                case AskForAvatarRankingListMessage.MESSAGE_TYPE:
                    ScoringMessageManager.OnAskForAvatarRankingListMessageReceived((AskForAvatarRankingListMessage)logicMessage, message);
                    break;

                case AskForAvatarLocalRankingListMessage.MESSAGE_TYPE:
                    ScoringMessageManager.OnAskForLocalAvatarRankingListMessageReceived((AskForAvatarLocalRankingListMessage)logicMessage, message);
                    break;

                case AskForAvatarLastSeasonRankingListMessage.MESSAGE_TYPE:
                    ScoringMessageManager.OnAskForAvatarLastSeasonRankingListMessageReceived((AskForAvatarLastSeasonRankingListMessage)logicMessage, message);
                    break;

                case AskForAvatarDuelLastSeasonRankingListMessage.MESSAGE_TYPE:
                    ScoringMessageManager.OnAskForAvatarDuelLastSeasonRankingListMessageReceived((AskForAvatarDuelLastSeasonRankingListMessage)logicMessage, message);
                    break;
                }
            }
        }
        public int OnReceive(byte[] buffer, int length)
        {
            if (length >= Messaging.HEADER_SIZE)
            {
                Messaging.ReadHeader(buffer, out int messageType, out int messageLength, out int messageVersion);

                if (length - Messaging.HEADER_SIZE >= messageLength)
                {
                    byte[] encryptedBytes = new byte[messageLength];
                    byte[] encodingBytes;

                    Buffer.BlockCopy(buffer, Messaging.HEADER_SIZE, encryptedBytes, 0, messageLength);

                    int encodingLength;

                    if (this.m_receiveEncrypter != null)
                    {
                        encodingLength = messageLength - this.m_receiveEncrypter.GetOverheadEncryption();
                        encodingBytes  = new byte[encodingLength];

                        this.DecryptUsingEncrypter(encryptedBytes, encodingBytes, messageLength);
                    }
                    else
                    {
                        if (this.m_pepperState == PepperState.DEFAULT)
                        {
                            if (messageType == ClientHelloMessage.MESSAGE_TYPE)
                            {
                                this.m_pepperState = PepperState.AUTHENTIFICATION;

                                encodingLength = messageLength;
                                encodingBytes  = encryptedBytes;
                            }
                            else if (messageType == LoginMessage.MESSAGE_TYPE)
                            {
                                this.m_pepperState = PepperState.DISABLED;
                                this.InitRC4Encryption(this.GetDefaultNonce());

                                encodingLength = messageLength - this.m_receiveEncrypter.GetOverheadEncryption();
                                encodingBytes  = new byte[encodingLength];

                                this.DecryptUsingEncrypter(encryptedBytes, encodingBytes, messageLength);
                            }
                            else
                            {
                                return(messageLength + Messaging.HEADER_SIZE);
                            }
                        }
                        else if (this.m_pepperState == PepperState.AUTHENTIFICATION_SERVER)
                        {
                            if (messageType != LoginMessage.MESSAGE_TYPE)
                            {
                                return(messageLength + Messaging.HEADER_SIZE);
                            }
                            throw new NotImplementedException();
                        }
                        else
                        {
                            return(messageLength + Messaging.HEADER_SIZE);
                        }
                    }

                    PiranhaMessage piranhaMessage = this.m_messageFactory.CreateMessageByType(messageType);

                    if (piranhaMessage != null)
                    {
                        piranhaMessage.GetByteStream().SetByteArray(encodingBytes, encodingLength);
                        piranhaMessage.SetMessageVersion(messageVersion);

                        try
                        {
                            piranhaMessage.Decode();

                            if (!piranhaMessage.IsServerToClientMessage())
                            {
                                MessageHandler.EnqueueReceive(piranhaMessage, this.m_clientConnection);
                            }
                        }
                        catch (Exception exception)
                        {
                            Logging.Error(string.Format("Messaging::onReceive: error while the decoding of message type {0}, trace: {1}", messageType, exception));
                        }
                    }
                    else
                    {
                        Logging.Warning(string.Format("Messaging::onReceive: ignoring message of unknown type {0}", messageType));
                    }

                    return(messageLength + Messaging.HEADER_SIZE);
                }
                else
                {
                    int httpHeader = buffer[0] << 16 | buffer[1] << 8 | buffer[2];

                    if (httpHeader == 0x474554) // httpHeader == GET
                    {
                        return(-1);
                    }
                }
            }

            return(0);
        }