예제 #1
0
        void IServer.HandleUserLeaveQueue(IServerUser user, QueueAction action)
        {
            var matchmaking = GetMatchmaking(user, action);

            if (matchmaking == null)
            {
                return;
            }

            lock (matchmaking)
            {
                var regCount = matchmaking.GetRegisterCount(user);
                if (action.Count >= regCount)
                {
                    matchmaking.LeaveQueueCompletely(user);
                }
                else
                {
                    for (var i = 0; i < action.Count; i++)
                    {
                        matchmaking.LeaveQueue(user);
                    }
                }

                user.Send(Packet.PacketTypeS2C.QueueState, Math.Max(0, regCount - action.Count));
            }
        }
예제 #2
0
        void IServer.HandleUserEnterQueue(IServerUser user, QueueAction action)
        {
            var matchmaking = GetMatchmaking(user, action);

            if (matchmaking == null)
            {
                return;
            }

            lock (matchmaking)
            {
                var regCount = matchmaking.GetRegisterCount(user);
                if (regCount >= _config.MaxQueueCount)
                {
                    user.IllegalAction("Exceeded max queue action: " + _config.MaxQueueCount);
                    return;
                }

                var queueLimitExclusive = Math.Min(_config.MaxQueueCount, regCount + action.Count);
                for (; regCount < queueLimitExclusive; regCount++)
                {
                    matchmaking.EnterQueue(user);
                }

                user.Send(Packet.PacketTypeS2C.QueueState, regCount);
            }
        }