public async Task <IActionResult> SendInvitation([FromBody] SendInvitation.Request req) { var requester = new evomatching.ProtocolModels.PremadeGroup.SendInvitation(); //dst var playerDst = new Player(req.playerId.Value); if (!await playerDst.Validate(PDBSM)) { return(BuildErrorResponse(Error.LowCode.BadParameter)); } requester.request.playerIdDst = playerDst.playerId; requester.request.sessionIdDst = playerDst.Model.sessionId; if (playerDst.Model.matchingArea != SelfHost.matchingArea) { return(BuildErrorResponse(Error.LowCode.PremadeGroupDifferentArea)); } //src requester.request.playerIdSrc = SelfHost.playerInfo.playerId; requester.request.sessionIdSrc = SelfHost.sessionId; if (requester.request.playerIdSrc == requester.request.playerIdDst) { return(BuildErrorResponse(Error.LowCode.BadParameter)); } 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.PremadeGroup.SendInvitation.Response.ResultCode.Ok: return(Ok(new SendInvitation.Response() { })); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyEntrySelf: case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyBattleSelf: return(BuildErrorResponse(Error.LowCode.BadRequest)); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.ReceivedInvitationSelf: return(BuildErrorResponse(Error.LowCode.PremadeGroupRecievedInvitationSelf)); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.BusyTarget: return(BuildErrorResponse(Error.LowCode.PremadeGroupTargetBusy)); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyGroupTarget: return(BuildErrorResponse(Error.LowCode.PremadeGroupAlreadyGroupTarget)); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyEntryTarget: return(BuildErrorResponse(Error.LowCode.PremadeGroupAlreadyEntryTarget)); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyBattleTarget: return(BuildErrorResponse(Error.LowCode.PremadeGroupAlreadyBattleTarget)); case evomatching.ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.OverLimit: return(BuildErrorResponse(Error.LowCode.PremadeGroupOverLimit)); default: return(BuildErrorResponse(Error.LowCode.Others)); } }
public async Task <IActionResult> SendInvitation( [FromBody] SendInvitation.Request req, [FromServices] GeneralManager gm) { var res = new SendInvitation.Response(); await gm.EnqueueJob(async() => { if (gm.BattleEntryManager.Entried(req.playerIdSrc)) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyEntrySelf; return; } if (null != gm.MatchManager.GetAssignedMatch(req.playerIdSrc)) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyBattleSelf; return; } if (null != gm.PgInvitationManager.GetInvitationTo(req.playerIdSrc)) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.ReceivedInvitationSelf; return; } if (null != gm.PgInvitationManager.GetInvitationTo(req.playerIdDst) || 0 < gm.PgInvitationManager.GetInvitationFrom(req.playerIdDst).Count) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.BusyTarget; return; } if (null != gm.PremadeGroupManager.GetBelongs(req.playerIdDst)) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyGroupTarget; return; } if (gm.BattleEntryManager.Entried(req.playerIdDst)) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyEntryTarget; return; } if (null != gm.MatchManager.GetAssignedMatch(req.playerIdDst)) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.AlreadyBattleTarget; return; } if (evolib.Battle.SidePlayersNum <= gm.CreatePremadeGroupQueueData(req.playerIdSrc).players.Count) { res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.OverLimit; return; } Logger.Logging( new LogObj().AddChild(new LogModels.SendInvitationParty { PlayerIdSrc = req.playerIdSrc, PlayerIdDst = req.playerIdDst, Date = DateTime.UtcNow, }) ); // OK! gm.PgInvitationManager.CreateInvitation( req.playerIdSrc, req.sessionIdSrc, req.playerIdDst, req.sessionIdDst ); var queData = gm.CreatePremadeGroupQueueData(req.playerIdSrc); await new ConnectionQueue(req.sessionIdSrc).EnqueueAsync(queData); var group = gm.PremadeGroupManager.GetBelongs(req.playerIdSrc); if (group != null) { for (int i = 0; i < group.Players.Count; i++) { var member = group.Players[i]; if (member.PlayerId == req.playerIdSrc) { continue; //already sended! } await new ConnectionQueue(member.SessionId).EnqueueAsync(queData); } } await new ConnectionQueue(req.sessionIdDst).EnqueueAsync(new PremadeGroupInvitation() { playerId = req.playerIdSrc, remainingSec = (float)(evolib.PremadeGroup.InvitationExpiry.TotalSeconds), }); res.resultCode = ProtocolModels.PremadeGroup.SendInvitation.Response.ResultCode.Ok; }); return(Ok(res)); }