/// <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); } }
/// <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()); } } }
/// <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(); } }
/// <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); } }
/// <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); } } }
/// <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); } } } }
/// <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())); } } }
/// <summary> /// Initializes the network part. /// </summary> internal static void InitNetwork() { NetAvatarSessionManager.Initialize(); }