Exemplo n.º 1
0
        public Task<Progressive.PecaStarter5.Plugins.BroadcastingParameter> BroadcastAsync(
            IPeercast peercast, IEnumerable<IExternalYellowPages> externalYellowPagesList,
            IYellowPages yellowPages, int? acceptedHash,
            Dictionary<string, string> yellowPagesParameter,
            BroadcastParameter parameter, IProgress<string> progress)
        {
            return Task.Factory.StartNew(() =>
            {
                // YPの更新確認
                ThrowIfYellowPagesUpdatedAwait(yellowPages, acceptedHash, progress);

                // 開始
                var broadcastedParameter = StartBroadcastAwait(peercast, parameter,
                    yellowPages, yellowPagesParameter, progress);

                // 外部YPに通知
                if (yellowPages.IsExternal)
                {
                    try
                    {
                        Find(externalYellowPagesList, yellowPages.Name)
                            .OnBroadcastedAsync(broadcastedParameter).Wait();
                    }
                    catch (Exception ex)
                    {
                        peercast.StopAsync(broadcastedParameter.Id).Wait();
                        throw ex;
                    }
                }

                progress.Report("チャンネルを作成しました");
                return broadcastedParameter;
            });
        }
        public YellowPagesViewModel(IYellowPages model)
        {
            this.Parameters = new DynamicStringDictionary();
            this.Model = model;
            foreach (var component in model.Components)
            {
                switch (component)
                {
                    case "listeners_invisibility":
                    case "listeners_visibility":
                    case "no_log":
                    case "time_invisibility":
                        Parameters.Dictionary[component] = "False";
                        continue;
                    default:
                        Parameters.Dictionary[component] = "";
                        continue;
                }
            }

            Parameters.PropertyChanged += (sender, e) =>
            {
                settings.Prefix = Prefix;
            };
        }
        public void LoadChannel(IYellowPages yellowPages, IChannel channel)
        {
            // YPタブを指定のYPに
            if (yellowPages != null)
                YellowPagesListViewModel.SelectedYellowPagesModel = yellowPages;
            var genre = YellowPagesListViewModel.SelectedYellowPages.Parse(channel.Genre);

            // ソースタブに値を反映
            var esvm = ExternalSourceViewModel;
            esvm.Name.Value = channel.Name;
            esvm.Genre.Value = genre;
            esvm.Description.Value = channel.Description;
            esvm.ContactUrl = channel.ContactUrl;
            esvm.Comment.Value = channel.Comment;
            esvm.Name.Value = channel.Name;
        }
Exemplo n.º 4
0
        private Progressive.PecaStarter5.Plugins.BroadcastingParameter StartBroadcastAwait(IPeercast peercast, BroadcastParameter parameter,
            IYellowPages yellowPages, Dictionary<string, string> yellowPagesParameter,
            IProgress<string> progress)
        {
            progress.Report("チャンネルを作成中...");
            var param = parameter.Clone();
            param.Genre = yellowPages.GetPrefix(yellowPagesParameter) + param.Genre;
            var tuple = peercast.BroadcastAsync(
                new Peercast4Net.Datas.YellowPages() { Name = yellowPages.Name, Url = yellowPages.Host },
                param).Result;

            return new Progressive.PecaStarter5.Plugins.BroadcastingParameter
            {
                Bitrate = tuple.Item2,
                Id = tuple.Item1,
                YellowPagesParameters = yellowPagesParameter,
                BroadcastParameter = parameter
            };
        }
Exemplo n.º 5
0
 public Task<Progressive.PecaStarter5.Plugins.BroadcastingParameter> BroadcastAsync(IYellowPages yellowPages, int? acceptedHash,
     Dictionary<string, string> yellowPagesParameter,
     BroadcastParameter parameter, IProgress<string> progress)
 {
     return service.BroadcastAsync(Peercast, externalYellowPagesList,
         yellowPages, acceptedHash, yellowPagesParameter, parameter, progress)
         .ContinueWith(t =>
     {
         if (t.IsFaulted)
             throw t.Exception;
         var broadcasting = t.Result;
         Channel = ChannelDxo.ToChannel(broadcasting);
         ChannelStatusChanged(this,
             new ChannelStatusChangedEventArgs(Channel));
         timer.BeginTimer(yellowPages, broadcasting.Id);
         // プラグイン処理
         plugins.OnBroadcastAsync(broadcasting);
         return broadcasting;
     });
 }
Exemplo n.º 6
0
 private void ThrowIfYellowPagesUpdatedAwait(
     IYellowPages yellowPages, int? acceptedHash, IProgress<string> progress)
 {
     if (!yellowPages.IsCheckNoticeUrl || !acceptedHash.HasValue)
     {
         return;
     }
     progress.Report("規約の更新を確認中...");
     try
     {
         if (!IsUpdatedYellowPagesAsync(yellowPages, acceptedHash.Value).Result)
         {
             return;
         }
     }
     catch (WebException ex)
     {
         throw new YellowPagesException("イエローページへのアクセスに失敗しました(" + ex.Message + ")");
     }
     throw new YellowPagesException("イエローページの規約が更新されています。規約を再確認してください。");
 }
 public SelectedEventArgs(IChannel channel, IYellowPages yellowPages)
 {
     Channel = channel;
     YellowPages = yellowPages;
 }
