コード例 #1
0
        /// <summary>
        ///     Called when a <see cref="AvatarProfileFullEntryMessage"/> is received.
        /// </summary>
        internal void AvatarProfileFullEntryMessageReceived(AvatarProfileFullEntryMessage message)
        {
            byte[] sessionId = message.RemoveSessionId();

            if (NetAvatarSessionManager.TryGet(sessionId, out NetAvatarSession session))
            {
                AvatarProfileMessage avatarProfileMessage = new AvatarProfileMessage();
                avatarProfileMessage.SetAvatarProfileFullEntry(message.RemoveAvatarProfileFullEntry());
                session.SendPiranhaMessage(NetUtils.SERVICE_NODE_TYPE_PROXY_CONTAINER, avatarProfileMessage);
            }
        }
コード例 #2
0
        /// <summary>
        ///     Called when a <see cref="UpdateServerEndPointMessage"/> is received.
        /// </summary>
        internal void UpdateServerEndPointMessageReceived(UpdateServerEndPointMessage message)
        {
            byte[] sessionId = message.RemoveSessionId();

            if (NetAvatarSessionManager.TryGet(sessionId, out NetAvatarSession session))
            {
                if (message.GetServerType() != ServiceCore.ServiceNodeType)
                {
                    session.SetServiceNodeId(message.GetServerType(), message.GetServerId());
                }
            }
        }
コード例 #3
0
        /// <summary>
        ///     Called when a <see cref="ServerUnboundMessage"/> is received.
        /// </summary>
        internal void ServerUnboundMessageReceived(ServerUnboundMessage message)
        {
            byte[] sessionId = message.GetSessionId();

            if (NetAvatarSessionManager.TryRemove(sessionId, out NetAvatarSession session))
            {
                DatabaseManager.Update(0, session.AvatarAccount.Id, LogicJSONParser.CreateJSONString(session.AvatarAccount.Save()));

                session.AvatarAccount.SetSession(null);
                session.Destruct();
            }
        }
コード例 #4
0
        /// <summary>
        ///     Called when a <see cref="ServerBoundMessage"/> is received.
        /// </summary>
        internal void ServerBoundMessageReceived(ServerBoundMessage message)
        {
            LogicLong accountId = message.RemoveAccountId();

            if (!accountId.IsZero())
            {
                if (!AvatarAccountManager.TryGet(accountId, out AvatarAccount avatarAccount))
                {
                    if (NetManager.GetDocumentOwnerId(ServiceCore.ServiceNodeType, accountId) != ServiceCore.ServiceNodeId)
                    {
                        return;
                    }

                    avatarAccount = AvatarAccountManager.CreatePartyAccount(accountId);
                }
                else
                {
                    if (avatarAccount.Session != null)
                    {
                        NetAvatarSessionManager.Remove(avatarAccount.Session.SessionId);

                        avatarAccount.Session.Destruct();
                        avatarAccount.SetSession(null);
                    }
                }

                NetAvatarSession session = NetAvatarSessionManager.Create(avatarAccount, message.RemoveSessionId());

                int[] ids = message.RemoveEndPoints();

                for (int i = 0; i < 28; i++)
                {
                    if (ids[i] != -1)
                    {
                        session.SetServiceNodeId(i, ids[i]);
                    }
                }

                avatarAccount.SetSession(session);

                AskForBindServerMessage askForBindServerMessage1 = new AskForBindServerMessage();
                AskForBindServerMessage askForBindServerMessage2 = new AskForBindServerMessage();

                askForBindServerMessage1.SetServerType(10);
                askForBindServerMessage2.SetServerType(11);
                askForBindServerMessage1.SetServerId(NetManager.GetDocumentOwnerId(NetUtils.SERVICE_NODE_TYPE_ZONE_CONTAINER, accountId));
                askForBindServerMessage2.SetServerId(NetManager.GetDocumentOwnerId(NetUtils.SERVICE_NODE_TYPE_PARTY_CONTAINER, accountId));

                session.SendMessage(NetUtils.SERVICE_NODE_TYPE_PROXY_CONTAINER, askForBindServerMessage1);
                session.SendMessage(NetUtils.SERVICE_NODE_TYPE_PROXY_CONTAINER, askForBindServerMessage2);
            }
        }
コード例 #5
0
        /// <summary>
        ///     Called when a <see cref="AvatarEntryMessage"/> is received.
        /// </summary>
        internal void AvatarEntryMessageReceived(AvatarEntryMessage message)
        {
            byte[] sessionId = message.RemoveSessionId();

            if (NetAvatarSessionManager.TryGet(sessionId, out NetAvatarSession session))
            {
                message.RemoveAvatarEntry().CopyTo(session.AvatarAccount.AvatarEntry);

                if (session.GetServiceNodeEndPoint(NetUtils.SERVICE_NODE_TYPE_GLOBAL_CHAT_CONTAINER) != null)
                {
                    AvatarEntryMessage avatarEntryMessage = new AvatarEntryMessage();
                    avatarEntryMessage.SetAvatarEntry(session.AvatarAccount.AvatarEntry);
                    session.SendMessage(NetUtils.SERVICE_NODE_TYPE_GLOBAL_CHAT_CONTAINER, avatarEntryMessage);
                }
            }
        }
コード例 #6
0
        /// <summary>
        ///     Called when a <see cref="ForwardPiranhaMessage"/> is received.
        /// </summary>
        internal void ForwardPiranhaMessageReceived(ForwardPiranhaMessage message)
        {
            byte[] sessionId = message.RemoveSessionId();

            if (NetAvatarSessionManager.TryGet(sessionId, out NetAvatarSession session))
            {
                PiranhaMessage piranhaMessage = message.RemovePiranhaMessage();

                if (piranhaMessage != null)
                {
                    try
                    {
                        piranhaMessage.Decode();
                        session.PiranhaMessageManager.ReceiveMessage(piranhaMessage);
                    }
                    catch (Exception exception)
                    {
                        Logging.Warning("NetAvatarMessageManager::forwardPiranhaMessageReceived piranha message handle exception, trace: " + exception);
                    }
                }
            }
        }
コード例 #7
0
        /// <summary>
        ///     Called when a <see cref="ExecuteAdminCommandMessage"/> is received.
        /// </summary>
        private void ExecuteAdminCommandMessageReceived(ExecuteAdminCommandMessage message)
        {
            byte[] sessionId = message.RemoveSessionId();

            if (NetAvatarSessionManager.TryGet(sessionId, out NetAvatarSession session))
            {
                AdminCommand adminCommand = message.RemoveDebugCommand();

                if (adminCommand.GetServiceNodeType() == ServiceCore.ServiceNodeType)
                {
                    switch (adminCommand.GetCommandType())
                    {
                    default:
                        Logging.Print(string.Format("executeAdminCommandMessageReceived unknown debug command received ({0})", adminCommand.GetCommandType()));
                        break;
                    }
                }
                else
                {
                    Logging.Print(string.Format("executeAdminCommandMessageReceived invalid debug command received ({0})", adminCommand.GetCommandType()));
                }
            }
        }
コード例 #8
0
 /// <summary>
 ///     Initializes the network part.
 /// </summary>
 internal static void InitNetwork()
 {
     NetAvatarSessionManager.Initialize();
 }