예제 #1
0
        IEnumerator Broadcast(BroadcastInfo bi)
        {
            if (bi.useTimeScale)
            {
                yield return(new WaitForSeconds(bi.delayTime));
            }
            else
            {
                float pauseEndTime = Time.realtimeSinceStartup + bi.delayTime;
                while (Time.realtimeSinceStartup < pauseEndTime)
                {
                    yield return(0);
                }
            }

            if (bi.em.targetObj)
            {
                // Object Event
                EventManager.SendObjectEvent(bi.em);
            }
            else
            {
                // Global Event
                EventManager.Broadcast(bi.em);
            }

            // remove timer
            timerCount--;
            if (timerCount <= 0)
            {
                Destroy(this);
            }
        }
예제 #2
0
    public string GetFilename(BroadcastInfo broadcast)
    {
        string ext = (broadcast.MediaType == MediaType.MP3) ? "mp3" : "wav";
        string dt  = broadcast.StartTime.ToString("dd-MM-yyyy-hh-mm-ss");

        return(string.Format("{0}-{1}.{2}", dt, broadcast.Username, ext));
    }
예제 #3
0
 public UploadBroadcastRequest(User user, BroadcastInfo broadcast, MediaType format, int port, int bufferSize = 1024) : base(user)
 {
     Broadcast  = broadcast;
     Format     = format;
     Port       = port;
     BufferSize = bufferSize;
 }
예제 #4
0
 static void WithBroadcaster(Action <Broadcaster> f)
 {
     WithSync(() => {
         var broadcast = new BroadcastInfo(new RabbitHostInfo("localhost"), "BroadcastTestExchange");
         using (var b1 = new Broadcaster(broadcast))
         {
             f(b1);
         }
     });
 }
예제 #5
0
    public void Add(BroadcastInfo broadcast)
    {
        CreateCommand("INSERT INTO broadcasts " +
                      "(username, start_time, duration, data_source_type, media_type, filename, label) " +
                      "VALUES ('{0}', '{1}', {2}, {3}, {4}, {5}, '{6}');",
                      broadcast.Username, broadcast.StartTime.ToString(DT_FORMAT),
                      Math.Ceiling(broadcast.Duration.TotalSeconds), (int)broadcast.Type, (int)broadcast.MediaType,
                      (broadcast.Filename != null) ? "'" + broadcast.Filename + "'" : "NULL", broadcast.Label).
        ExecuteNonQuery();

        broadcast.Id = (int)connection.LastInsertRowId;
    }
예제 #6
0
        public static void AddTimer(float time, System.Action callback, object param, bool useTimeScale)
        {
            BroadcastInfo bi = new BroadcastInfo();

            bi.callback     = callback;
            bi.delayTime    = time;
            bi.useTimeScale = useTimeScale;
            EventTimer et = EventTimer.Get(GetGameObject(null));

            if (et != null)
            {
                et.AddTimerInternal(bi);
            }
        }
예제 #7
0
        public static void AddTimer(EventMessage em, Vector2 delayTime, bool useTimeScale)
        {
            // Get GameObject from Object
            GameObject attachObj = GetGameObject(em.origSrc);

            BroadcastInfo bi = new BroadcastInfo();

            bi.em = em;

            // Calculate delay time
            bi.delayTime    = Random.Range(Mathf.Min(delayTime[0], delayTime[1]), Mathf.Max(delayTime[0], delayTime[1]));
            bi.useTimeScale = useTimeScale;

            EventTimer et = EventTimer.Get(attachObj);

            if (et != null)
            {
                et.AddTimerInternal(bi);
            }
        }
예제 #8
0
        private void broadcast(object o)
        {
            BroadcastInfo bInfo   = o as BroadcastInfo;
            Socket        s       = bInfo.s;
            string        channel = bInfo.channel;
            string        msg     = bInfo.msg;

            if (channel == "")
            {
                return;
            }

            foreach (var item in channelToSocket[channel])
            {
                if (item != s)
                {
                    MyNetWorkLibrary.SendAndRecvHelper.SendVarData(item, Encoding.UTF8.GetBytes(msg));
                }
            }
        }
