public async Task <IActionResult> EntryPlayer([FromBody] EntryPlayer.Request req) { if (req.pingResults != null) { var results = new List <LogModels.PingResults.Result>(); foreach (var pingResult in req.pingResults) { results.Add(new LogModels.PingResults.Result { regionCode = pingResult.regionCode, time = pingResult.time, }); } Logger.Logging( new LogObj().AddChild(new LogModels.PingResults { PlayerId = SelfHost.playerInfo.playerId, Results = results, }) ); } if (!VersionChecker.Get(VersionChecker.CheckTarget.EnabledMatchmake).Check()) { return(BuildErrorResponse(Error.LowCode.DisabledMatchmake)); } var requester = new evomatching.ProtocolModels.Matching.EntryPlayer(); requester.request.playerId = SelfHost.playerInfo.playerId; requester.request.matchType = req.matchType.Value; var response = await requester.PostAsyncXXX(MatchingServerInfo.AreaUri(SelfHost.matchingArea)); if (response.StatusCode != System.Net.HttpStatusCode.OK) { return(BuildErrorResponse(Error.LowCode.ServerInternalError)); } switch (response.Payload.resultCode) { case evomatching.ProtocolModels.Matching.EntryPlayer.Response.ResultCode.Ok: return(Ok(new EntryPlayer.Response())); case evomatching.ProtocolModels.Matching.EntryPlayer.Response.ResultCode.OldPackageVersion: return(BuildErrorResponse(Error.LowCode.NgPackageVersion)); case evomatching.ProtocolModels.Matching.EntryPlayer.Response.ResultCode.SendedPgInvitation: return(BuildErrorResponse(Error.LowCode.SentPgInvitation)); case evomatching.ProtocolModels.Matching.EntryPlayer.Response.ResultCode.RecievedPgInvitation: return(BuildErrorResponse(Error.LowCode.RecievedPgInvitation)); default: return(BuildErrorResponse(Error.LowCode.CouldNotMatchingEnty)); } }
public async Task <IActionResult> EntryPlayer( [FromBody] EntryPlayer.Request req, [FromServices] GeneralManager gm) { var res = new EntryPlayer.Response(); await gm.EnqueueJob(async() => { if (gm.BattleEntryManager.Entried(req.playerId)) { res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.AlreadyEntry; return; } if (null != gm.MatchManager.GetAssignedMatch(req.playerId)) { res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.AlreadyBattle; return; } if (null != gm.PgInvitationManager.GetInvitationTo(req.playerId)) { res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.RecievedPgInvitation; return; } var queData = gm.CreatePremadeGroupQueueData(req.playerId); if (0 <= queData.players.FindIndex(p => p.isInvitation)) { res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.SendedPgInvitation; return; } var playerIds = new List <long>(); var group = gm.PremadeGroupManager.GetBelongs(req.playerId); if (group != null) { if (group.LeaderPlayerId != req.playerId) { res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.NotLeader; return; } for (int i = 0; i < group.Players.Count; i++) { playerIds.Add(group.Players[i].PlayerId); } } else { playerIds.Add(req.playerId); } var limitPackagerVer = VersionChecker.Valued(VersionChecker.ReferenceSrc.PackageVersion, VersionChecker.LimitPackageVersion(VersionChecker.CheckTarget.Matchmake)); UInt64 minPackageVersion = UInt64.MaxValue; var entries = new List <IBattleEntryPlayer>(); for (int i = 0; i < playerIds.Count; i++) { var player = new Player(playerIds[i]); await player.Validate(PDBSM); if (player.Model.packageVersion < limitPackagerVer) { res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.OldPackageVersion; return; } minPackageVersion = Math.Min(player.Model.packageVersion, minPackageVersion); entries.Add( BattleEntryManager.IBattleEntryPlayer( player.playerId, player.Model.playerName, player.Model.battleRating, player.Model.sessionId ) ); } Logger.Logging( new LogObj().AddChild(new LogModels.EntryPlayer { Date = DateTime.UtcNow, MatchType = req.matchType, GroupId = (group != null) ? group.GroupId : "", PlayerIds = playerIds, }) ); var result = gm.BattleEntryManager.Entry(req.matchType, minPackageVersion, entries); for (int i = 0; i < result.Count; i++) { await new ConnectionQueue(result[i].SessionId).EnqueueAsync(new BattleEntryState { state = (req.matchType == Battle.MatchType.Casual) ? BattleEntryState.State.CasualMatchEntry : BattleEntryState.State.RankMatchEntry, }); gm.WatchDogSession.TemporaryAdd(result[i].SessionId); } res.resultCode = ProtocolModels.Matching.EntryPlayer.Response.ResultCode.Ok; }); return(Ok(res)); }