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)); }
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); }