示例#1
0
        public Task Publish(ChannelEvent channelEvent)
        {
            Clients.Group(channelEvent.ChannelName).OnEvent(channelEvent.ChannelName, channelEvent);

            if (channelEvent.ChannelName != Constants.AdminChannel)
            {
                // Push this out on the admin channel
                //
                Clients.Group(Constants.AdminChannel).OnEvent(Constants.AdminChannel, channelEvent);
            }

            return(Task.FromResult(0));
        }
示例#2
0
        public Task Publish(ChannelEvent channelEvent)
        {
            Clients.Group(channelEvent.ChannelName).OnEvent(channelEvent.ChannelName, channelEvent);

            if (channelEvent.ChannelName != Constants.AdminChannel)
            {
                // Push this out on the admin channel
                //
                Clients.Group(Constants.AdminChannel).OnEvent(Constants.AdminChannel, channelEvent);
            }

            return Task.FromResult(0);
        }
示例#3
0
        /// <summary>
        /// Публикует (отправляет) на клиент событие. При этом отправляет в оперделенную группу, если эта группа не администратора,
        /// то ему тоже группе администратора тоже отправляется это событие
        /// </summary>
        /// <param name="channelEvent"></param>
        /// <returns>Создает результат который говорит что всё завершилось удачно</returns>
        public Task Publish(ChannelEvent channelEvent)
        {
            Clients.Group(channelEvent.ChannelName).OnEvent(channelEvent.ChannelName, channelEvent);

            if (channelEvent.ChannelName != Constants.AdminChannel)
            {
                //Push this out on the admin channel
                //Если событие пришло не из группы админа, то мы публикуем помимо основной группы и в группу админа тоже
                Clients.Group(Constants.AdminChannel).OnEvent(Constants.AdminChannel, channelEvent);
            }

            //ВОЗВРАЩАЕТ РЕЗУЛЬТАТ С НАДПИСЬЮ ТОГО, ЧТО ВСЁ ЗАВЕРШИЛОСЬ УДАЧНО
            return(Task.FromResult(0));
        }
示例#4
0
        public override Task OnConnected()
        {
            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name = "user.connected",
                Data = new
                {
                    Context.ConnectionId,
                }
            };

            Publish(ev);

            return base.OnConnected();
        }
示例#5
0
        public override Task OnDisconnected(bool stopCalled)
        {
            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name        = "user.disconnected",
                Data        = new
                {
                    Context.ConnectionId,
                }
            };

            Publish(ev);

            return(base.OnDisconnected(stopCalled));
        }
示例#6
0
        public override Task OnConnected()
        {
            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name        = "user.connected",
                Data        = new
                {
                    Context.ConnectionId,
                }
            };

            Publish(ev);

            return(base.OnConnected());
        }
示例#7
0
        public async Task Unsubscribe(string channel)
        {
            await Groups.Remove(Context.ConnectionId, channel);

            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name = "user.unsubscribed",
                Data = new
                {
                    Context.ConnectionId,
                    ChannelName = channel
                }
            };

            await Publish(ev);
        }
示例#8
0
        public async Task Unsubscribe(string channel)
        {
            await Groups.Remove(Context.ConnectionId, channel);

            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name        = "user.unsubscribed",
                Data        = new
                {
                    Context.ConnectionId,
                    ChannelName = channel
                }
            };

            await Publish(ev);
        }
示例#9
0
        /// <summary>
        /// Отписывает клиента от какой-то группы
        /// </summary>
        /// <param name="channel">Имя группы от которого надо отписаться</param>
        public async Task Unsubscribe(string channel)
        {
            //Удаляет подключение из определенной групы
            await Groups.Remove(Context.ConnectionId, channel);

            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name        = "user.unsubscribed",
                Data        = new
                {
                    Context.ConnectionId,
                    ChannelName = channel
                }
            };

            await Publish(ev);
        }
示例#10
0
        //Ключевое слово async указывает, что метод или лямбда-выражение являются асинхронными.
        //
        // //Данный класс описывает отдельную задачу, которая запускается в отдельном потоке
        /// <summary>
        /// Выполняет подписку подключившегося клиента. То есть добавляет его в определенную вещательную группу
        /// </summary>
        /// <param name="channel">Name of channel. Имя группы к которой будет принадлежать подключившийся клиет </param>

        public async Task Subscribe(string channel)
        {
            //await применяется к задаче в асинхронных методах, чтобы приостановить в
            //ыполнение метода до тех пор, пока эта задача
            //не завершится. При этом выполнение потока, в котором
            //был вызван асинхронный метод, не прерывается.

            await Groups.Add(Context.ConnectionId, channel);

            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name        = "user.subscribed",
                Data        = new
                {
                    Context.ConnectionId,
                    ChannelName = channel
                }
            };

            await Publish(ev);
        }
示例#11
0
        public override Task OnDisconnected(bool stopCalled)
        {
            var ev = new ChannelEvent
            {
                ChannelName = Constants.AdminChannel,
                Name = "user.disconnected",
                Data = new
                {
                    Context.ConnectionId,
                }
            };

            Publish(ev);

            return base.OnDisconnected(stopCalled);
        }