using System; using System.Diagnostics; using log4net; using TBF.BenchControl.Network.Telnet; namespace TBF.BenchControl.Network.Camera.CLP1611 { public class LiveStreamOp : IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(LiveStreamOp)); readonly Camera camera; readonly Telnet.TelnetClient telnet; readonly string command; bool liveStreamCommandSent; /// /// Events: Event.None or Event.Error /// /// CLP1611.Camera reference public LiveStreamOp(Camera camera, Telnet.TelnetClient telnet, string command) { this.camera = camera; this.telnet = telnet; this.command = command; } public void Start() { liveStreamCommandSent = false; } public Event Run() { if (camera.CameraCfg.DebugLevel == Config.Entities.DebugMode.Simulate) return Event.None; log.DebugFormat("Run(): telnet.State = {0}, liveStreamCommandSent = {1}", telnet.State, liveStreamCommandSent); if (!liveStreamCommandSent) { if (camera.Running && (telnet.State == TelnetClient.TelnetState.Inactive)) { telnet.Enqueue(new Telnet.Command(Telnet.CmdAction.SEND_STRING, command)); liveStreamCommandSent = true; log.WarnFormat("{0} IP={1} command={2}", camera.Name, camera.IPAddress, command); } } return Event.None; } public void Stop() { if (camera.CameraCfg.DebugLevel == Config.Entities.DebugMode.Simulate) return; log.DebugFormat("Stop(): telnet.State = {0}, liveStreamCommandSent = {1}", telnet.State, liveStreamCommandSent); if (liveStreamCommandSent) { telnet.Enqueue(new Telnet.Command(Telnet.CmdAction.SEND_COMMAND, Telnet.TelnetClient.CtrlCCommand)); log.WarnFormat("{0} IP={1} command=CTRL-C", camera.Name, camera.IPAddress); } } } }