예제 #9
0
        public static void BroadCast(BroadcastInfo b)
        {
            uint unixTimestamp = (uint)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMinutes; // min !

            switch (b.flag)
            {
            case 1:
                NT.BroadcastFile(b.filePath, b.header);
                BroadcastQueue.RemoveAt(0);
                break;

            case 2:
                if (unixTimestamp > LATEST_FBROADCAST_TICK + BROADCAST_FULL_BLOCKCHAIN_CLOCK)
                {
                    //NT.BroadcastFile(GetLatestBlockChainFilePath(), 1);
                    uint latestIndex = RequestLatestBlockIndex(true);
                    Print("broadcast = " + latestIndex);
                    NT.BroadcastBlockchain(1, latestIndex);
                    BroadcastQueue         = new List <BroadcastInfo>();
                    LATEST_FBROADCAST_TICK = unixTimestamp;
                }
                else
                {
                    uint latestIndex = RequestLatestBlockIndex(true);
                    int  startI      = (int)(latestIndex - BROADCAST_BLOCKS_LIMIT);
                    Print("broadcast = " + latestIndex);
                    if (startI < 1)
                    {
                        startI = 1;;
                    }
                    NT.BroadcastBlockchain((uint)startI, latestIndex);
                    BroadcastQueue.RemoveAt(0);
                }
                break;
            }
        }
