public IActionResult Leave(
            [FromBody] Leave.Request req, [FromServices] GeneralManager gm)
        {
            gm.EnqueueJob(async() =>
            {
                if (null != gm.MatchManager.GetAssignedMatch(req.playerId.Value))
                {
                    return;
                }

                if (gm.BattleEntryManager.Leave(req.playerId.Value, evolib.BattleEntry.Type.Leave))
                {
                    await new ConnectionQueue(req.sessionId).EnqueueAsync(new BattleEntryState()
                    {
                        state = BattleEntryState.State.Cancel,
                    });
                }

                var group = gm.PremadeGroupManager.GetBelongs(req.playerId.Value);
                if (group != null)
                {
                    List <long> playerIds = new List <long>();
                    for (int i = 0; i < group.Players.Count; i++)
                    {
                        var member = group.Players[i];
                        if (member.PlayerId == req.playerId.Value)
                        {
                            continue;
                        }
                        playerIds.Add(member.PlayerId);
                    }
                    Logger.Logging(
                        new LogObj().AddChild(new LogModels.UpdateParty
                    {
                        GroupId   = group.GroupId,
                        PlayerId  = req.playerId.Value,
                        Date      = DateTime.UtcNow,
                        Type      = evolib.PremadeGroup.Type.Leave,
                        PlayerIds = playerIds,
                    })
                        );
                }

                var members = gm.PremadeGroupManager.Leave(req.playerId.Value);
                for (int i = 0; i < members.Count; i++)
                {
                    var player = members[i];
                    await new ConnectionQueue(player.SessionId).EnqueueAsync(
                        gm.CreatePremadeGroupQueueData(player.PlayerId)
                        );
                }
            });

            var res = new Leave.Response();

            return(Ok(res));
        }
        public async Task <IActionResult> Leave([FromBody] Leave.Request req)
        {
            var requester = new evomatching.ProtocolModels.PremadeGroup.Leave();

            requester.request.playerId  = SelfHost.playerInfo.playerId;
            requester.request.sessionId = SelfHost.sessionId;
            var response = await requester.PostAsyncXXX(MatchingServerInfo.AreaUri(SelfHost.matchingArea));

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(BuildErrorResponse(Error.LowCode.ServerInternalError));
            }

            var res = new Leave.Response();

            return(Ok(res));
        }