diff -r f5050f1da672 -r 04becd199f91 javamanager/javacaptain/tsrc/test_runtime/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/javacaptain/tsrc/test_runtime/src/main.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,293 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Main +* +*/ + + +#include +#include +#include + +#include "javacommonutils.h" +#include "comms.h" +#include "commsclientendpoint.h" +#include "commslistener.h" +#include "monitor.h" + +#include "rtcmessages.h" + +#include "testuids.h" + +using namespace java::util; +using namespace java::comms; +using namespace java::captain; + +CommsClientEndpoint comms; +Monitor* monitor; +Uid uid; + +class rtCommsListener : public CommsListener +{ +public: + void processMessage(CommsMessage& message) + { + switch (message.getMessageId()) + { + case RTC_MSG_ID_TERMINATE_APPLICATION_REQ: + printf("TERMINATE_REQ received, triggering monitor\n"); + monitor->notify(); + break; + } + } +}; + +static void sendRunningInd(); +static void sendTerminatedInd(); +static void sendGetRuntimeAttributes(); + +void runtime(const int& uSecDelayBeforeRunningInd, + const int& numOfRunningInds, + const bool& getRuntimeAttributes, + const bool& immediateExit, + const bool& obeyTerminateReqs, + const int& numOfTerminateInds, + const bool& stayRunning) +{ + if (uSecDelayBeforeRunningInd > 0) + { + usleep(uSecDelayBeforeRunningInd); + } + + for (int runInds = 0 ; runInds < numOfRunningInds ; runInds++) + { + sendRunningInd(); + } + + if (getRuntimeAttributes) + { + sendGetRuntimeAttributes(); + } + + if (!immediateExit) + { + do + { + monitor->wait(); + } + while (!obeyTerminateReqs); + } + + for (int termInds = 0; termInds < numOfTerminateInds ; termInds++) + { + sendTerminatedInd(); + } + + if (stayRunning) + { + while (true) + { + monitor->wait(); + } + } +} + +int main(int ac, char** av) +{ + monitor = Monitor::createMonitor(); + + rtCommsListener listener; + comms.registerDefaultListener(&listener); + comms.connect(IPC_ADDRESS_JAVA_CAPTAIN_C); + + printf("we have liftoff\n"); + + for (int i = 0 ; i 4 && (std::string(av[4]) == "-debug")) + { + printf("getRuntimeAttributes -> true\n"); + getRuntimeAttributes = true; + } + +// startup sequence : running_ind 1x +// runtime behaviour: stays running +// exit sequence : sends terminate_ind 1x -> exits +//const Uid uid_normal1(L"normal1"); + if (uid == uid_normal1 || + uid == uid_push1) + { + runtime(500000, // uSecDelayBeforeRunningInd + 1, // numOfRunningInds + getRuntimeAttributes, + false, // immediateExit + true, // obeyTerminateReqs + 1, // numOfTerminateInds + false); // stayRunning + } + +// startup sequence : running_ind 2x (no delay in between) +// runtime behaviour: stays running +// exit sequence : sends terminate_ind 1x -> exits +//const Uid uid_normal2(L"normal2"); + else if (uid == uid_normal2) + { + runtime(500000, // uSecDelayBeforeRunningInd + 2, // numOfRunningInds + getRuntimeAttributes, + false, // immediateExit + true, // obeyTerminateReqs + 1, // numOfTerminateInds + false); // stayRunning + } + +// startup sequence : running_ind 2x (no delay) +// runtime behaviour: stays running +// exit sequence : sends terminate_ind 2x (no delay) -> exits +//const Uid uid_normal3(L"normal3"); + else if (uid == uid_normal3) + { + runtime(500000, //uSecDelayBeforeRunningInd + 2, // numOfRunningInds + getRuntimeAttributes, + false, // immediateExit + true, // obeyTerminateReqs + 2, // numOfTerminateInds + false); // stayRunning + } +// startup sequence : running_ind 1x no delay +// runtime behaviour: stays running +// exit sequence : sends terminate_ind 1x -> exits +//const Uid uid_normal1(L"normal4"); + else if (uid == uid_normal4) + { + runtime(0, // uSecDelayBeforeRunningInd + 1, // numOfRunningInds + getRuntimeAttributes, + false, // immediateExit + true, // obeyTerminateReqs + 1, // numOfTerminateInds + false); // stayRunning + } + +// startup sequence : running_ind 1x +// runtime behaviour: stays running +// exit sequence : sends nothing -> stays running + else if (uid == uid_wont_terminate1) + { + runtime(500000, // uSecDelayBeforeRunningInd + 1, // numOfRunningInds + getRuntimeAttributes, + false, // immediateExit + false, // obeyTerminateReqs + 0, // numOfTerminateInds + true); // stayRunning + } + +// startup sequence : running_ind 1x +// runtime behaviour: stays running +// exit sequence : sends terminate_ind but stays running + else if (uid == uid_wont_terminate2) + { + runtime(500000, // uSecDelayBeforeRunningInd + 1, // numOfRunningInds + getRuntimeAttributes, + false, // immediateExit + false, // obeyTerminateReqs + 1, // numOfTerminateInds + true); // stayRunning + } + +// startup sequence : running_ind 0x +// runtime behaviour: exit immediately +// exit sequence : sends terminate_ind 1x -> exits +//const Uid uid_premature_exit1(L"premature_exit1"); + else if (uid == uid_premature_exit1) + { + runtime(500000, //uSecDelayBeforeRunningInd + 0, // numOfRunningInds + getRuntimeAttributes, + true, // immediateExit + true, // obeyTerminateReqs + 1, // numOfTerminateInds + false); // stayRunning + } + +// startup sequence : running_ind 1x +// runtime behaviour: exit immediately +// exit sequence : sends terminate_ind 1x -> exits +//const Uid uid_premature_exit2(L"premature_exit2"); + else if (uid == uid_premature_exit2) + { + runtime(500000, //uSecDelayBeforeRunningInd + 1, // numOfRunningInds + getRuntimeAttributes, + true, // immediateExit + true, // obeyTerminateReqs + 1, // numOfTerminateInds + false); // stayRunning + } + +// startup sequence : running_ind 1x +// runtime behaviour: exit immediately +// exit sequence : sends nothing -> exits +//const Uid uid_premature_exit3(L"premature_exit3"); + else if (uid == uid_premature_exit3) + { + runtime(500000, //uSecDelayBeforeRunningInd + 1, // numOfRunningInds + getRuntimeAttributes, + true, // immediateExit + true, // obeyTerminateReqs + 0, // numOfTerminateInds + false); // stayRunning + } + + comms.disconnect(); + + delete monitor; + + puts("Exiting"); + + return 0; +} + +void sendRunningInd() +{ + CommsMessage msg; + setApplicationRunningIndParams(msg, uid, 0); + comms.send(msg); +} + +void sendTerminatedInd() +{ + CommsMessage msg; + setApplicationTerminatedIndParams(msg, uid, 0); + comms.send(msg); +} + +void sendGetRuntimeAttributes() +{ + CommsMessage msg; + setGetExtraArguments(msg); + comms.send(msg); +}