示例#1
0
        public async Task RemoveSession(RemoveSessionRequest item)
        {
            var connectionId = Context.ConnectionId;
            var instance     = BroadcasterManager.GetInstance();

            if (!instance.IsBroadcaster(connectionId))
            {
                return;
            }

            var info        = instance.GetConnectionInfo(connectionId);
            var roomManager = RoomManager.GetInstance();
            var room        = roomManager.GetRoomInfo(info.RoomId);

            if (!room.IsOwnerSession(item.SessionId, connectionId))
            {
                return;
            }

            await room.RemoveSession(item);
        }
示例#2
0
        public async Task RemoveSession(RemoveSessionRequest item)
        {
            if (this.Sessions.ContainsKey(item.SessionId))
            {
                this.Sessions.Remove(item.SessionId);

                var manager = ListenerManager.GetInstance();
                await Task.Run(() =>
                {
                    Parallel.ForEach(this.Listeners, c =>
                    {
                        var listener = manager.GetConnectionInfo(c);
                        if (listener != null)
                        {
                            lock (listener)
                            {
                                IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext <ListenHub>();
                                hubContext.Clients.Group(this.RoomId).RemoveSession(item);
                            }
                        }
                    });
                });
            }
        }
示例#3
0
        public async Task RemoveSession(RemoveSessionRequest item)
        {
            var connectionId = Context.ConnectionId;
            var instance = BroadcasterManager.GetInstance();
            if (!instance.IsBroadcaster(connectionId))
                return;

            var info = instance.GetConnectionInfo(connectionId);
            var roomManager = RoomManager.GetInstance();
            var room = roomManager.GetRoomInfo(info.RoomId);
            if (!room.IsOwnerSession(item.SessionId, connectionId))
                return;

            await room.RemoveSession(item);
        }
示例#4
0
        public async Task RemoveSession(RemoveSessionRequest item)
        {
            if (this.Sessions.ContainsKey(item.SessionId))
            {
                this.Sessions.Remove(item.SessionId);

                var manager = ListenerManager.GetInstance();
                await Task.Run(() =>
                {
                    Parallel.ForEach(this.Listeners, c =>
                    {
                        var listener = manager.GetConnectionInfo(c);
                        if (listener != null)
                        {
                            lock (listener)
                            {
                                IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<ListenHub>();
                                hubContext.Clients.Group(this.RoomId).RemoveSession(item);
                            }
                        }
                    });
                });
            }
        }