mirror of
https://github.com/PepperDash/PepperDashCore.git
synced 2026-01-11 19:44:44 +00:00
fix: deleted QscCoreDoubleIpClient
- had some non-standard naming conventions - should probably be generalized
This commit is contained in:
committed by
Andrew Welker
parent
6289f4dd7b
commit
03221b40ac
@@ -1,351 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
namespace PepperDash.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Allows for two simultaneous TCP clients to connect to a redundant pair of QSC Core DSPs and manages
|
||||
/// </summary>
|
||||
public class QscCoreDoubleTcpIpClient : IKeyed
|
||||
{
|
||||
/// <summary>
|
||||
/// Key to uniquely identify the instance of the class
|
||||
/// </summary>
|
||||
public string Key { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Fires when a bool value changes to notify the S+ module
|
||||
/// </summary>
|
||||
public event EventHandler<BoolChangeEventArgs> BoolChange;
|
||||
/// <summary>
|
||||
/// Fires when a ushort value changes to notify the S+ module
|
||||
/// </summary>
|
||||
public event EventHandler<UshrtChangeEventArgs> UshortChange;
|
||||
/// <summary>
|
||||
/// Fires when a string value changes to notify the S+ module
|
||||
/// </summary>
|
||||
public event EventHandler<StringChangeEventArgs> StringChange;
|
||||
|
||||
/// <summary>
|
||||
/// The client for the master DSP unit
|
||||
/// </summary>
|
||||
public GenericTcpIpClient MasterClient { get; private set; }
|
||||
/// <summary>
|
||||
/// The client for the slave DSP unit
|
||||
/// </summary>
|
||||
public GenericTcpIpClient SlaveClient { get; private set; }
|
||||
|
||||
string Username;
|
||||
string Password;
|
||||
string LineEnding;
|
||||
|
||||
CommunicationGather MasterGather;
|
||||
CommunicationGather SlaveGather;
|
||||
|
||||
bool IsPolling;
|
||||
int PollingIntervalSeconds;
|
||||
CTimer PollTimer;
|
||||
|
||||
bool SlaveIsActive;
|
||||
|
||||
/// <summary>
|
||||
/// Default constuctor for S+
|
||||
/// </summary>
|
||||
public QscCoreDoubleTcpIpClient()
|
||||
{
|
||||
MasterClient = new GenericTcpIpClient("temp-master");
|
||||
MasterClient.AutoReconnect = true;
|
||||
MasterClient.AutoReconnectIntervalMs = 2000;
|
||||
SlaveClient = new GenericTcpIpClient("temp-slave");
|
||||
SlaveClient.AutoReconnect = true;
|
||||
SlaveClient.AutoReconnectIntervalMs = 2000;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Connects to both DSP units
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="masterAddress"></param>
|
||||
/// <param name="masterPort"></param>
|
||||
/// <param name="slaveAddress"></param>
|
||||
/// <param name="slavePort"></param>
|
||||
/// <param name="username"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <param name="pollingIntervalSeconds"></param>
|
||||
/// <param name="lineEnding"></param>
|
||||
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<GenericCommMethodReceiveTextArgs>(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<GenericCommMethodReceiveTextArgs>(SlaveGather_LineReceived);
|
||||
|
||||
SlaveClient.ConnectionChange -= SlaveClient_SocketStatusChange;
|
||||
SlaveClient.ConnectionChange += SlaveClient_SocketStatusChange;
|
||||
|
||||
MasterClient.Connect();
|
||||
SlaveClient.Connect();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Does not include line feed
|
||||
/// </summary>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const ushort MasterIsActiveId = 3;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const ushort SlaveIsActiveId = 4;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const ushort MainModuleInitiailzeId = 5;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const ushort MasterClientStatusId = 101;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const ushort SlaveClientStatusId = 102;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public const ushort LineReceivedId = 201;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user