}
void NetworkConnection::disconnectFromIrc(bool requested) {
+ _quitRequested = requested; // see socketDisconnected();
_autoReconnectTimer.stop();
- _autoReconnectCount = 0;
+ _autoReconnectCount = 0; // prohibiting auto reconnect
displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Disconnecting."));
- if(socket.state() < QAbstractSocket::ConnectedState) {
- setConnectionState(Network::Disconnected);
+ if(socket.state() == QAbstractSocket::UnconnectedState) {
+ socketDisconnected();
+ } else if(socket.state() < QAbstractSocket::ConnectedState) {
+ socket.close();
+ // we might be in a state waiting for a timeout... we don't care... set a disconnected state
socketDisconnected();
} else {
_socketCloseTimer.start(10000); // the irc server has 10 seconds to close the socket
}
-
- // this flag triggers quitRequested() once the socket is closed
- // it is needed to determine whether or not the connection needs to be
- // in the automatic session restore.
- _quitRequested = requested;
}
void NetworkConnection::socketHasData() {
emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Connection failure: %1").arg(socket.errorString()));
network()->emitConnectionError(socket.errorString());
if(socket.state() < QAbstractSocket::ConnectedState) {
- setConnectionState(Network::Disconnected);
socketDisconnected();
}
// mark last connection attempt as failed
network()->setConnected(false);
emit disconnected(networkId());
- if(_autoReconnectCount != 0) {
- setConnectionState(Network::Reconnecting);
- if(_autoReconnectCount == network()->autoReconnectRetries()) doAutoReconnect(); // first try is immediate
- else _autoReconnectTimer.start();
- } else if(_quitRequested) {
+ if(_quitRequested) {
+ setConnectionState(Network::Disconnected);
emit quitRequested(networkId());
+ } else if(_autoReconnectCount != 0) {
+ setConnectionState(Network::Reconnecting);
+ if(_autoReconnectCount == network()->autoReconnectRetries())
+ doAutoReconnect(); // first try is immediate
+ else
+ _autoReconnectTimer.start();
}
}
QTimer _socketCloseTimer;
+ /* this flag triggers quitRequested() once the socket is closed
+ * it is needed to determine whether or not the connection needs to be
+ *in the automatic session restore. */
bool _quitRequested;
bool _previousConnectionAttemptFailed;
void writeToSocket(QByteArray s);
-
-
class ParseError : public Exception {
public:
ParseError(QString cmd, QString prefix, QStringList params);
_disconnectNetAction.setIcon(connectionStateIcon);
_connectNetAction.setIcon(connectionStateIcon);
addItemToMenu(showChannelList, contextMenu, index, ActiveState);
- addItemToMenu(_disconnectNetAction, contextMenu, index, ActiveState);
- addItemToMenu(_connectNetAction, contextMenu, index, InactiveState);
+ qDebug() << "state:" << network->connectionState() << Network::Disconnected << Network::Disconnecting;
+ addItemToMenu(_disconnectNetAction, contextMenu, network->connectionState() != Network::Disconnected);
+ addItemToMenu(_connectNetAction, contextMenu, network->connectionState() == Network::Disconnected);
addSeparatorToMenu(contextMenu, index, ActiveState);
addItemToMenu(_joinChannelAction, contextMenu, index, ActiveState);
break;