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; }
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 }; }
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; }); }
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; }
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); }); }
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); } }
public void Interrupt(IYellowPages yellowPages, Progressive.PecaStarter5.Plugins.InterruptedParameter parameter) { timer.EndTimer(); plugins.OnInterruptedAsync(parameter); timer.BeginTimer(yellowPages, parameter.Id); }
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(); }); }
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; }); }
private async Task<bool> IsUpdatedYellowPagesAsync(IYellowPages yellowPages, int acceptedHash) { if (acceptedHash != await yellowPages.GetNoticeHashAsync()) { return true; } return false; }
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; }); }
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; }); }
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); }