diff --git a/src/Comm/QscCoreDoubleTcpIpClient.cs b/src/Comm/QscCoreDoubleTcpIpClient.cs deleted file mode 100644 index 7011325..0000000 --- a/src/Comm/QscCoreDoubleTcpIpClient.cs +++ /dev/null @@ -1,351 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core -{ - /// - /// Allows for two simultaneous TCP clients to connect to a redundant pair of QSC Core DSPs and manages - /// - public class QscCoreDoubleTcpIpClient : IKeyed - { - /// - /// Key to uniquely identify the instance of the class - /// - public string Key { get; private set; } - - /// - /// Fires when a bool value changes to notify the S+ module - /// - public event EventHandler BoolChange; - /// - /// Fires when a ushort value changes to notify the S+ module - /// - public event EventHandler UshortChange; - /// - /// Fires when a string value changes to notify the S+ module - /// - public event EventHandler StringChange; - - /// - /// The client for the master DSP unit - /// - public GenericTcpIpClient MasterClient { get; private set; } - /// - /// The client for the slave DSP unit - /// - public GenericTcpIpClient SlaveClient { get; private set; } - - string Username; - string Password; - string LineEnding; - - CommunicationGather MasterGather; - CommunicationGather SlaveGather; - - bool IsPolling; - int PollingIntervalSeconds; - CTimer PollTimer; - - bool SlaveIsActive; - - /// - /// Default constuctor for S+ - /// - public QscCoreDoubleTcpIpClient() - { - MasterClient = new GenericTcpIpClient("temp-master"); - MasterClient.AutoReconnect = true; - MasterClient.AutoReconnectIntervalMs = 2000; - SlaveClient = new GenericTcpIpClient("temp-slave"); - SlaveClient.AutoReconnect = true; - SlaveClient.AutoReconnectIntervalMs = 2000; - - } - - /// - /// Connects to both DSP units - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void Connect(string key, string masterAddress, int masterPort, - string slaveAddress, int slavePort, string username, string password, - int pollingIntervalSeconds, string lineEnding) - { - Key = key; - - PollingIntervalSeconds = pollingIntervalSeconds; - Username = username; - Password = password; - LineEnding = lineEnding; - - MasterClient.Initialize(key + "-master"); - SlaveClient.Initialize(key + "-slave"); - - MasterClient.Hostname = masterAddress; - MasterClient.Port = masterPort; - - if (MasterClient != null) - { - MasterClient.Disconnect(); - } - - if (SlaveClient != null) - { - SlaveClient.Disconnect(); - } - - if (MasterGather == null) - { - MasterGather = new CommunicationGather(MasterClient, lineEnding); - MasterGather.IncludeDelimiter = true; - } - - MasterGather.LineReceived -= MasterGather_LineReceived; - MasterGather.LineReceived += new EventHandler(MasterGather_LineReceived); - - MasterClient.ConnectionChange -= MasterClient_SocketStatusChange; - MasterClient.ConnectionChange += MasterClient_SocketStatusChange; - - SlaveClient.Hostname = slaveAddress; - SlaveClient.Port = slavePort; - - if (SlaveGather == null) - { - SlaveGather = new CommunicationGather(SlaveClient, lineEnding); - SlaveGather.IncludeDelimiter = true; - } - - SlaveGather.LineReceived -= MasterGather_LineReceived; - SlaveGather.LineReceived += new EventHandler(SlaveGather_LineReceived); - - SlaveClient.ConnectionChange -= SlaveClient_SocketStatusChange; - SlaveClient.ConnectionChange += SlaveClient_SocketStatusChange; - - MasterClient.Connect(); - SlaveClient.Connect(); - } - - /// - /// - /// - public void Disconnect() - { - if (MasterClient != null) - { - MasterGather.LineReceived -= MasterGather_LineReceived; - MasterClient.Disconnect(); - } - if (SlaveClient != null) - { - SlaveGather.LineReceived -= SlaveGather_LineReceived; - SlaveClient.Disconnect(); - } - if (PollTimer != null) - { - IsPolling = false; - - PollTimer.Stop(); - PollTimer = null; - } - } - - /// - /// Does not include line feed - /// - public void SendText(string s) - { - if (SlaveIsActive) - { - if (SlaveClient != null) - { - Debug.Console(2, this, "Sending to Slave: {0}", s); - SlaveClient.SendText(s); - } - } - else - { - if (MasterClient != null) - { - Debug.Console(2, this, "Sending to Master: {0}", s); - MasterClient.SendText(s); - } - } - } - - void MasterClient_SocketStatusChange(object sender, GenericSocketStatusChageEventArgs args) - { - OnUshortChange((ushort)args.Client.ClientStatus, MasterClientStatusId); - - if (args.Client.IsConnected) - { - MasterGather.LineReceived += MasterGather_LineReceived; - - StartPolling(); - } - else - MasterGather.LineReceived -= MasterGather_LineReceived; - } - - void SlaveClient_SocketStatusChange(object sender, GenericSocketStatusChageEventArgs args) - { - OnUshortChange((ushort)args.Client.ClientStatus, SlaveClientStatusId); - - if (args.Client.IsConnected) - { - SlaveGather.LineReceived += SlaveGather_LineReceived; - - StartPolling(); - } - else - SlaveGather.LineReceived -= SlaveGather_LineReceived; - - } - - - void MasterGather_LineReceived(object sender, GenericCommMethodReceiveTextArgs e) - { - if (e.Text.Contains("login_required")) - { - MasterClient.SendText(string.Format("login {0} {1} \x0d\x0a", Username, Password)); - } - else if (e.Text.Contains("login_success")) - { - // START THE POLLING, YO! - } - else if (e.Text.StartsWith("sr")) - { - // example response "sr "MyDesign" "NIEC2bxnVZ6a" 1 1" - - var split = e.Text.Trim().Split(' '); - if (split[split.Length - 1] == "1") - { - SlaveIsActive = false; - OnBoolChange(false, SlaveIsActiveId); - OnBoolChange(true, MasterIsActiveId); - } - } - if (!SlaveIsActive) - OnStringChange(e.Text, LineReceivedId); - } - - void SlaveGather_LineReceived(object sender, GenericCommMethodReceiveTextArgs e) - { - if (e.Text.Contains("login_required")) - { - SlaveClient.SendText(string.Format("login {0} {1} \x0d\x0a", Username, Password)); - } - else if (e.Text.Contains("login_success")) - { - // START THE POLLING, YO! - } - else if (e.Text.StartsWith("sr")) - { - var split = e.Text.Trim().Split(' '); - if (split[split.Length - 1] == "1") - { - SlaveIsActive = true; - OnBoolChange(true, SlaveIsActiveId); - OnBoolChange(false, MasterIsActiveId); - } - } - if (SlaveIsActive) - OnStringChange(e.Text, LineReceivedId); - } - - void StartPolling() - { - if (!IsPolling) - { - IsPolling = true; - - Poll(); - if (PollTimer != null) - PollTimer.Stop(); - - PollTimer = new CTimer(o => Poll(), null, PollingIntervalSeconds * 1000, PollingIntervalSeconds * 1000); - } - } - - void Poll() - { - if (MasterClient != null && MasterClient.IsConnected) - { - Debug.Console(2, this, "Polling Master."); - MasterClient.SendText("sg\x0d\x0a"); - - } - if (SlaveClient != null && SlaveClient.IsConnected) - { - Debug.Console(2, this, "Polling Slave."); - SlaveClient.SendText("sg\x0d\x0a"); - } - } - - - - // login NAME PIN ---> login_success, login_failed - - // status get - // sg --> sr DESIGN_NAME DESIGN_ID IS_PRIMARY IS_ACTIVE - - // CRLF - - void OnBoolChange(bool state, ushort type) - { - var handler = BoolChange; - if (handler != null) - handler(this, new BoolChangeEventArgs(state, type)); - } - - void OnUshortChange(ushort state, ushort type) - { - var handler = UshortChange; - if (handler != null) - handler(this, new UshrtChangeEventArgs(state, type)); - } - - void OnStringChange(string value, ushort type) - { - var handler = StringChange; - if (handler != null) - handler(this, new StringChangeEventArgs(value, type)); - } - - /// - /// - /// - public const ushort MasterIsActiveId = 3; - /// - /// - /// - public const ushort SlaveIsActiveId = 4; - /// - /// - /// - public const ushort MainModuleInitiailzeId = 5; - - /// - /// - /// - public const ushort MasterClientStatusId = 101; - /// - /// - /// - public const ushort SlaveClientStatusId = 102; - - /// - /// - /// - public const ushort LineReceivedId = 201; - } -} \ No newline at end of file