[prev in list] [next in list] [prev in thread] [next in thread]
List: atlantik-devel
Subject: [atlantik-devel] Little patch
From: "Albert 'TSDgeos' Astals Cid" <tsdgeos () terra ! es>
Date: 2003-06-02 18:14:35
[Download RAW message or body]
It corrects a segmentation fault added for my previous patch :-/
If you openend atlantik and closed it, it segfaulted, because m_job was not
initialized to NULL.
I've also added a timer, if the connection doesn't makes signals of life
(slotData) in less than 10 seconds the job is cancelled as i think it is
pretty safe to think that the connection is having problems.
Along with this, now when you click on "Refresh server list " the button
becomes not enabled, because previously you could click hundred of times and
it started a hundred of m_job
What do you think of it?
["diff" (text/x-diff)]
? diff
Index: monopigator.cpp
===================================================================
RCS file: /home/kde/kdegames/atlantik/client/monopigator.cpp,v
retrieving revision 1.12
diff -u -r1.12 monopigator.cpp
--- monopigator.cpp 27 May 2003 21:03:19 -0000 1.12
+++ monopigator.cpp 2 Jun 2003 18:11:54 -0000
@@ -22,11 +22,12 @@
Monopigator::Monopigator()
{
m_downloadData = 0;
+ m_job = NULL;
}
Monopigator::~Monopigator()
{
- if (m_job != NULL) m_job -> kill();
+ if (m_job) m_job -> kill();
}
void Monopigator::loadData(const KURL &url)
@@ -40,12 +41,17 @@
m_job = KIO::get(url.url(), true, false);
m_job->addMetaData(QString::fromLatin1("UserAgent"), \
QString::fromLatin1("Atlantik/" ATLANTIK_VERSION_STRING));
+ m_timer = new QTimer(this);
+ m_timer->start(10 *1000, true);
+
connect(m_job, SIGNAL(data(KIO::Job *, const QByteArray &)), SLOT(slotData(KIO::Job \
*, const QByteArray &))); connect(m_job, SIGNAL(result(KIO::Job *)), \
SLOT(slotResult(KIO::Job *))); + connect(m_timer, SIGNAL(timeout()), \
SLOT(slotTimeout())); }
void Monopigator::slotData(KIO::Job *, const QByteArray &data)
{
+ m_timer->stop();
m_downloadData->writeBlock(data.data(), data.size());
}
@@ -53,6 +59,13 @@
{
processData(m_downloadData->buffer(), !job->error());
m_job = NULL;
+}
+
+void Monopigator::slotTimeout()
+{
+ if (m_job) m_job -> kill();
+ m_job = NULL;
+ emit timeout();
}
void Monopigator::processData(const QByteArray &data, bool okSoFar)
Index: monopigator.h
===================================================================
RCS file: /home/kde/kdegames/atlantik/client/monopigator.h,v
retrieving revision 1.11
diff -u -r1.11 monopigator.h
--- monopigator.h 27 May 2003 21:03:19 -0000 1.11
+++ monopigator.h 2 Jun 2003 18:11:55 -0000
@@ -19,6 +19,7 @@
#include <qobject.h>
#include <qbuffer.h>
+#include <qtimer.h>
#include <kio/job.h>
#include <kurl.h>
@@ -35,16 +36,19 @@
signals:
void monopigatorAdd(QString host, QString port, QString version, int users);
void finished();
+ void timeout();
private slots:
void slotData(KIO::Job *, const QByteArray &);
void slotResult(KIO::Job *);
+ void slotTimeout();
private:
void processData(const QByteArray &, bool = true);
QBuffer *m_downloadData;
KIO::Job *m_job;
+ QTimer *m_timer;
};
#endif
Index: selectserver_widget.cpp
===================================================================
RCS file: /home/kde/kdegames/atlantik/client/selectserver_widget.cpp,v
retrieving revision 1.25
diff -u -r1.25 selectserver_widget.cpp
--- selectserver_widget.cpp 27 May 2003 21:03:19 -0000 1.25
+++ selectserver_widget.cpp 2 Jun 2003 18:11:55 -0000
@@ -80,6 +80,7 @@
connect(m_monopigator, SIGNAL(monopigatorAdd(QString, QString, QString, int)), \
this, SLOT(slotMonopigatorAdd(QString, QString, QString, int))); \
connect(m_monopigator, SIGNAL(finished()), SLOT(monopigatorFinished())); \
+ connect(m_monopigator, SIGNAL(timeout()), SLOT(monopigatorTimeout()));
// Until we have a good way to use start a local monopd server, disable this button
// m_localGameButton->setEnabled(false);
@@ -138,6 +139,13 @@
void SelectServer::monopigatorFinished()
{
status_label->setText(i18n("Retrieved server list."));
+ m_refreshButton->setEnabled(true);
+}
+
+void SelectServer::monopigatorTimeout()
+{
+ status_label->setText(i18n("Error while retrieving the server list."));
+ m_refreshButton->setEnabled(true);
}
void SelectServer::validateRadioButtons()
@@ -183,7 +191,10 @@
checkLocalServer();
if (useMonopigator)
+ {
+ m_refreshButton->setEnabled(false);
initMonopigator();
+ }
}
void SelectServer::slotAddServer()
Index: selectserver_widget.h
===================================================================
RCS file: /home/kde/kdegames/atlantik/client/selectserver_widget.h,v
retrieving revision 1.13
diff -u -r1.13 selectserver_widget.h
--- selectserver_widget.h 6 Mar 2003 13:42:53 -0000 1.13
+++ selectserver_widget.h 2 Jun 2003 18:11:55 -0000
@@ -56,6 +56,7 @@
void slotLocalConnected();
void slotLocalError();
void monopigatorFinished();
+ void monopigatorTimeout();
signals:
void serverConnect(const QString host, int port);
_______________________________________________
atlantik-devel mailing list
atlantik-devel@mail.kde.org
http://mail.kde.org/mailman/listinfo/atlantik-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic