mirror of
https://github.com/PepperDash/PepperDashCore.git
synced 2026-02-16 13:14:49 +00:00
Updates to Device to add PreActivate and PostActivate methods. GenericUdpServer initially tested and working.
This commit is contained in:
@@ -13,7 +13,7 @@ using Newtonsoft.Json.Linq;
|
|||||||
|
|
||||||
namespace PepperDash.Core
|
namespace PepperDash.Core
|
||||||
{
|
{
|
||||||
public class GenericUdpServer : Device
|
public class GenericUdpServer : Device, IBasicCommunication
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
@@ -31,6 +31,14 @@ namespace PepperDash.Core
|
|||||||
//public event GenericSocketStatusChangeEventDelegate SocketStatusChange;
|
//public event GenericSocketStatusChangeEventDelegate SocketStatusChange;
|
||||||
public event EventHandler<GenericSocketStatusChageEventArgs> ConnectionChange;
|
public event EventHandler<GenericSocketStatusChageEventArgs> ConnectionChange;
|
||||||
|
|
||||||
|
public SocketStatus ClientStatus
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Server.ServerStatus;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Address of server
|
/// Address of server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -54,7 +62,7 @@ namespace PepperDash.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Indicates that the UDP Server is enabled
|
/// Indicates that the UDP Server is enabled
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsEnabled
|
public bool IsConnected
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
private set;
|
private set;
|
||||||
@@ -75,6 +83,17 @@ namespace PepperDash.Core
|
|||||||
BufferSize = buffefSize;
|
BufferSize = buffefSize;
|
||||||
|
|
||||||
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
|
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
|
||||||
|
CrestronEnvironment.EthernetEventHandler += new EthernetEventHandler(CrestronEnvironment_EthernetEventHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CrestronEnvironment_EthernetEventHandler(EthernetEventArgs ethernetEventArgs)
|
||||||
|
{
|
||||||
|
// Re-enable the server if the link comes back up and the status should be connected
|
||||||
|
if (ethernetEventArgs.EthernetEventType == eEthernetEventType.LinkUp
|
||||||
|
&& IsConnected)
|
||||||
|
{
|
||||||
|
Connect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType)
|
void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType)
|
||||||
@@ -82,35 +101,53 @@ namespace PepperDash.Core
|
|||||||
if (programEventType == eProgramStatusEventType.Stopping)
|
if (programEventType == eProgramStatusEventType.Stopping)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Program stopping. Disabling Server");
|
Debug.Console(1, this, "Program stopping. Disabling Server");
|
||||||
Disable();
|
Disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables the UDP Server
|
/// Enables the UDP Server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Enable()
|
public void Connect()
|
||||||
{
|
{
|
||||||
if (Server == null)
|
if (Server == null)
|
||||||
{
|
{
|
||||||
Server = new UDPServer();
|
Server = new UDPServer();
|
||||||
|
|
||||||
// Start receiving data
|
|
||||||
Server.ReceiveDataAsync(Receive);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Server.EnableUDPServer() == SocketErrorCodes.SOCKET_OK)
|
if (string.IsNullOrEmpty(Hostname))
|
||||||
IsEnabled = true;
|
{
|
||||||
|
Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericUdpServer '{0}': No address set", Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Port < 1 || Port > 65535)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericUdpServer '{0}': Invalid port", Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var status = Server.EnableUDPServer(Hostname, Port);
|
||||||
|
|
||||||
|
Debug.Console(2, this, "SocketErrorCode: {0}", status);
|
||||||
|
if (status == SocketErrorCodes.SOCKET_OK)
|
||||||
|
IsConnected = true;
|
||||||
|
|
||||||
|
// Start receiving data
|
||||||
|
Server.ReceiveDataAsync(Receive);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Disabled the UDP Server
|
/// Disabled the UDP Server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Disable()
|
public void Disconnect()
|
||||||
{
|
{
|
||||||
Server.DisableUDPServer();
|
if(Server != null)
|
||||||
|
Server.DisableUDPServer();
|
||||||
|
|
||||||
IsEnabled = false;
|
IsConnected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -121,20 +158,29 @@ namespace PepperDash.Core
|
|||||||
/// <param name="numBytes"></param>
|
/// <param name="numBytes"></param>
|
||||||
void Receive(UDPServer server, int numBytes)
|
void Receive(UDPServer server, int numBytes)
|
||||||
{
|
{
|
||||||
|
Debug.Console(2, this, "Received {0} bytes", numBytes);
|
||||||
|
|
||||||
if (numBytes > 0)
|
if (numBytes > 0)
|
||||||
{
|
{
|
||||||
var bytes = server.IncomingDataBuffer.Take(numBytes).ToArray();
|
var bytes = server.IncomingDataBuffer.Take(numBytes).ToArray();
|
||||||
|
|
||||||
|
Debug.Console(2, this, "Bytes: {0}", bytes.ToString());
|
||||||
var bytesHandler = BytesReceived;
|
var bytesHandler = BytesReceived;
|
||||||
if (bytesHandler != null)
|
if (bytesHandler != null)
|
||||||
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
|
||||||
|
else
|
||||||
|
Debug.Console(2, this, "bytesHandler is null");
|
||||||
var textHandler = TextReceived;
|
var textHandler = TextReceived;
|
||||||
if (textHandler != null)
|
if (textHandler != null)
|
||||||
{
|
{
|
||||||
var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
|
var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
|
||||||
|
Debug.Console(2, this, "RX: {0}", str);
|
||||||
textHandler(this, new GenericCommMethodReceiveTextArgs(str));
|
textHandler(this, new GenericCommMethodReceiveTextArgs(str));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
Debug.Console(2, this, "textHandler is null");
|
||||||
}
|
}
|
||||||
server.ReceiveDataAsync(Receive);
|
server.ReceiveDataAsync(Receive);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -145,15 +191,18 @@ namespace PepperDash.Core
|
|||||||
{
|
{
|
||||||
var bytes = Encoding.GetEncoding(28591).GetBytes(text);
|
var bytes = Encoding.GetEncoding(28591).GetBytes(text);
|
||||||
|
|
||||||
if (IsEnabled && Server != null)
|
if (IsConnected && Server != null)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "TX: {0}", text);
|
||||||
Server.SendData(bytes, bytes.Length);
|
Server.SendData(bytes, bytes.Length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendBytes(byte[] bytes)
|
public void SendBytes(byte[] bytes)
|
||||||
{
|
{
|
||||||
//if (Debug.Level == 2)
|
//if (Debug.Level == 2)
|
||||||
// Debug.Console(2, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
|
// Debug.Console(2, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
|
||||||
if (IsEnabled && Server != null)
|
if (IsConnected && Server != null)
|
||||||
Server.SendData(bytes, bytes.Length);
|
Server.SendData(bytes, bytes.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,12 @@ namespace PepperDash.Core
|
|||||||
_PostActivationActions.Add(act);
|
_PostActivationActions.Add(act);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void PreActivate()
|
||||||
|
{
|
||||||
|
if (_PreActivationActions != null)
|
||||||
|
_PreActivationActions.ForEach(a => a.Invoke());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets this device ready to be used in the system. Runs any added pre-activation items, and
|
/// Gets this device ready to be used in the system. Runs any added pre-activation items, and
|
||||||
/// all post-activation at end. Classes needing additional logic to
|
/// all post-activation at end. Classes needing additional logic to
|
||||||
@@ -75,14 +81,20 @@ namespace PepperDash.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Activate()
|
public bool Activate()
|
||||||
{
|
{
|
||||||
if (_PreActivationActions != null)
|
//if (_PreActivationActions != null)
|
||||||
_PreActivationActions.ForEach(a => a.Invoke());
|
// _PreActivationActions.ForEach(a => a.Invoke());
|
||||||
var result = CustomActivate();
|
var result = CustomActivate();
|
||||||
if(result && _PostActivationActions != null)
|
//if(result && _PostActivationActions != null)
|
||||||
_PostActivationActions.ForEach(a => a.Invoke());
|
// _PostActivationActions.ForEach(a => a.Invoke());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void PostActivate()
|
||||||
|
{
|
||||||
|
if (_PostActivationActions != null)
|
||||||
|
_PostActivationActions.ForEach(a => a.Invoke());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called in between Pre and PostActivationActions when Activate() is called.
|
/// Called in between Pre and PostActivationActions when Activate() is called.
|
||||||
/// Override to provide addtitional setup when calling activation. Overriding classes
|
/// Override to provide addtitional setup when calling activation. Overriding classes
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("")]
|
||||||
[assembly: AssemblyProduct("Pepperdash_Core")]
|
[assembly: AssemblyProduct("Pepperdash_Core")]
|
||||||
[assembly: AssemblyCopyright("Copyright © PepperDash 2016")]
|
[assembly: AssemblyCopyright("Copyright © PepperDash 2016")]
|
||||||
[assembly: AssemblyVersion("1.0.10.*")]
|
[assembly: AssemblyVersion("1.0.11.*")]
|
||||||
|
|||||||
Reference in New Issue
Block a user