예제 #1
0
        public async Task <IActionResult> Broadcasts(bool upcoming = true, int page = 1)
        {
            var filter = new BroadcastFilter(page)
            {
                Upcoming = upcoming
            };

            var broadcastList = await _mailService.PageBroadcastsAsync(filter);

            var paginateModel = new PaginateViewModel
            {
                ItemCount    = broadcastList.Count,
                CurrentPage  = page,
                ItemsPerPage = filter.Take.Value
            };

            if (paginateModel.PastMaxPage)
            {
                return(RedirectToRoute(
                           new
                {
                    page = paginateModel.LastPage ?? 1
                }));
            }

            var viewModel = new BroadcastListViewModel
            {
                Broadcasts    = broadcastList.Data,
                PaginateModel = paginateModel,
                Upcoming      = upcoming
            };

            return(View(viewModel));
        }
예제 #2
0
        /// <summary>
        /// Sends a reliable command to all open connections (optionally filtered).
        /// </summary>
        public int SendReliableCommandToAll(BroadcastFilter filter, byte flags, string opcode, string[] fields)
        {
            int i;

            Connection[] cons;

            //Don't send anything.
            if (filter == BroadcastFilter.None)
            {
                return(UdpConsts.UDP_OK);
            }

            //We are sending to servers?
            if ((filter & BroadcastFilter.Servers) > BroadcastFilter.None)
            {
                this.GetConnections(true, out cons);

                if (cons != null)
                {
                    for (i = 0; i < cons.Length; i++)
                    {
                        //Does the connection need to be authed?
                        if ((filter & BroadcastFilter.AuthedOnly) > BroadcastFilter.None)
                        {
                            if (!cons[i].Authed)
                            {
                                continue;
                            }
                        }

                        cons[i].SendReliableCommand(flags, opcode, fields);
                    }
                }
            }

            //We are sending to clients?
            if ((filter & BroadcastFilter.Clients) > BroadcastFilter.None)
            {
                this.GetConnections(false, out cons);

                if (cons != null)
                {
                    for (i = 0; i < cons.Length; i++)
                    {
                        if ((filter & BroadcastFilter.AuthedOnly) > BroadcastFilter.None)
                        {
                            if (!cons[i].Authed)
                            {
                                continue;
                            }
                        }

                        cons[i].SendReliableCommand(flags, opcode, fields);
                    }
                }
            }

            return(UdpConsts.UDP_OK);
        }
 /// <summary>
 /// 广播localmsg
 /// </summary>
 /// <param name="lmsg"></param>
 /// <param name="filter"></param>
 public void BroadcastLocalMessage(ILocalMessage msg, BroadcastFilter filter = null)
 {
     foreach (var item in m_playerSid2CtxDic)
     {
         // 使用过滤器
         if (filter != null && !filter(item.Value))
         {
             continue;
         }
         item.Value.PostLocalMessage(msg);
     }
 }
예제 #4
0
        private IQueryable <Model.Broadcast> ApplyFilters(BroadcastFilter filter)
        {
            var broadcasts = DbSet.AsNoTracking()
                             .Where(_ => _.SiteId == filter.SiteId);

            if (filter.Upcoming == true)
            {
                broadcasts = broadcasts.Where(_ => _.SendAt >= _dateTimeProvider.Now);
            }
            else if (filter.Upcoming == false)
            {
                broadcasts = broadcasts.Where(_ => _.SendAt < _dateTimeProvider.Now);
            }

            return(broadcasts);
        }
예제 #5
0
        public async Task <ICollection <Broadcast> > PageAsync(BroadcastFilter filter)
        {
            var broadcasts = ApplyFilters(filter);

            if (filter.Upcoming == false)
            {
                broadcasts = broadcasts.OrderByDescending(_ => _.SendAt);
            }
            else
            {
                broadcasts = broadcasts.OrderBy(_ => _.SendAt);
            }
            return(await broadcasts
                   .ApplyPagination(filter)
                   .ProjectTo <Broadcast>()
                   .ToListAsync());
        }
