I have registered to the PlaybackCurrentTimeIndication event and inspecting if the message data in the event handler has surpassed my end time in order to send a another GoTo Playback command.
private void Initialize()
{
_ImageViewerControl = ClientControl.Instance.GenerateImageViewerControl();
panel.Add(_ImageViewerControl);
EnvironmentManager.Instance.RegisterReceiver(PlaybackTimeChangedHandler, new MessageIdFilter(MessageId.SmartClient.PlaybackCurrentTimeIndication));
}
private object PlaybackTimeChangedHandler(VideoOS.Platform.Messaging.Message message, FQID dest, FQID sender)
{
DateTime time = (DateTime)message.Data;
if (time > _PlaybackEndTime)
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => PlaybackVideo(_PlaybackStartTime, _PlayBackEndTime)));
}
else
PlaybackVideo(_PlaybackStartTime, _PlayBackEndTime);
}
return null;
}
private void PlaybackVideo(FQID cameraFQID, DateTime startTime, DateTime endTime)
{
if (_ImageViewerControl.CameraFQID != null)
{
_ImageViewerControl.Disconnect();
_ImageViewerControl.CameraFQID = null;
}
_ImageViewerControl.CameraFQID = cameraFQID;
_ImageViewerControl.Initialize();
_ImageViewerControl.Connect();
_PlaybackStartTime = startTime;
_PlayBackEndTime = endTime;
EnvironmentManager.Instance.Mode = Mode.ClientPlayback;
EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(
MessageId.SmartClient.PlaybackCommand,
new PlaybackCommandData() { Command = PlaybackData.Goto, DateTime = startTime }));
EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(
MessageId.SmartClient.PlaybackCommand,
new PlaybackCommandData() { Command = PlaybackData.PlayForward, Speed = 1 }));
}