mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 17:55:45 +08:00
refs #179
added ConnectionStatus enum values DisconnectedFailed and DisconnectedLost added extra argument to connectionStatusChanged signal, containing the socket error message
This commit is contained in:
@@ -91,6 +91,8 @@ namespace BlackCore
|
|||||||
Disconnected = 0, //!< Not connected
|
Disconnected = 0, //!< Not connected
|
||||||
Disconnecting, //!< In transition to disconnected
|
Disconnecting, //!< In transition to disconnected
|
||||||
DisconnectedError, //!< Disconnected due to socket error
|
DisconnectedError, //!< Disconnected due to socket error
|
||||||
|
DisconnectedFailed, //!< A connection was not established due to socket error
|
||||||
|
DisconnectedLost, //!< Connection lost due to socket error
|
||||||
Connecting, //!< Connection initiated but not established
|
Connecting, //!< Connection initiated but not established
|
||||||
Connected //!< Connection established
|
Connected //!< Connection established
|
||||||
};
|
};
|
||||||
@@ -387,7 +389,7 @@ namespace BlackCore
|
|||||||
/*!
|
/*!
|
||||||
* The status of our connection has changed.
|
* The status of our connection has changed.
|
||||||
*/
|
*/
|
||||||
void connectionStatusChanged(ConnectionStatus oldStatus, ConnectionStatus newStatus);
|
void connectionStatusChanged(ConnectionStatus oldStatus, ConnectionStatus newStatus, QString errorMessage = "");
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* We received a reply to one of our pings.
|
* We received a reply to one of our pings.
|
||||||
|
|||||||
@@ -183,18 +183,19 @@ namespace BlackCore
|
|||||||
case Cvatlib_Network::connStatus_Connected: return INetwork::Connected;
|
case Cvatlib_Network::connStatus_Connected: return INetwork::Connected;
|
||||||
case Cvatlib_Network::connStatus_Disconnected: return INetwork::Disconnected;
|
case Cvatlib_Network::connStatus_Disconnected: return INetwork::Disconnected;
|
||||||
case Cvatlib_Network::connStatus_Error: return INetwork::DisconnectedError;
|
case Cvatlib_Network::connStatus_Error: return INetwork::DisconnectedError;
|
||||||
case Cvatlib_Network::connStatus_ConnectionLost: return INetwork::Disconnected;
|
case Cvatlib_Network::connStatus_ConnectionFailed: return INetwork::DisconnectedFailed;
|
||||||
|
case Cvatlib_Network::connStatus_ConnectionLost: return INetwork::DisconnectedLost;
|
||||||
}
|
}
|
||||||
qFatal("unrecognised connection status");
|
qFatal("unrecognised connection status");
|
||||||
return INetwork::DisconnectedError;
|
return INetwork::DisconnectedError;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::changeConnectionStatus(Cvatlib_Network::connStatus status)
|
void CNetworkVatlib::changeConnectionStatus(Cvatlib_Network::connStatus status, QString errorMessage)
|
||||||
{
|
{
|
||||||
if (m_status != status)
|
if (m_status != status)
|
||||||
{
|
{
|
||||||
qSwap(m_status, status);
|
qSwap(m_status, status);
|
||||||
emit connectionStatusChanged(convertConnectionStatus(status), convertConnectionStatus(m_status));
|
emit connectionStatusChanged(convertConnectionStatus(status), convertConnectionStatus(m_status), errorMessage);
|
||||||
|
|
||||||
if (isDisconnected())
|
if (isDisconnected())
|
||||||
{
|
{
|
||||||
@@ -203,6 +204,42 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CNetworkVatlib::getSocketError() const
|
||||||
|
{
|
||||||
|
static QMap<QString, QString> errorCodes;
|
||||||
|
if (errorCodes.isEmpty())
|
||||||
|
{
|
||||||
|
errorCodes["ECONNABORTED"] = "Connection aborted";
|
||||||
|
errorCodes["ECONNREFUSED"] = "Connection refused";
|
||||||
|
errorCodes["ECONNRESET"] = "Connection reset";
|
||||||
|
errorCodes["EHOSTDOWN"] = "Host is down";
|
||||||
|
errorCodes["EHOSTUNREACH"] = "Host is unreachable";
|
||||||
|
errorCodes["ENETDOWN"] = "Network is down";
|
||||||
|
errorCodes["ENETRESET"] = "Connection aborted by network";
|
||||||
|
errorCodes["ENETUNREACH"] = "Network unreachable";
|
||||||
|
errorCodes["ENOTCONN"] = "The socket is not connected";
|
||||||
|
errorCodes["ETIMEDOUT"] = "Connection timed out";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString err(m_net->GetNetworkErrorCode());
|
||||||
|
if (errorCodes.contains(err))
|
||||||
|
{
|
||||||
|
return errorCodes[err];
|
||||||
|
}
|
||||||
|
else if (err.startsWith("EUNKWN"))
|
||||||
|
{
|
||||||
|
return "Unknown error code " + err.section(' ', 1);
|
||||||
|
}
|
||||||
|
else if (err == "EOK" || err.isEmpty())
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "Unrecognized error code " + err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QByteArray CNetworkVatlib::toFSD(QString qstr) const
|
QByteArray CNetworkVatlib::toFSD(QString qstr) const
|
||||||
{
|
{
|
||||||
return m_fsdTextCodec->fromUnicode(qstr);
|
return m_fsdTextCodec->fromUnicode(qstr);
|
||||||
@@ -326,12 +363,12 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
changeConnectionStatus(Cvatlib_Network::connStatus_Error);
|
changeConnectionStatus(Cvatlib_Network::connStatus_Error/*, getSocketError()*/);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
changeConnectionStatus(Cvatlib_Network::connStatus_Error);
|
changeConnectionStatus(Cvatlib_Network::connStatus_Error/*, getSocketError()*/);
|
||||||
exceptionDispatcher(Q_FUNC_INFO);
|
exceptionDispatcher(Q_FUNC_INFO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -344,7 +381,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
if (m_net && m_net->IsValid() && m_net->IsNetworkConnected())
|
if (m_net && m_net->IsValid() && m_net->IsNetworkConnected())
|
||||||
{
|
{
|
||||||
// I let others know we are going down
|
// emit signal directly because there is no Cvatlib_Network enum for Disconnecting
|
||||||
emit this->connectionStatusChanged(convertConnectionStatus(m_status), Disconnecting);
|
emit this->connectionStatusChanged(convertConnectionStatus(m_status), Disconnecting);
|
||||||
m_net->LogoffAndDisconnect(c_logoffTimeoutSec);
|
m_net->LogoffAndDisconnect(c_logoffTimeoutSec);
|
||||||
}
|
}
|
||||||
@@ -618,7 +655,16 @@ namespace BlackCore
|
|||||||
|
|
||||||
void CNetworkVatlib::onConnectionStatusChanged(Cvatlib_Network *, Cvatlib_Network::connStatus, Cvatlib_Network::connStatus newStatus, void *cbvar)
|
void CNetworkVatlib::onConnectionStatusChanged(Cvatlib_Network *, Cvatlib_Network::connStatus, Cvatlib_Network::connStatus newStatus, void *cbvar)
|
||||||
{
|
{
|
||||||
cbvar_cast(cbvar)->changeConnectionStatus(newStatus);
|
if (newStatus == Cvatlib_Network::connStatus_Error ||
|
||||||
|
newStatus == Cvatlib_Network::connStatus_ConnectionFailed ||
|
||||||
|
newStatus == Cvatlib_Network::connStatus_ConnectionLost)
|
||||||
|
{
|
||||||
|
cbvar_cast(cbvar)->changeConnectionStatus(newStatus, cbvar_cast(cbvar)->getSocketError());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cbvar_cast(cbvar)->changeConnectionStatus(newStatus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onTextMessageReceived(Cvatlib_Network *, const char *from, const char *to, const char *msg, void *cbvar)
|
void CNetworkVatlib::onTextMessageReceived(Cvatlib_Network *, const char *from, const char *to, const char *msg, void *cbvar)
|
||||||
|
|||||||
@@ -106,8 +106,9 @@ namespace BlackCore
|
|||||||
QByteArray toFSD(const BlackMisc::Aviation::CCallsign &callsign) const;
|
QByteArray toFSD(const BlackMisc::Aviation::CCallsign &callsign) const;
|
||||||
QString fromFSD(const char *cstr) const;
|
QString fromFSD(const char *cstr) const;
|
||||||
void initializeSession();
|
void initializeSession();
|
||||||
void changeConnectionStatus(Cvatlib_Network::connStatus newStatus);
|
void changeConnectionStatus(Cvatlib_Network::connStatus newStatus, QString errorMessage = "");
|
||||||
bool isDisconnected() const { return m_status != Cvatlib_Network::connStatus_Connecting && m_status != Cvatlib_Network::connStatus_Connected; }
|
bool isDisconnected() const { return m_status != Cvatlib_Network::connStatus_Connecting && m_status != Cvatlib_Network::connStatus_Connected; }
|
||||||
|
QString getSocketError() const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void process();
|
void process();
|
||||||
|
|||||||
Reference in New Issue
Block a user