예제 #6
0
        public void FilterBroadcastTest()
        {
            broadcastFilter = new BroadcastFilter();

            // Check for new videos to process.
            var           files           = Directory.GetFiles(TestHelper.twitchVodsPath);
            List <string> videosToProcess = new List <string>();

            // Filter out non video files.
            foreach (var file in files)
            {
                if (file.EndsWith(".mp4"))
                {
                    videosToProcess.Add(file);
                }
            }

            // Filter broadcast.
            filteredMatches = broadcastFilter.FilterBroadcasts(videosToProcess, testConfiguration: true);

            // Assert that filteredMatches has correct information.
            Assert.True(filteredMatches.Count == 1);
            Assert.True(filteredMatches[0].Broadcast.Id == 317396487);
            Assert.True(filteredMatches[0].Broadcast.StartTime.Ticks == 636740622290000000);
            Assert.True(filteredMatches[0].Matches.Count == 1);
            Assert.True(filteredMatches[0].Matches[0].Id == 1);
            Assert.True(!filteredMatches[0].Matches[0].IsInstantReplay);
            Assert.True(filteredMatches[0].Matches[0].Segments.Count == 6);
            Assert.True(filteredMatches[0].Matches[0].Segments[0].StartTime == 6071.9441215822417);
            Assert.True(filteredMatches[0].Matches[0].Segments[0].EndTime == 6232.6195459037581);

            var processedFileLocation = Helper.TwitchVodsPath + "processed\\" + videosToProcess[0].Split("\\").Last();

            // Assert that the Twitch VOD video got moved to processed.
            Assert.True(File.Exists(processedFileLocation));

            // Assert that the right matches, highlights and csv files were created.
            Assert.True(Directory.Exists(filteredMatches[0].GetDirectoryPath()));
            Assert.True(File.Exists(filteredMatches[0].GetDirectoryPath() + "match1.mp4"));
            Assert.True(File.Exists(filteredMatches[0].GetDirectoryPath() + "match1.csv"));

            // Move the Twitch VOD video back to its original location.
            File.Move(processedFileLocation, videosToProcess[0]);
        }
예제 #7
0
 public int SendReliableCommandToAll(BroadcastFilter filter, byte flags, string opcode, string[] fields)
 {
     if (filter == BroadcastFilter.None)
     {
         return(UdpConsts.UDP_OK);
     }
     if ((filter & BroadcastFilter.Servers) > BroadcastFilter.None)
     {
         Connection[] array;
         this.GetConnections(true, out array);
         if (array != null)
         {
             for (int i = 0; i < array.Length; i++)
             {
                 if ((filter & BroadcastFilter.AuthedOnly) <= BroadcastFilter.None || array[i].Authed)
                 {
                     array[i].SendReliableCommand(flags, opcode, fields);
                 }
             }
         }
     }
     if ((filter & BroadcastFilter.Clients) > BroadcastFilter.None)
     {
         Connection[] array;
         this.GetConnections(false, out array);
         if (array != null)
         {
             for (int i = 0; i < array.Length; i++)
             {
                 if ((filter & BroadcastFilter.AuthedOnly) <= BroadcastFilter.None || array[i].Authed)
                 {
                     array[i].SendReliableCommand(flags, opcode, fields);
                 }
             }
         }
     }
     return(UdpConsts.UDP_OK);
 }
예제 #8
0
        public async Task <DataWithCount <ICollection <Broadcast> > > PageBroadcastsAsync(BroadcastFilter filter)
        {
            var authId = GetClaimId(ClaimType.UserId);

            if (HasPermission(Permission.SendBroadcastMail))
            {
                filter.SiteId = GetClaimId(ClaimType.SiteId);

                return(new DataWithCount <ICollection <Broadcast> >
                {
                    Data = await _broadcastRepository.PageAsync(filter),
                    Count = await _broadcastRepository.CountAsync(filter)
                });
            }
            else
            {
                _logger.LogError($"User {authId} doesn't have permission to view broadcasts.");
                throw new GraException("Permission denied");
            }
        }
 public static void SyncLatestPlatform(byte type, byte[] content, ObjectId senderId, BroadcastFilter filter)
 {
     dealerListener.SyncLatestPlatform(type, content, senderId, filter);
 }
예제 #10
0
 public async Task <int> CountAsync(BroadcastFilter filter)
 {
     return(await ApplyFilters(filter)
            .CountAsync());
 }
