/// <summary> /// Called when the <see cref="OpenSession" /> message is recieved. /// </summary> /// <param name="e">The <see cref="ProtocolEventArgs{OpenSession}" /> instance containing the event data.</param> public void OnSessionOpened(ProtocolEventArgs <OpenSession> e) { if (e.Message.SupportedProtocols.All(x => x.Protocol != (int)Protocols.ChannelStreaming)) { return; } var protocol = e.Message.SupportedProtocols .First(x => x.Protocol == (int)Protocols.ChannelStreaming); IsSimpleStreamer = protocol.ProtocolCapabilities .Where(x => x.Key.EqualsIgnoreCase(ChannelStreamingProducerHandler.SimpleStreamer)) .Select(x => x.Value.Item) .OfType <bool>() .FirstOrDefault(); var handler = Parent.Client.Handler <IChannelStreamingConsumer>(); handler.OnChannelMetadata += OnChannelMetadata; handler.OnChannelData += OnChannelData; CanStart = true; CanStopStreaming = false; UpdateCanDescribe(); Channels.Clear(); ChannelStreamingInfos.Clear(); }
private void OnChannelMetadata(object sender, ProtocolEventArgs <ChannelMetadata> e) { if (!e.Message.Channels.Any()) { Parent.Details.Append(Environment.NewLine + "// No channels were described"); return; } // add to channel metadata collection e.Message.Channels.ForEach(x => { if (Channels.Any(c => c.ChannelUri.EqualsIgnoreCase(x.ChannelUri))) { return; } Channels.Add(x); ChannelStreamingInfos.Add(ToChannelStreamingInfo(x)); }); if (e.Header.MessageFlags != (int)MessageFlags.MultiPart) { LogChannelMetadata(Channels); if (!IsStreaming()) { CanStartStreaming = !IsSimpleStreamer; CanStopStreaming = IsSimpleStreamer; UpdateCanRequestRange(); } } }
private void UpdateCanRequestRange() { CanRequestRange = CanStartStreaming && !IsSimpleStreamer && ChannelStreamingInfos.Any() && ("TimeIndex".EqualsIgnoreCase(Model.Streaming.StreamingType) || "DepthIndex".EqualsIgnoreCase(Model.Streaming.StreamingType)); }
/// <summary> /// Starts the streaming of channel data. /// </summary> public void StartStreaming() { // Prepare ChannelStreamingInfos startIndexes ChannelStreamingInfos.ForEach(x => x.StartIndex = new StreamingStartIndex { Item = GetStreamingStartValue() }); Parent.Client.Handler <IChannelStreamingConsumer>() .ChannelStreamingStart(ChannelStreamingInfos); //CanDescribe = false; CanStartStreaming = false; CanStopStreaming = true; CanRequestRange = false; }