--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/lbshybridmultiple/src/clbstestngmessagehandler.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,123 @@
+// Copyright (c) 2008-2009 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: Extra test interface to the NetProtocolProxy. It allows the test
+// to be asynchronous and continue to run other events whilst waiting for a message
+// from the NG. The test is notified when a message arrives (or if it times out)
+//
+//
+
+#include "clbstestngmessagehandler.h"
+
+
+/** 2nd Phase constructor
+ */
+CLbsTestNgMessageHandler* CLbsTestNgMessageHandler::NewL(MLbsTestNgMessageHandler& aObserver, TInt aPmId)
+ {
+ CLbsTestNgMessageHandler* self = new (ELeave) CLbsTestNgMessageHandler(aObserver, aPmId);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CLbsTestNgMessageHandler::~CLbsTestNgMessageHandler()
+ {
+ Cancel();
+ iRequestTimeout.Close();
+ delete iProxy;
+ }
+
+void CLbsTestNgMessageHandler::ConstructL()
+ {
+ iProxy = CNetProtocolProxy::NewL(iPmId);
+ }
+
+CLbsTestNgMessageHandler::CLbsTestNgMessageHandler(MLbsTestNgMessageHandler& aObserver, TInt aPmId)
+:CActive(CActive::EPriorityStandard),
+iObserver(aObserver),
+iPmId(aPmId)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+/* AO RunL method, called when either:
+ * - Message received from the NG
+ * - Timeout occurs (-1000)
+ * The message type is returned back to the test. It then decides whether it should set itself
+ * listening again for another message
+ */
+void CLbsTestNgMessageHandler::RunL()
+ {
+ //Callback the test, to let it know a message has been received. The iStatus contains the ID of the message received
+ iObserver.OnHandleNGMessage(iPmId, iStatus.Int());
+
+ //Check to see whether any requests were made when we were busy completing this request
+ if((iRequestTimeout.Count() > 0) && (iStatus.Int() != -1000))
+ {
+ //Set us off listening again, with the stored timeout value
+ WaitForResponseL(iRequestTimeout[0]);
+ //This request has been satisfied, remove the timeout value from the array
+ iRequestTimeout.Remove(0);
+ }
+ }
+
+void CLbsTestNgMessageHandler::DoCancel()
+ {
+ //Cancel waiting for a message
+ iProxy->CancelWait();
+ }
+
+TInt CLbsTestNgMessageHandler::RunError(TInt /*aError*/)
+ {
+ return KErrNone;
+ }
+
+
+/* Sets the NetProtocolProxy off listening for a new message from the NG. This function
+ * does not block, but asynchronously waits for a new message to arrive. It can be called
+ * even when already active, it will remember that a request was made and will re-request
+ * as soon as the first request finishes.
+ * NOTE: If this is called when we are already active, the timeout is not started straightway,
+ * but is stored. As such, the timeout value will be larger than specified.
+ *
+ * @param aTimeOut Specifies the time that should be spent waiting for the message to arrive
+ */
+void CLbsTestNgMessageHandler::WaitForResponseL(TInt aTimeOut)
+ {
+ if(!IsActive())
+ {
+ iProxy->WaitForResponseL(aTimeOut, iStatus);
+ SetActive();
+ }
+ else
+ {
+ //Remember that a sequence requested we listen for a message when we were busy
+ iRequestTimeout.Append(aTimeOut);
+ }
+ }
+
+/* Gives direct access to the NetProtocolProxy which allows the test to directly send messages
+ * and access elements of the message. It should not be used for waiting for a message (use
+ * WaitForResponseL from this class)
+ */
+CNetProtocolProxy* CLbsTestNgMessageHandler::ProtocolProxy()
+ {
+ return iProxy;
+ }
+
+/** Returns the PM ID of the PM that this Network proxy is talking to.
+ */
+TInt CLbsTestNgMessageHandler::GetPmId()
+ {
+ return iPmId;
+ }