예제 #11
0
            private void SyncPrivate(RelayCode relayCode, byte contentCode, byte[] content, ObjectId senderOid, BroadcastFilter filter)
            {
                if (!_roomJoined)
                {
                    OrLog(LogLevel.VeryVerbose, "Couldnt send Sync");
                    return;
                }

                if (filter.DestCode == DestinationCode.MasterOnly)
                {
                    OrLog(LogLevel.VeryVerbose, "send receivers type master client " + filter.DestCode + " master client id is :" + MasterClient.ID.ToString());
                }
                else if (filter.DestCode == DestinationCode.Include && filter.Destinations.Length > 0)
                {
                    OrLog(LogLevel.VeryVerbose, "send receivers type include " + filter.DestCode);
                    foreach (var t in filter.Destinations)
                    {
                        OrLog(LogLevel.VeryVerbose, "send target id " + t.ToString());
                    }
                }
                else if (filter.DestCode == DestinationCode.Exclude && filter.Destinations.Length > 0)
                {
                    OrLog(LogLevel.VeryVerbose, "send receivers type exclude " + filter.DestCode);
                    foreach (var t in filter.Destinations)
                    {
                        OrLog(LogLevel.VeryVerbose, "send target id " + t.ToString());
                    }
                }
                //else if(options.DestCode == DestinationCode.All)
                //else if (options.DestCode == DestinationCode.Broadcast)
                else
                {
                    OrLog(LogLevel.VeryVerbose, "send receivers type all " + filter.DestCode);
                }

                var headerBytes = Header.CreateHeader(
                    Definitions.FrameVersion,
                    relayCode,
                    (byte)contentCode,
                    0,
                    (byte)filter.DestCode,
                    (PlayerId)LoginId,
                    (ObjectId)senderOid,
                    (UInt16)filter.Destinations.Length,
                    (UInt16)content.Length
                    );

                var destPidsSize = sizeof(UInt16) * filter.Destinations.Length;
                var contentSize  = content.Length;
                var messageBytes = new byte[headerBytes.Length + destPidsSize + contentSize];
                var stream       = new MemoryStream(messageBytes);
                var message      = new EndiannessBinaryWriter(stream);

                try
                {
                    message.Write(headerBytes);
                    if (destPidsSize > 0)
                    {
                        message.Write(new byte[destPidsSize]);
                        Buffer.BlockCopy(filter.Destinations, 0, messageBytes, headerBytes.Length, destPidsSize);
                    }
                    message.Write(content);
                    OrLog(LogLevel.VeryVerbose, "prepare Sync: " + BitConverter.ToString(messageBytes));
                    statefullQueue.Enqueue(messageBytes);
                }
                catch (Exception e)
                {
                    OrLogError(LogLevel.Info, "error: " + e.Message);
                    OrLogError(LogLevel.Verbose, "stacktrace: " + e.StackTrace);
                }
                message.Close();
                stream.Close();
            }
예제 #12
0
 public void SyncLatestPlatform(byte contentCode, byte[] content, ObjectId senderOid, BroadcastFilter filter)
 {
     OrLog(LogLevel.VeryVerbose, "MessageSend RelayCode.UNITY_CDK_RELAY_LATEST");
     SyncPrivate(RelayCode.UNITY_CDK_RELAY_LATEST, contentCode, content, senderOid, filter);
 }
예제 #13
0
 public void SyncStream(byte contentCode, byte[] content, ObjectId senderOid, BroadcastFilter filter)
 {
     OrLog(LogLevel.VeryVerbose, "MessageSend RelayCode.RELAY_STREAM");
     SyncPrivate(RelayCode.RELAY_STREAM, contentCode, content, senderOid, filter);
 }
예제 #14
0
		/// <summary>
		/// Sends a reliable command to all open connections (optionally filtered).
		/// </summary>
		public int SendReliableCommandToAll(BroadcastFilter filter, byte flags, string opcode, string[] fields)
		{
			int i;
			Connection[] cons;

			//Don't send anything.
			if(filter == BroadcastFilter.None)
				return UdpConsts.UDP_OK;

			//We are sending to servers?
			if((filter & BroadcastFilter.Servers) > BroadcastFilter.None)
			{
				this.GetConnections(true, out cons);

				if(cons != null)
				{
					for(i = 0; i < cons.Length; i++)
					{
						//Does the connection need to be authed?
						if((filter & BroadcastFilter.AuthedOnly) > BroadcastFilter.None)
							if(!cons[i].Authed)
								continue;

						cons[i].SendReliableCommand(flags, opcode, fields);
					}
				}
			}

			//We are sending to clients?
			if((filter & BroadcastFilter.Clients) > BroadcastFilter.None)
			{
				this.GetConnections(false, out cons);

				if(cons != null)
				{
					for(i = 0; i < cons.Length; i++)
					{
						if((filter & BroadcastFilter.AuthedOnly) > BroadcastFilter.None)
							if(!cons[i].Authed)
								continue;

						cons[i].SendReliableCommand(flags, opcode, fields);
					}
				}
			}

			return UdpConsts.UDP_OK;
		}