summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-06-12 19:37:42 +0200
committerKent Hansen <khansen@trolltech.com>2009-06-12 19:37:42 +0200
commit9a041e28ec478791240f2cbe8c19a9f3f8bc7a1a (patch)
tree9f9556753fb1c6f3080b9df8aecceeb2e4e039f3 /src
parentcd02187bf2fa3edf8c29fe73c244ff853a51f6ec (diff)
progress
Diffstat (limited to 'src')
-rw-r--r--src/qscriptdebuggerconnector.cpp5
-rw-r--r--src/qscriptremotetargetdebugger.cpp85
-rw-r--r--src/qscriptremotetargetdebugger.h16
3 files changed, 47 insertions, 59 deletions
diff --git a/src/qscriptdebuggerconnector.cpp b/src/qscriptdebuggerconnector.cpp
index db603d2..b677d27 100644
--- a/src/qscriptdebuggerconnector.cpp
+++ b/src/qscriptdebuggerconnector.cpp
@@ -34,8 +34,6 @@
// #define DEBUGGERCONNECTOR_DEBUG
-void qScriptDebugRegisterMetaTypes();
-
class QScriptRemoteTargetDebuggerBackend : public QObject,
public QScriptDebuggerBackend
{
@@ -95,7 +93,6 @@ private:
QScriptRemoteTargetDebuggerBackend::QScriptRemoteTargetDebuggerBackend()
: m_state(UnconnectedState), m_socket(0), m_blockSize(0), m_server(0)
{
- qScriptDebugRegisterMetaTypes();
}
QScriptRemoteTargetDebuggerBackend::~QScriptRemoteTargetDebuggerBackend()
@@ -148,7 +145,7 @@ void QScriptRemoteTargetDebuggerBackend::onSocketStateChanged(QAbstractSocket::S
void QScriptRemoteTargetDebuggerBackend::onSocketError(QAbstractSocket::SocketError err)
{
- Q_ASSERT_X(false, Q_FUNC_INFO, "implement me");
+ qDebug("%s", qPrintable(m_socket->errorString()));
}
void QScriptRemoteTargetDebuggerBackend::onNewConnection()
diff --git a/src/qscriptremotetargetdebugger.cpp b/src/qscriptremotetargetdebugger.cpp
index e22e810..9e5152e 100644
--- a/src/qscriptremotetargetdebugger.cpp
+++ b/src/qscriptremotetargetdebugger.cpp
@@ -41,50 +41,11 @@
// #define DEBUG_DEBUGGER
-namespace {
-
-class WidgetClosedNotifier : public QObject
-{
- Q_OBJECT
-public:
- WidgetClosedNotifier(QWidget *w, QObject *parent = 0)
- : QObject(parent), widget(w)
- {
- w->installEventFilter(this);
- }
-
- bool eventFilter(QObject *watched, QEvent *e)
- {
- if (watched != widget)
- return false;
- if (e->type() != QEvent::Close)
- return false;
- emit widgetClosed();
- return true;
- }
-
-Q_SIGNALS:
- void widgetClosed();
-
-private:
- QWidget *widget;
-};
-
-} // namespace
-
class QScriptRemoteTargetDebuggerFrontend
: public QObject, public QScriptDebuggerFrontend
{
Q_OBJECT
public:
- enum Error {
- NoError,
- HostNotFoundError,
- ConnectionRefusedError,
- HandshakeError,
- SocketError
- };
-
enum State {
UnattachedState,
ConnectingState,
@@ -102,7 +63,7 @@ public:
Q_SIGNALS:
void attached();
void detached();
- void error(Error error);
+ void error(QScriptRemoteTargetDebugger::Error error);
protected:
void processCommand(int id, const QScriptDebuggerCommand &command);
@@ -169,16 +130,20 @@ void QScriptRemoteTargetDebuggerFrontend::onSocketStateChanged(QAbstractSocket::
case QAbstractSocket::BoundState:
break;
case QAbstractSocket::ClosingState:
- Q_ASSERT(0);
+ emit detached();
break;
case QAbstractSocket::ListeningState:
break;
}
}
-void QScriptRemoteTargetDebuggerFrontend::onSocketError(QAbstractSocket::SocketError error)
+void QScriptRemoteTargetDebuggerFrontend::onSocketError(QAbstractSocket::SocketError err)
{
- Q_ASSERT_X(false, Q_FUNC_INFO, qPrintable(m_socket->errorString()));
+ if (err != QAbstractSocket::RemoteHostClosedError) {
+ qDebug("%s", qPrintable(m_socket->errorString()));
+ emit error(QScriptRemoteTargetDebugger::SocketError);
+ }
+
}
void QScriptRemoteTargetDebuggerFrontend::onReadyRead()
@@ -199,14 +164,14 @@ void QScriptRemoteTargetDebuggerFrontend::onReadyRead()
qDebug("handshake ok!");
#endif
m_state = AttachedState;
- QMetaObject::invokeMethod(this, "emitAttachedSignal", Qt::QueuedConnection);
+ emit attached();
if (m_socket->bytesAvailable() > 0)
QMetaObject::invokeMethod(this, "onReadyRead", Qt::QueuedConnection);
} else {
// d->error = HandshakeError;
// d->errorString = QString::fromLatin1("Incorrect handshake data received");
m_state = DetachingState;
- emit error(HandshakeError);
+ emit error(QScriptRemoteTargetDebugger::HandshakeError);
m_socket->close();
}
}
@@ -246,7 +211,11 @@ void QScriptRemoteTargetDebuggerFrontend::onReadyRead()
#ifdef DEBUG_DEBUGGER
qDebug("notifying event of type %d", event.type());
#endif
- notifyEvent(event);
+ bool handled = notifyEvent(event);
+ if (handled) {
+ scheduleCommand(QScriptDebuggerCommand::resumeCommand(),
+ /*responseHandler=*/0);
+ }
} else {
// command response
#ifdef DEBUG_DEBUGGER
@@ -306,13 +275,29 @@ void QScriptRemoteTargetDebugger::attachTo(const QHostAddress &address, quint16
createDebugger();
if (!m_frontend) {
m_frontend = new QScriptRemoteTargetDebuggerFrontend();
- QObject::connect(m_frontend, SIGNAL(attached()), this, SIGNAL(attached()));
- QObject::connect(m_frontend, SIGNAL(detached()), this, SIGNAL(detached()));
+ QObject::connect(m_frontend, SIGNAL(attached()),
+ this, SIGNAL(attached()), Qt::QueuedConnection);
+ QObject::connect(m_frontend, SIGNAL(detached()),
+ this, SIGNAL(detached()), Qt::QueuedConnection);
+ QObject::connect(m_frontend, SIGNAL(error(QScriptRemoteTargetDebugger::Error)),
+ this, SIGNAL(error(QScriptRemoteTargetDebugger::Error)));
}
m_frontend->attachTo(address, port);
m_debugger->setFrontend(m_frontend);
}
+void QScriptRemoteTargetDebugger::detach()
+{
+ if (m_frontend)
+ m_frontend->detach();
+}
+
+bool QScriptRemoteTargetDebugger::listen(const QHostAddress &address, quint16 port)
+{
+ Q_ASSERT_X(false, Q_FUNC_INFO, "implement me");
+ return false;
+}
+
void QScriptRemoteTargetDebugger::createDebugger()
{
if (!m_debugger) {
@@ -422,10 +407,6 @@ QMainWindow *QScriptRemoteTargetDebugger::standardWindow() const
if (state.isValid())
win->restoreState(state.toByteArray());
- WidgetClosedNotifier *closedNotifier = new WidgetClosedNotifier(win, that);
- QObject::connect(closedNotifier, SIGNAL(widgetClosed()),
- action(ContinueAction), SLOT(trigger()));
-
const_cast<QScriptRemoteTargetDebugger*>(this)->m_standardWindow = win;
return win;
}
diff --git a/src/qscriptremotetargetdebugger.h b/src/qscriptremotetargetdebugger.h
index df39702..32f430c 100644
--- a/src/qscriptremotetargetdebugger.h
+++ b/src/qscriptremotetargetdebugger.h
@@ -23,10 +23,10 @@
#define QSCRIPTREMOTETARGETDEBUGGER_H
#include <QtCore/qobject.h>
-
+#include <QtNetwork/qabstractsocket.h>
+#include <QtNetwork/qhostaddress.h>
#include <private/qscriptdebuggerwidgetfactoryinterface_p.h>
-class QHostAddress;
class QScriptDebugger;
class QScriptRemoteTargetDebuggerFrontend;
class QAction;
@@ -40,6 +40,14 @@ class QScriptRemoteTargetDebugger
{
Q_OBJECT
public:
+ enum Error {
+ NoError,
+ HostNotFoundError,
+ ConnectionRefusedError,
+ HandshakeError,
+ SocketError
+ };
+
enum DebuggerWidget {
ConsoleWidget,
StackWidget,
@@ -76,6 +84,8 @@ public:
void attachTo(const QHostAddress &address, quint16 port);
void detach();
+ bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
+
bool autoShowStandardWindow() const;
void setAutoShowStandardWindow(bool autoShow);
@@ -89,7 +99,7 @@ public:
Q_SIGNALS:
void attached();
void detached();
-// void error(Error error);
+ void error(QScriptRemoteTargetDebugger::Error error);
void evaluationSuspended();
void evaluationResumed();