Merge pull request #196 from PepperDash/linkup-reconnect-tcp

fix: adds ethernet event handler to GenericTcpClient to connect on li…
This commit is contained in:
Neil Dorin
2025-12-12 13:20:50 -05:00
committed by GitHub

View File

@@ -186,6 +186,7 @@ namespace PepperDash.Core
{ {
StreamDebugging = new CommunicationStreamDebugging(key); StreamDebugging = new CommunicationStreamDebugging(key);
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
CrestronEnvironment.EthernetEventHandler += new EthernetEventHandler(CrestronEnvironment_EthernetEventHandler);
AutoReconnectIntervalMs = 5000; AutoReconnectIntervalMs = 5000;
Hostname = address; Hostname = address;
Port = port; Port = port;
@@ -206,6 +207,7 @@ namespace PepperDash.Core
{ {
StreamDebugging = new CommunicationStreamDebugging(key); StreamDebugging = new CommunicationStreamDebugging(key);
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
CrestronEnvironment.EthernetEventHandler += new EthernetEventHandler(CrestronEnvironment_EthernetEventHandler);
AutoReconnectIntervalMs = 5000; AutoReconnectIntervalMs = 5000;
BufferSize = 2000; BufferSize = 2000;
@@ -223,6 +225,7 @@ namespace PepperDash.Core
{ {
StreamDebugging = new CommunicationStreamDebugging(SplusKey); StreamDebugging = new CommunicationStreamDebugging(SplusKey);
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
CrestronEnvironment.EthernetEventHandler += new EthernetEventHandler(CrestronEnvironment_EthernetEventHandler);
AutoReconnectIntervalMs = 5000; AutoReconnectIntervalMs = 5000;
BufferSize = 2000; BufferSize = 2000;
@@ -252,6 +255,19 @@ namespace PepperDash.Core
} }
} }
/// <summary>
/// Handles reconnecting when
/// </summary>
void CrestronEnvironment_EthernetEventHandler(EthernetEventArgs ethernetEventArgs)
{
if (ethernetEventArgs.EthernetEventType == eEthernetEventType.LinkUp)
{
if(_client != null)
Connect();
}
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@@ -295,12 +311,14 @@ namespace PepperDash.Core
} }
else else
{ {
Debug.Console(1, this, "Creating new TCPClient");
//Stop retry timer if running //Stop retry timer if running
RetryTimer.Stop(); RetryTimer.Stop();
_client = new TCPClient(Hostname, Port, BufferSize); _client = new TCPClient(Hostname, Port, BufferSize);
_client.SocketStatusChange -= Client_SocketStatusChange; _client.SocketStatusChange -= Client_SocketStatusChange;
_client.SocketStatusChange += Client_SocketStatusChange; _client.SocketStatusChange += Client_SocketStatusChange;
DisconnectCalledByUser = false; DisconnectCalledByUser = false;
RetryTimer.Reset();
_client.ConnectToServerAsync(ConnectToServerCallback); _client.ConnectToServerAsync(ConnectToServerCallback);
} }
} }
@@ -500,6 +518,7 @@ namespace PepperDash.Core
else else
{ {
Debug.Console(1, this, "Socket status change {0} ({1})", clientSocketStatus, ClientStatusText); Debug.Console(1, this, "Socket status change {0} ({1})", clientSocketStatus, ClientStatusText);
RetryTimer.Stop();
_client.ReceiveDataAsync(Receive); _client.ReceiveDataAsync(Receive);
} }