Пример #1
0
        /// <summary>
        /// Adds the client to the channel
        /// </summary>
        public async Task <ClientJoinResult> AddClient(MqClient client)
        {
            if (Authenticator != null)
            {
                bool allowed = await Authenticator.Authenticate(this, client);

                if (!allowed)
                {
                    return(ClientJoinResult.Unauthorized);
                }
            }

            if (Options.ClientLimit > 0 && _clients.Count >= Options.ClientLimit)
            {
                return(ClientJoinResult.Full);
            }

            ChannelClient cc = new ChannelClient(this, client);

            _clients.Add(cc);
            client.Join(cc);

            if (EventHandler != null)
            {
                await EventHandler.OnClientJoined(cc);
            }

            IEnumerable <ChannelQueue> list = _queues.GetAsClone();

            foreach (ChannelQueue queue in list)
            {
                _ = queue.Trigger();
            }

            return(ClientJoinResult.Success);
        }