debugsrv/runmodedebug/rmdebug_test/rm_debug/multi_agent_tests/t_agent_eventhandler.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/debugsrv/runmodedebug/rmdebug_test/rm_debug/multi_agent_tests/t_agent_eventhandler.cpp Thu Sep 02 22:05:40 2010 +0300
@@ -0,0 +1,124 @@
+// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// Implements the handling of run mode events for a particular target executable
+//
+
+#include <e32base.h>
+#include <e32property.h>
+#include <e32test.h>
+
+#include "t_rmdebug_app.h"
+#include "t_agent_eventhandler.h"
+#include "t_multi_agent.h"
+#include "t_debug_logging.h"
+
+using namespace Debug;
+
+CAgentAsyncEvent::CAgentAsyncEvent(CMultiAgent& aDriver, const TDesC& aExeName, const TDesC& aExeConfig):
+ CActive(EPriorityStandard), iDriver(aDriver)
+ {
+ }
+
+CAgentAsyncEvent* CAgentAsyncEvent::NewLC(CMultiAgent& aDriver, const TDesC& aExeName, const TDesC& aExeConfig)
+ {
+ CAgentAsyncEvent* self = new(ELeave) CAgentAsyncEvent(aDriver, aExeName, aExeConfig);
+ CleanupStack::PushL(self);
+ self->ConstructL(aExeName, aExeConfig);
+ return self;
+ }
+
+CAgentAsyncEvent* CAgentAsyncEvent::NewL(CMultiAgent& aDriver, const TDesC& aExeName, const TDesC& aExeConfig)
+ {
+ CAgentAsyncEvent* self = CAgentAsyncEvent::NewLC(aDriver, aExeName, aExeConfig);
+ CleanupStack::Pop(); // self
+ return self;
+ }
+
+void CAgentAsyncEvent::ConstructL(const TDesC& aExeName, const TDesC& aExeConfig)
+ {
+ iExeName.CreateL(aExeName);
+ iExeConfig.CreateL(aExeConfig);
+ CActiveScheduler::Add(this);
+ }
+
+CAgentAsyncEvent::~CAgentAsyncEvent()
+ {
+ LOG_MSG2("~CAgentAsyncEvent(), this = 0x%08x", this);
+
+ iSEventInfo.iEventInfoBuf.Delete(0, sizeof(TEventInfo));
+ iExeName.Close();
+ iExeConfig.Close();
+ iProc.Close();
+ Cancel(); // Cancel any request, if outstanding
+ }
+
+/*
+ * Issue request to DSS and notify the active scheduler
+ */
+void CAgentAsyncEvent::Watch()
+ {
+ LOG_MSG2("ENTER: CAgentAsyncEvent::Watch, this = 0x%08x", this);
+ iDriver.DebugDriver().GetEvent(GetExecutable(), iStatus, iSEventInfo.iEventInfoBuf);
+
+ if (!IsActive())
+ {
+ LOG_MSG("CAgentAsyncEvent::Watch(): SetActive()");
+ SetActive();
+ }
+
+ LOG_MSG("EXIT: CAgentAsyncEvent::Watch");
+ }
+
+void CAgentAsyncEvent::RunL()
+ {
+ LOG_MSG4("ENTER: CAgentAsyncEvent::RunL iDebugType=%d, iStatus.Int() %d, this 0x%x08",
+ iSEventInfo.iEventInfo.iEventType, iStatus.Int(), this);
+
+ LOG_MSG2("%S", &TPtr8((TUint8*)GetExecutable().Ptr(), 2*GetExecutable().Length(), 2*GetExecutable().Length()));
+ iDriver.HandleEvent(iSEventInfo.iEventInfo);
+
+ LOG_MSG2("iDriver.GetNumApps() %d: ", iDriver.GetNumApps());
+ LOG_MSG2("iDriver.iLaunchCompleted %d: ", iDriver.GetLaunchCompleted());
+
+ if (iDriver.GetLaunchCompleted() < iDriver.GetNumApps())
+ {
+ // Do not call Watch() if target has run to completion but test is still on going
+ if (iSEventInfo.iEventInfo.iEventType != EEventsRemoveProcess)
+ {
+ LOG_MSG("CAgentAsyncEvent::RunL Setting Watch()");
+ Watch();
+ }
+ }
+ else
+ {
+ // Stop event handling for all targets
+ LOG_MSG("CAgentAsyncEvent::RunL CActiveScheduler::Stop() & Cancel");
+ CActiveScheduler::Stop();
+ }
+
+ LOG_MSG2("EXIT: CAgentAsyncEvent::RunL", KNullDesC);
+ }
+
+void CAgentAsyncEvent::DoCancel()
+ {
+ LOG_MSG("CAgentAsyncEvent::DoCancel");
+ }
+
+TInt CAgentAsyncEvent::RunError(TInt aError)
+ {
+ LOG_MSG3(" RunL() has left with error %d, this 0x%08X", aError, this);
+ return aError;
+ // Can we handle this error? Not at the moment!
+ }
+