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