/// <summary> /// 接続先を指定してチャンネルのリレーを開始します。 /// URIから接続プロトコルも判別します /// </summary> /// <param name="channel_id">リレーするチャンネルID</param> /// <param name="tracker">接続起点およびプロトコル</param> /// <returns>Channelのインスタンス</returns> public Channel RelayChannel(Guid channel_id, Uri tracker) { logger.Debug("Requesting channel {0} from {1}", channel_id.ToString("N"), tracker); var channel = new RelayChannel(this, GetNetworkTypeFromUri(tracker), channel_id); channel.Start(tracker); ReplaceCollection(ref channels, orig => orig.Add(channel)); DispatchMonitorEvent(mon => mon.OnChannelChanged(PeerCastChannelAction.Added, channel)); return(channel); }
/// <summary> /// 接続先を指定してチャンネルのリレーを開始します。 /// URIから接続プロトコルも判別します /// </summary> /// <param name="channel_id">リレーするチャンネルID</param> /// <param name="tracker">接続起点およびプロトコル</param> /// <returns>Channelのインスタンス</returns> public Channel RelayChannel(Guid channel_id, Uri tracker) { logger.Debug("Requesting channel {0} from {1}", channel_id.ToString("N"), tracker); var channel = new RelayChannel(this, GetNetworkTypeFromUri(tracker), channel_id); channel.Start(tracker); ReplaceCollection(ref channels, orig => { var new_collection = new List <Channel>(orig); new_collection.Add(channel); return(new_collection); }); if (ChannelAdded != null) { ChannelAdded(this, new ChannelChangedEventArgs(channel)); } return(channel); }
/// <summary> /// 接続先を指定してチャンネルのリレーを開始します。 /// URIから接続プロトコルも判別します /// </summary> /// <param name="channel_id">リレーするチャンネルID</param> /// <param name="tracker">接続起点およびプロトコル</param> /// <returns>Channelのインスタンス</returns> public Channel RelayChannel(Guid channel_id, Uri tracker) { logger.Debug("Requesting channel {0} from {1}", channel_id.ToString("N"), tracker); NetworkType networkType; if (tracker.Scheme == "giv") { // ホスト名だとIPバージョンが決定できないが、とりあえず動くようにする。 networkType = NetworkType.IPv4; } else { networkType = GetNetworkTypeFromUri(tracker); } var channel = new RelayChannel(this, networkType, channel_id); channel.Start(tracker); ReplaceCollection(ref channels, orig => orig.Add(channel)); DispatchMonitorEvent(mon => mon.OnChannelChanged(PeerCastChannelAction.Added, channel)); return(channel); }
/// <summary> /// 接続先を指定してチャンネルのリレーを開始します。 /// URIから接続プロトコルも判別します /// </summary> /// <param name="channel_id">リレーするチャンネルID</param> /// <param name="tracker">接続起点およびプロトコル</param> /// <returns>Channelのインスタンス</returns> public Channel RelayChannel(Guid channel_id, Uri tracker) { logger.Debug("Requesting channel {0} from {1}", channel_id.ToString("N"), tracker); var channel = new RelayChannel(this, channel_id); Utils.ReplaceCollection(ref channels, orig => { var new_collection = new List<Channel>(orig); new_collection.Add(channel); return new_collection; }); channel.Start(tracker); if (ChannelAdded!=null) ChannelAdded(this, new ChannelChangedEventArgs(channel)); return channel; }