Hunting down program crash when network cable is pulled from server. Client.ErrorOccurred is not catching this

This commit is contained in:
Heath Volmer
2016-12-06 09:50:22 -07:00
parent 5abfa9143c
commit d1ce18fb64
7 changed files with 26 additions and 11 deletions

View File

@@ -67,7 +67,7 @@ namespace PepperDash.Core
/// </summary>
public ushort UIsConnected
{
get { return (ushort)(ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED ? 1 : 0); }
get { return (ushort)(IsConnected ? 1 : 0); }
}
/// <summary>
@@ -186,7 +186,7 @@ namespace PepperDash.Core
public void Connect()
{
ConnectEnabled = true;
Debug.Console(1, this, "attempting connect, IsConnected={0}", Client != null ? Client.IsConnected : false);
Debug.Console(1, this, "attempting connect");
// Cancel reconnect if running.
if (ReconnectTimer != null)
@@ -219,8 +219,11 @@ namespace PepperDash.Core
{
Debug.Console(2, this, "Cleaning up disconnected client");
Client.ErrorOccurred -= Client_ErrorOccurred;
if(TheStream != null)
if (TheStream != null)
{
TheStream.DataReceived -= Stream_DataReceived;
TheStream.ErrorOccurred += TheStream_ErrorOccurred;
}
TheStream = null;
}
@@ -245,6 +248,7 @@ namespace PepperDash.Core
Client.SendKeepAlive();
TheStream = Client.CreateShellStream("PDTShell", 100, 80, 100, 200, 65534);
TheStream.DataReceived += Stream_DataReceived;
TheStream.ErrorOccurred += TheStream_ErrorOccurred;
Debug.Console(1, this, "Connected");
ClientStatus = SocketStatus.SOCKET_STATUS_CONNECTED;
PreviousHostname = Hostname;
@@ -252,7 +256,7 @@ namespace PepperDash.Core
PreviousPort = Port;
PreviousUsername = Username;
}
return;
return; // Success will not pass here
}
catch (SshConnectionException e)
{
@@ -280,6 +284,8 @@ namespace PepperDash.Core
HandleConnectionFailure();
}
/// <summary>
/// Disconnect the clients and put away it's resources.
/// </summary>
@@ -334,6 +340,7 @@ namespace PepperDash.Core
if (TheStream != null)
{
TheStream.DataReceived -= Stream_DataReceived;
TheStream.ErrorOccurred += TheStream_ErrorOccurred;
TheStream.Close();
TheStream.Dispose();
TheStream = null;
@@ -376,6 +383,18 @@ namespace PepperDash.Core
}
}
/// <summary>
/// Handler for errors on the stream...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void TheStream_ErrorOccurred(object sender, ExceptionEventArgs e)
{
Debug.Console(1, this, "Unhandled SSH STREAM error: {0}", e.Exception);
ClientStatus = SocketStatus.SOCKET_STATUS_BROKEN_REMOTELY;
HandleConnectionFailure();
}
/// <summary>
/// Error event handler for client events - disconnect, etc. Will forward those events via ConnectionChange
/// event
@@ -398,10 +417,6 @@ namespace PepperDash.Core
{
if (ConnectionChange != null)
ConnectionChange(this, new GenericSocketStatusChageEventArgs(this));
//var handler = SocketStatusChange;
//if (handler != null)
// SocketStatusChange(this);
}
#region IBasicCommunication Members

View File

@@ -10,8 +10,8 @@
<ArchiveName />
</RequiredInfo>
<OptionalInfo>
<CompiledOn>12/5/2016 8:18:01 PM</CompiledOn>
<CompilerRev>1.0.0.36510</CompilerRev>
<CompiledOn>12/6/2016 9:36:24 AM</CompiledOn>
<CompilerRev>1.0.0.17290</CompilerRev>
</OptionalInfo>
<Plugin>
<Version>Crestron.SIMPLSharp, Version=2.0.48.0, Culture=neutral, PublicKeyToken=812d080f93e2de10</Version>

View File

@@ -1,4 +1,4 @@
MainAssembly=PepperDash_Core.dll:c93675cdf88b90cd5c0118d288234a54
MainAssembly=PepperDash_Core.dll:c8ab0c5c399e1cd7b79710c5a208e022
MainAssemblyMinFirmwareVersion=1.007.0017
MainAssemblyResource=SimplSharpData.dat:315526abf906cded47fb0c7510266a7e
ü