Exemple #1
0
        private async ValueTask ProcessQuickConnect(IChannel session,
                                                    IConnectionSessionInfo sessionInfo,
                                                    GatewayPlayerSessionInfo playerInfo,
                                                    string actorType,
                                                    string actorID)
        {
            playerInfo.ActorType = actorType;
            playerInfo.ActorID   = actorID;

            var position = await this.FindActorPositionAsync(playerInfo.ActorType, playerInfo.ActorID).ConfigureAwait(false);

            if (playerInfo.DestServerID != position.ServerID)
            {
                playerInfo.DestServerID = position.ServerID;
                this.logger.LogInformation("ProcessResponseQueryAccount, SessionID:{0}, Actor:{1}/{2}, Dest ServerID:{3}",
                                           sessionInfo.SessionID, playerInfo.ActorType,
                                           playerInfo.ActorID, playerInfo.DestServerID);
            }

            this.messageCenter.SendMessageToServer(playerInfo.DestServerID, new RpcMessage(new NotifyNewActorSession()
            {
                SessionID = sessionInfo.SessionID,
                OpenID    = playerInfo.OpenID,
                ServerID  = playerInfo.DestServerID,
                ActorType = playerInfo.ActorType,
                ActorID   = playerInfo.ActorID,
            }, playerInfo.Token));
        }
Exemple #2
0
        public static GatewayPlayerSessionInfo GetPlayerInfo(this IConnectionSessionInfo sessionInfo)
        {
            if (sessionInfo.States.TryGetValue(KeyGatewaySessionInfo, out var v))
            {
                return(v as GatewayPlayerSessionInfo);
            }
            var info = new GatewayPlayerSessionInfo();

            sessionInfo.States.TryAdd(KeyGatewaySessionInfo, info);
            return(info);
        }