Exemplo n.º 8
0
 public Task UpdateAsync(IYellowPages yellowPages, Dictionary<string, string> yellowPagesParameter,
     Progressive.Peercast4Net.Datas.UpdateParameter parameter, IProgress<string> progress)
 {
     return service.UpdateAsync(Peercast, externalYellowPagesList,
         yellowPages, yellowPagesParameter, parameter, progress)
         .ContinueWith(t =>
     {
         if (t.IsFaulted)
             throw t.Exception;
         Channel = ChannelDxo.ToChannel(t.Result);
         ChannelStatusChanged(this,
             new ChannelStatusChangedEventArgs(Channel));
         // プラグイン処理
         plugins.OnUpdateAsync(t.Result);
     });
 }
Exemplo n.º 9
0
        private void timer_Ticked(long count, IYellowPages yellowPages, string id)
        {
            try
            {
                IChannel channel = null;
                // 10分おき
                if (count % 10 == 0)
                {
                    channel = service.OnTickedAsync(Peercast, yellowPages, id).Result;
                }

                // プラグイン処理
                plugins.OnTickedAwait(count, channel,
                    () => peercast.GetChannelAsync(id).Result);
            }
            catch (Exception ex)
            {
                OnAsyncExceptionThrown(ex);
            }
        }
Exemplo n.º 10
0
        public void Interrupt(IYellowPages yellowPages, Progressive.PecaStarter5.Plugins.InterruptedParameter parameter)
        {
            timer.EndTimer();

            plugins.OnInterruptedAsync(parameter);

            timer.BeginTimer(yellowPages, parameter.Id);
        }
Exemplo n.º 11
0
 public Task StopAsync(IYellowPages yellowPages, Dictionary<string, string> yellowPagesParameter,
     string name, string id, IProgress<string> progress)
 {
     return service.StopAsync(Peercast, externalYellowPagesList,
         yellowPages, yellowPagesParameter, name, id, progress)
         .ContinueWith(t =>
     {
         if (t.IsFaulted)
             throw t.Exception;
         Channel = null;
         ChannelStatusChanged(this,
             new ChannelStatusChangedEventArgs(Channel));
         // プラグイン処理
         plugins.OnStopAsync(t.Result);
         timer.EndTimer();
     });
 }
Exemplo n.º 12
0
        public Task<Progressive.PecaStarter5.Plugins.UpdatedParameter> UpdateAsync(
            IPeercast peercast, IEnumerable<IExternalYellowPages> externalYellowPagesList,
            IYellowPages yellowPages, Dictionary<string, string> yellowPagesParameter,
            UpdateParameter parameter, IProgress<string> progress)
        {
            return Task.Factory.StartNew(() =>
            {
                // 更新
                progress.Report("通信中...");
                var param = (UpdateParameter)parameter.Clone();
                param.Genre = yellowPages.GetPrefix(yellowPagesParameter) + param.Genre;
                peercast.UpdateAsync(param).Wait();

                var updatedParameter = new Progressive.PecaStarter5.Plugins.UpdatedParameter
                {
                    YellowPagesParameters = yellowPagesParameter,
                    UpdateParameter = parameter
                };

                // 外部YPに通知
                if (yellowPages.IsExternal)
                {
                    Find(externalYellowPagesList, yellowPages.Name).OnUpdatedAsync(updatedParameter).Wait();
                }

                progress.Report("チャンネル情報を更新しました");
                return updatedParameter;
            });
        }
Exemplo n.º 13
0
 private async Task<bool> IsUpdatedYellowPagesAsync(IYellowPages yellowPages, int acceptedHash)
 {
     if (acceptedHash != await yellowPages.GetNoticeHashAsync())
     {
         return true;
     }
     return false;
 }
Exemplo n.º 14
0
        public Task<IChannel> OnTickedAsync(IPeercast peercast, IYellowPages yellowPages, string id)
        {
            return Task.Factory.StartNew(() =>
            {
                var channel = peercast.GetChannelAsync(id).Result;

                // 外部YPに通知
                if (yellowPages.IsExternal)
                {
                    ((IExternalYellowPages)yellowPages).OnTickedAsync(
                        channel.Name, channel.TotalRelays, channel.TotalListeners).Wait();
                }

                return channel;
            });
        }
Exemplo n.º 15
0
        public Task<Progressive.PecaStarter5.Plugins.StoppedParameter> StopAsync(
            IPeercast peercast, IEnumerable<IExternalYellowPages> externalYellowPagesList,
            IYellowPages yellowPages, Dictionary<string, string> yellowPagesParameter,
            string name, string id, IProgress<string> progress)
        {
            return Task.Factory.StartNew(() =>
            {
                // 停止
                progress.Report("通信中...");

                var stoppedParameter = new Progressive.PecaStarter5.Plugins.StoppedParameter
                {
                    Name = name,
                    Id = id,
                    YellowPagesParameters = yellowPagesParameter
                };

                // 外部YPに通知
                if (yellowPages.IsExternal)
                {
                    Find(externalYellowPagesList, yellowPages.Name).OnStopedAsync(stoppedParameter).Wait();
                }

                peercast.StopAsync(id).Wait();

                progress.Report("チャンネルを切断しました");
                return stoppedParameter;
            });
        }
Exemplo n.º 16
0
 public void BeginTimer(IYellowPages yellowPages, string id)
 {
     const int Period = 1 * 60 * 1000;
     this.count = 0;
     this.timer = new Timer(Callback, Tuple.Create(yellowPages, id), Period, Period);
 }