00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00027 #ifndef JDWP_ACTION_H
00028 #define JDWP_ACTION_H
00029
00030 #include <QObject>
00031 #include "inspectorj/client/invokerthread.h"
00032
00033 using inspectorj::jdwp::JDWPPacket;
00034
00035 namespace inspectorj {
00036 namespace client {
00037
00043 class JDWPAction : public QObject
00044 {
00045 Q_OBJECT
00046
00047 public:
00051 JDWPAction()
00052 {
00053
00054 };
00055
00060 JDWPAction(QObject *parent)
00061 {
00062 setParent(parent);
00063 };
00064
00068 ~JDWPAction()
00069 {
00070 };
00071
00076 virtual void trigger(JDWPPacket &packet)
00077 {
00078 emit triggered(packet);
00079 emit finished();
00080 };
00081
00082 signals:
00086 void triggered(JDWPPacket&);
00087
00091 void finished();
00092
00093 private:
00094
00095 };
00096
00103 template <typename TClass>
00104 class JDWPThreadAction : public JDWPAction
00105 {
00106 private:
00108 TClass* clsObject;
00109
00111 void (TClass::*callbackFpt)(JDWPPacket&);
00112
00113 public:
00120 JDWPThreadAction(QObject *parent, TClass* cls, void (TClass::*fpt)(JDWPPacket&))
00121 : clsObject(cls), callbackFpt(fpt)
00122 {
00123 setParent(parent);
00124 };
00125
00129 ~JDWPThreadAction()
00130 {
00131 };
00132
00138 void trigger(JDWPPacket &packet)
00139 {
00140 InvokerThread<TClass> *thread = new InvokerThread<TClass>(clsObject, callbackFpt, packet);
00141 connect(thread, SIGNAL(finished()), this, SIGNAL(finished()));
00142 connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
00143 thread->start();
00144 };
00145 };
00146
00147 }
00148 }
00149
00150 #endif //JDWP_ACTION_H