예제 #10
0
        public async Task <ActionResult> SendNotificationToOrganisation(BroadcastInfo taskInfo)
        {
            try
            {
                var currentTaskList           = new List <BroadcastInfo>();
                List <BroadcastInfo> taskList = new List <BroadcastInfo>();
                _taskList.TryGetValue("taskList", out currentTaskList);

                taskInfo.taskId = Guid.NewGuid();

                if (currentTaskList == null)
                {
                    taskList.Add(taskInfo);
                    _taskList.AddOrUpdate("taskList", taskList, (key, newValue) => taskList);
                    ViewBag.TaskList = taskList;
                }
                else
                {
                    currentTaskList.Add(taskInfo);
                    _taskList.AddOrUpdate("taskList", currentTaskList, (key, newValue) => currentTaskList);
                    ViewBag.TaskList = currentTaskList;
                }

                // Graph client for user.
                var graphClient = SimpleGraphClient.GetGraphClient(taskInfo.access_token);

                // Graph client for app.
                var graphClientApp = SimpleGraphClient.GetGraphClientforApp(_configuration["AzureAd:MicrosoftAppId"], _configuration["AzureAd:MicrosoftAppPassword"], _configuration["AzureAd:TenantId"]);
                var usersList      = await graphClient.Users
                                     .Request()
                                     .GetAsync();

                var installedAppsForCurrentUser = await graphClient.Users[taskInfo.userId].Teamwork.InstalledApps
                                                  .Request()
                                                  .Expand("teamsAppDefinition")
                                                  .GetAsync();

                // Get app id using app display name.
                var appId = installedAppsForCurrentUser.Where(id => id.TeamsAppDefinition.DisplayName == "Activity feed broadcast").Select(x => x.TeamsAppDefinition.TeamsAppId);

                Parallel.ForEach(usersList, async users =>
                {
                    var installedApp = await graphClient.Users[users.Id].Teamwork.InstalledApps
                                       .Request()
                                       .Expand("teamsApp")
                                       .GetAsync();

                    var response       = new HttpResponseMessage();
                    var installationId = installedApp.Where(id => id.TeamsApp.DisplayName == "Activity feed broadcast").Select(x => x.TeamsApp.Id);
                    var client         = new HttpClient();
                    var url            = "https://teams.microsoft.com/l/entity/" + appId.ToList()[0] + "/broadcast?context={\"subEntityId\":\"" + taskInfo.taskId + "\"}";
                    var postData       = new
                    {
                        topic = new TeamworkActivityTopic()
                        {
                            Source = TeamworkActivityTopicSource.Text,
                            Value  = $"{taskInfo.title}",
                            WebUrl = url
                        },
                        activityType = "approvalRequired",
                        previewText  = new ItemBody
                        {
                            Content = $"Message By:"
                        },
                        templateParameters = new List <Microsoft.Graph.KeyValuePair>()
                        {
                            new Microsoft.Graph.KeyValuePair
                            {
                                Name  = "approvalTaskId",
                                Value = taskInfo.title
                            }
                        }
                    };

                    var data = new StringContent(JsonConvert.SerializeObject(postData), Encoding.UTF8, "application/json");

                    if (installationId.ToList().Count == 0)
                    {
                        var userScopeTeamsAppInstallation = new UserScopeTeamsAppInstallation
                        {
                            AdditionalData = new Dictionary <string, object>()
                            {
                                { "*****@*****.**", "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/" + appId.ToList()[0] }
                            }
                        };

                        await graphClient.Users[users.Id].Teamwork.InstalledApps
                        .Request()
                        .AddAsync(userScopeTeamsAppInstallation);

                        client.DefaultRequestHeaders.Authorization =
                            new AuthenticationHeaderValue("Bearer", taskInfo.access_token);
                        await client.PostAsync($"https://graph.microsoft.com/v1.0/users/{users.Id}/teamwork/sendActivityNotification", data);
                    }
                    else
                    {
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", taskInfo.access_token);
                        response = await client.PostAsync($"https://graph.microsoft.com/v1.0/users/{users.Id}/teamwork/sendActivityNotification", data);
                    }

                    if (response.StatusCode == HttpStatusCode.TooManyRequests)
                    {
                        await Policy
                        .Handle <HttpRequestException>()
                        .OrResult <HttpResponseMessage>(response => response.StatusCode == HttpStatusCode.TooManyRequests ||
                                                        response.StatusCode == HttpStatusCode.ServiceUnavailable)
                        .WaitAndRetryAsync(3,
                                           sleepDurationProvider: (retryCount, response, context) =>
                        {
                            var delay = TimeSpan.FromSeconds(0);
                            // if an exception was thrown, this will be null
                            if (response.Result != null)
                            {
                                if (!response.Result.Headers.TryGetValues("Retry-After", out IEnumerable <string> values))
                                {
                                    return(delay);
                                }

                                if (int.TryParse(values.First(), out int delayInSeconds))
                                {
                                    delay = TimeSpan.FromSeconds(delayInSeconds);
                                }
                            }
                            else
                            {
                                var exponentialBackoff = Math.Pow(2, retryCount);
                                var delayInSeconds     = exponentialBackoff * 10000;
                                delay = TimeSpan.FromMilliseconds(delayInSeconds);
                            }

                            return(delay);
                        },
                                           onRetryAsync: async(response, timespan, retryCount, context) =>
                        {
                        }
                                           ).ExecuteAsync(async() =>
                        {
                            return(await client.PostAsync($"https://graph.microsoft.com/v1.0/users/{users.Id}/teamwork/sendActivityNotification", data));
                        }
                                                          );
                    }
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            return(View("Index"));
        }
예제 #11
0
    public string GenerateFullFilename(BroadcastInfo broadcast)
    {
        string filename = GetFilename(broadcast);

        return(Path.Combine(PathRoot, filename));
    }
예제 #12
0
 public string GetFullFilename(BroadcastInfo broadcast)
 {
     return(Path.Combine(PathRoot, broadcast.Filename));
 }
예제 #13
0
 public PlanBroadcastRequest(User user, BroadcastInfo broadcast) : base(user)
 {
     Broadcast = broadcast;
 }
예제 #14
0
 void AddTimerInternal(BroadcastInfo bi)
 {
     timerCount++;
     StartCoroutine("Broadcast", bi);
 }
예제 #15
0
 private void LoadBroadcast(BroadcastInfo broadcast)
 {
     txtDescription.Text = broadcast.Label;
     dtpDate.Value       = broadcast.StartTime.Date;
     dtpTime.Value       = broadcast.StartTime;
 }
예제 #16
0
 public RemoveBroadcasRequest(User user, BroadcastInfo broadcast) : base(user)
 {
     Broadcast = broadcast;
 }
예제 #17
0
        private void OnBroadcast()
        {
            var source = StreamSource;
              var contentReaderFactory = ContentReaderFactory;
              if (!CanBroadcast(source, contentReaderFactory, channelName)) return;
              IYellowPageClient yellowPage = this.yellowPage;
              var channelInfo = CreateChannelInfo(this);
              var channelTrack = CreateChannelTrack(this);

              var channel_id = Utils.CreateChannelID(
            peerCast.BroadcastID,
            channelName,
            genre,
            source.ToString());
              var channel = peerCast.BroadcastChannel(
            yellowPage,
            channel_id,
            channelInfo,
            source,
            contentReaderFactory);
              if (channel!=null) {
            channel.ChannelTrack = channelTrack;
              }

              var info = new BroadcastInfo {
            StreamUrl   = this.StreamUrl,
            Bitrate     = this.bitrate.HasValue ? this.bitrate.Value : 0,
            ContentType = this.ContentType.ContentReaderFactory.Name,
            YellowPage  = this.YellowPage!=null ? this.YellowPage.Name : null,
            ChannelName = this.ChannelName,
            Genre       = this.Genre,
            Description = this.Description,
            Comment     = this.Comment,
            ContactUrl  = this.ContactUrl,
            TrackTitle  = this.TrackTitle,
            TrackAlbum  = this.TrackAlbum,
            TrackArtist = this.TrackArtist,
            TrackGenre  = this.TrackGenre,
            TrackUrl    = this.TrackUrl,
              };
              var settings = PeerCastApplication.Current.Settings.Get<WPFSettings>();
              if (!settings.BroadcastHistory.Any(i => i.Equals(info))) {
            settings.BroadcastHistory =
              Enumerable.Repeat(info, 1)
                    .Concat(settings.BroadcastHistory)
                    .Take(20)
                    .ToArray();
              }
        }
예제 #18
0
        private void NewBroadcast()
        {
            AudioFileReader reader;
            var             file = GetFilename();

            if (file == null)
            {
                return;
            }
            else
            {
                reader = new AudioFileReader(file);
            }

            var duration = (rbLiveBroadcast.Checked) ? dtpDuration.Value.TimeOfDay : reader.TotalTime;

            var broadcast    = new BroadcastInfo(currentUser.Username, StartTime, duration, BroadcastType, MediaType, txtDescription.Text);
            var planRequest  = new PlanBroadcastRequest(currentUser, broadcast);
            var planResponse = client.SendAndRecieve <PlanBroadcastResponse>(planRequest);

            if (planRequest != null)
            {
                switch (planResponse.Result)
                {
                case PlanBroadcastResult.CanUpload:
                    break;

                case PlanBroadcastResult.CannotUpload:
                    MessageBox.Show("Hlášení koliduje s jiným(i) hlášením(i), zvolte, prosím, jiný čas.");
                    return;

                case PlanBroadcastResult.CanUploadIfAdmin:
                    var result = MessageBox.Show("Hlášení koliduje s jiným(i) hlášením(i), chcete tato hlášení odstranit?", "Otázka", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        break;
                    }
                    else
                    {
                        return;
                    }
                }
            }
            else
            {
                return;
            }

            if (!rbLiveBroadcast.Checked)
            {
                var settings       = Settings.Default;
                var uploadRequest  = new UploadBroadcastRequest(currentUser, broadcast, MediaType.MP3, settings.BROADCAST_PORT, settings.TRANSFER_BUFFER_SIZE); //TODO: Media file detection
                var uploadResponse = client.SendAndRecieve <UploadBroadcastResponse>(uploadRequest);
                if (uploadResponse != null)
                {
                    switch (uploadResponse.Result)
                    {
                    case UploadBroadcastResult.Success:
                        FileStreamer streamer = new FileStreamer(file, settings.TRANSFER_BUFFER_SIZE, settings.SERVER_IP, settings.BROADCAST_PORT);     //TODO: From settings...
                        streamer.Start();
                        MessageBox.Show("Vaše hlášení bylo úspěšně naplánováno.", "Oznámení", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                        break;

                    case UploadBroadcastResult.CollissionBlocked:
                        MessageBox.Show("Hlášení koliduje s jiným(i) hlášením(i), zvolte, prosím, jiný čas.", "Upozornění", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        break;
                    }
                }
                else
                {
                    return;
                }
            }
        }
예제 #19
0
 public TimeLineTask(BroadcastInfo task)
 {
     Task   = task;
     XStart = 0;
     XEnd   = 0;
 }