00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#include <testdcop.h>
00027
#include <qtimer.h>
00028
00029 DCOPClientTransaction *countDownAction = 0;
00030
int countDownCount = 0;
00031
00032 DCOPClientTransaction *countDownAction2 = 0;
00033
int countDownCount2 = 0;
00034
00035
bool MyDCOPObject::process(
const QCString &fun,
const QByteArray &data,
00036
QCString& replyType,
QByteArray &replyData)
00037 {
00038 qDebug(
"in MyDCOPObject::process, fun = %s", fun.data());
00039
00040
00041
if (fun ==
"aFunction(QString,int)") {
00042
QDataStream args(data, IO_ReadOnly);
00043
QString arg1;
00044
int arg2;
00045 args >> arg1 >> arg2;
00046 function(arg1, arg2);
00047 replyType =
"void";
00048
return true;
00049 }
00050
if (fun ==
"canLaunchRockets(QRect)") {
00051
QDataStream args(data, IO_ReadOnly);
00052
QRect arg1;
00053 args >> arg1;
00054
00055 printf(
"Rect x = %d, y = %d, w = %d, h = %d\n", arg1.x(), arg1.y(), arg1.width(), arg1.height());
00056
00057 replyType =
"QRect";
00058
QDataStream reply( replyData, IO_WriteOnly );
00059
QRect r(10,20,100,200);
00060 reply << r;
00061
return true;
00062 }
00063
if (fun ==
"isAliveSlot(int)") {
00064
00065 qDebug(
"isAliveSlot(int)");
00066
bool connectResult = kapp->dcopClient()->disconnectDCOPSignal(
"", objId(),
"", objId(),
"" );
00067 qDebug(
"disconnectDCOPSignal returns %s", connectResult ?
"true" :
"false");
00068
return true;
00069 }
00070
if (fun ==
"countDown()") {
00071 qDebug(
"countDown() countDownAction = %p", countDownAction);
00072
if (countDownAction2)
00073 {
00074 replyType =
"QString";
00075
QDataStream reply( replyData, IO_WriteOnly );
00076 reply <<
QString(
"Hey");
00077
return true;
00078 }
00079
00080
if (countDownAction == 0)
00081 {
00082 countDownCount = 10;
00083 countDownAction = kapp->dcopClient()->beginTransaction();
00084 QTimer::singleShot(1000,
this, SLOT(slotTimeout()));
00085 }
00086
else
00087 {
00088 countDownCount2 = 10;
00089 countDownAction2 = kapp->dcopClient()->beginTransaction();
00090 QTimer::singleShot(1000,
this, SLOT(slotTimeout2()));
00091 }
00092
return true;
00093 }
00094
00095
return DCOPObject::process(fun, data, replyType, replyData);
00096 }
00097
00098
void MyDCOPObject::slotTimeout()
00099 {
00100 qDebug(
"MyDCOPObject::slotTimeout() %d", countDownCount);
00101 countDownCount--;
00102
if (countDownCount == 0)
00103 {
00104
QCString replyType =
"QString";
00105
QByteArray replyData;
00106
QDataStream reply( replyData, IO_WriteOnly );
00107 reply <<
QString(
"Hello World");
00108 kapp->dcopClient()->endTransaction(countDownAction, replyType, replyData);
00109 countDownAction = 0;
00110 }
00111
else
00112 {
00113 QTimer::singleShot(1000,
this, SLOT(slotTimeout()));
00114 }
00115 }
00116
00117
void MyDCOPObject::slotTimeout2()
00118 {
00119 qDebug(
"MyDCOPObject::slotTimeout2() %d", countDownCount2);
00120 countDownCount2--;
00121
if (countDownCount2 == 0)
00122 {
00123
QCString replyType =
"QString";
00124
QByteArray replyData;
00125
QDataStream reply( replyData, IO_WriteOnly );
00126 reply <<
QString(
"Hello World");
00127 kapp->dcopClient()->endTransaction(countDownAction2, replyType, replyData);
00128 countDownAction2 = 0;
00129 }
00130
else
00131 {
00132 QTimer::singleShot(1000,
this, SLOT(slotTimeout2()));
00133 }
00134 }
00135
00136
QCStringList MyDCOPObject::functions()
00137 {
00138
QCStringList result =
DCOPObject::functions();
00139 result <<
"QRect canLaunchRockets(QRect)";
00140
return result;
00141 }
00142
00143 TestObject::TestObject(
const QCString& app)
00144 : m_app(app)
00145 {
00146 QTimer::singleShot(2500,
this, SLOT(slotTimeout()));
00147 }
00148
00149
void TestObject::slotTimeout()
00150 {
00151
QCString replyType;
00152
QByteArray data, reply;
00153 qWarning(
"#3 Calling countDown");
00154
00155
if (!kapp->dcopClient()->call(m_app,
"object1",
"countDown()", data, replyType, reply))
00156 qDebug(
"#3 I couldn't call countDown");
00157
else
00158 qDebug(
"#3 countDown() return type was '%s'", replyType.data() );
00159
00160 }
00161
00162
void TestObject::slotCallBack(
int callId,
const QCString &replyType,
const QByteArray &replyData)
00163 {
00164 qWarning(
"Call Back! callId = %d", callId);
00165 qWarning(
"Type = %s", replyType.data());
00166
00167
QDataStream args(replyData, IO_ReadOnly);
00168
QString arg1;
00169 args >> arg1;
00170
00171 qWarning(
"Value = %s", arg1.latin1());
00172 }
00173
00174
int main(
int argc,
char **argv)
00175 {
00176
KApplication app(argc, argv,
"testdcop");
00177
00178
QCString replyType;
00179
QByteArray data, reply;
00180
DCOPClient *client; client = app.
dcopClient();
00181
00182
if (argc == 2)
00183 {
00184
QCString app = argv[1];
00185
TestObject obj(app);
00186 qWarning(
"#1 Calling countDown");
00187
int result = kapp->dcopClient()->callAsync(app,
"object1",
"countDown()", data, &obj, SLOT(slotCallBack(
int,
const QCString&,
const QByteArray&)));
00188 qDebug(
"#1 countDown() call id = %d", result);
00189 qWarning(
"#2 Calling countDown");
00190 result = kapp->dcopClient()->callAsync(app,
"object1",
"countDown()", data, &obj, SLOT(slotCallBack(
int,
const QCString&,
const QByteArray&)));
00191 qDebug(
"#2 countDown() call id = %d", result);
00192 kapp->exec();
00193
00194
return 0;
00195 }
00196
00197
00198
00199 client->
registerAs( app.name(),
false );
00200 qDebug(
"I registered as '%s'", client->
appId().data() );
00201
00202
if ( client->
isApplicationRegistered( app.name() ) )
00203 qDebug(
"indeed, we are registered!");
00204
00205
QDataStream dataStream( data, IO_WriteOnly );
00206 dataStream << (
int) 43;
00207 client->
emitDCOPSignal(
"alive(int,QCString)", data);
00208
00209 MyDCOPObject *obj1 =
new MyDCOPObject(
"object1");
00210
00211
bool connectResult = client->
connectDCOPSignal(
"",
"alive(int , QCString)",
"object1",
"isAliveSlot(int)",
false);
00212 qDebug(
"connectDCOPSignal returns %s", connectResult ?
"true" :
"false");
00213
00214
QDataStream ds(data, IO_WriteOnly);
00215 ds <<
QString(
"fourty-two") << 42;
00216
if (!client->
call(app.name(),
"object1",
"aFunction(QString,int)", data, replyType, reply))
00217 qDebug(
"I couldn't call myself");
00218
else
00219 qDebug(
"return type was '%s'", replyType.data() );
00220
00221 client->
send(app.name(),
"object1",
"aFunction(QString,int)", data );
00222
00223
int n = client->
registeredApplications().count();
00224 qDebug(
"number of attached applications = %d", n );
00225
00226 QObject::connect( client, SIGNAL( applicationRegistered(
const QCString&)),
00227 obj1, SLOT( registered(
const QCString& )));
00228
00229 QObject::connect( client, SIGNAL( applicationRemoved(
const QCString&)),
00230 obj1, SLOT( unregistered(
const QCString& )));
00231
00232
00233 client->
setNotifications(
true );
00234
00235
QCString foundApp;
00236
QCString foundObj;
00237
00238
00239
00240
00241
00242
00243
00244
00245
bool boolResult = client->
findObject(
"konqueror*",
"",
"", data, foundApp, foundObj);
00246 qDebug(
"findObject: result = %s, %s, %s\n", boolResult ?
"true" :
"false",
00247 foundApp.data(), foundObj.data());
00248
00249
00250 boolResult = client->
findObject(
"",
"ksycoca",
"", data, foundApp, foundObj);
00251 qDebug(
"findObject: result = %s, %s, %s\n", boolResult ?
"true" :
"false",
00252 foundApp.data(), foundObj.data());
00253
00254
00255 boolResult = client->
findObject(
"testdcop",
"ksycoca",
"", data, foundApp, foundObj);
00256 qDebug(
"findObject: result = %s, %s, %s\n", boolResult ?
"true" :
"false",
00257 foundApp.data(), foundObj.data());
00258
00259
DCOPClient *client2 =
new DCOPClient();
00260 client2->
registerAs(app.name(),
false);
00261 qDebug(
"I2 registered as '%s'", client2->
appId().data() );
00262
00263 qDebug(
"Sending to object1");
00264 client2->
send(app.name(),
"object1",
"aFunction(QString,int)", data );
00265
00266 qDebug(
"Calling object1");
00267
if (!client2->
call(app.name(),
"object1",
"aFunction(QString,int)", data, replyType, reply))
00268 qDebug(
"I couldn't call myself");
00269
else
00270 qDebug(
"return type was '%s'", replyType.data() );
00271
00272 qDebug(
"Calling countDown() in object1");
00273
if (!client2->
call(app.name(),
"object1",
"countDown()", data, replyType, reply))
00274 qDebug(
"I couldn't call myself");
00275
else
00276 qDebug(
"return type was '%s'", replyType.data() );
00277
00278
00279 boolResult = client2->
findObject(
"testdcop",
"object1",
"", data, foundApp, foundObj);
00280 qDebug(
"findObject: result = %s, %s, %s\n", boolResult ?
"true" :
"false",
00281 foundApp.data(), foundObj.data());
00282
00283
00284
return app.exec();
00285
00286 client->
detach();
00287 }
00288
00289
#include "testdcop.moc"