--- a/datacommsserver/esockserver/test/providers/dummy/src/dummypr_mcprpubsubsubscriber.cpp Thu Jan 07 13:34:53 2010 +0200
+++ b/datacommsserver/esockserver/test/providers/dummy/src/dummypr_mcprpubsubsubscriber.cpp Mon Jan 18 21:26:35 2010 +0200
@@ -38,6 +38,15 @@
using namespace Messages;
using namespace ESock;
+CMCPrPubSubSubscriber* CMCPrPubSubSubscriber::NewL(const ESock::CMetaConnectionProviderBase& aProvBase, TUint aStopCode)
+ {
+ CMCPrPubSubSubscriber* self = new (ELeave) CMCPrPubSubSubscriber(aProvBase,aStopCode);
+ CleanupStack::PushL(self);
+ self->StartL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
CMCPrPubSubSubscriber::CMCPrPubSubSubscriber(const ESock::CMetaConnectionProviderBase& aProvBase, TUint aStopCode)
: CActive(EPriorityNormal),
iNode(aProvBase),
@@ -45,6 +54,35 @@
{
}
+void CMCPrPubSubSubscriber::StartAvailabilityMonitoringL(const Messages::TNodeCtxId& aAvailabilityActivity)
+ {
+ iAvailabilityActivity = aAvailabilityActivity;
+ TInt score = TAvailabilityStatus::EUnknownAvailabilityScore;
+
+ TInt result = iProperty.Attach(TUid::Uid(EAvailabilityTestingPubSubUid), iNode.ProviderInfo().APId());
+ if(result != KErrNone)
+ {
+ User::LeaveIfError(iProperty.Define(TUid::Uid(EAvailabilityTestingPubSubUid), iNode.ProviderInfo().APId(), RProperty::EInt));
+ User::LeaveIfError(iProperty.Attach(TUid::Uid(EAvailabilityTestingPubSubUid), iNode.ProviderInfo().APId()));
+ }
+
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ iProperty.Get(score); //If Get() is unsuccessful score must not be modified!
+
+ if (score != TAvailabilityStatus::EUnknownAvailabilityScore)
+ {
+ //Send the intial availability status.
+ TAvailabilityStatus status(score);
+ RClientInterface::OpenPostMessageClose(NodeId(), iAvailabilityActivity,
+ TCFAvailabilityControlClient::TAvailabilityNotification(status).CRef());
+ }
+ }
+
+void CMCPrPubSubSubscriber::CancelAvailabilityMonitoring()
+ {
+ iAvailabilityActivity = Messages::TNodeCtxId::NullId();
+ }
void CMCPrPubSubSubscriber::StartL()
{
@@ -52,6 +90,25 @@
CActiveScheduler::Add(this);
}
+void CMCPrPubSubSubscriber::RunL()
+ {
+ __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubSubscriber::RunL")));
+ User::LeaveIfError(iStatus.Int());
+
+ // resubscribe immediately
+ iProperty.Subscribe(iStatus);
+ SetActive();
+
+ // then process
+ TInt value;
+ User::LeaveIfError(iProperty.Get(value));
+ __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubSubscriber subscribed value now %d"),value));
+
+ ASSERT(!iAvailabilityActivity.IsNull()); //maybe a bit defensive, but this is test code after all. The test changes availability when nobody is listenning; Surely test is wrong?
+ RClientInterface::OpenPostMessageClose(Id(), iAvailabilityActivity,
+ TCFAvailabilityControlClient::TAvailabilityNotification(value).CRef());
+ }
+
TInt CMCPrPubSubSubscriber::RunError(TInt /*aError*/)
{
//path uncovered.
@@ -69,150 +126,3 @@
this->Cancel(); // object must be stoppable by destcruction due to cleanup restrictions
iProperty.Close();
}
-
-//
-
-CMCPrPubSubAvailability* CMCPrPubSubAvailability::NewL(const ESock::CMetaConnectionProviderBase& aProvBase, TUint aStopCode)
- {
- CMCPrPubSubAvailability* self = new (ELeave) CMCPrPubSubAvailability(aProvBase,aStopCode);
- CleanupStack::PushL(self);
- self->StartL();
- CleanupStack::Pop(self);
- return self;
- }
-
-CMCPrPubSubAvailability::CMCPrPubSubAvailability(const ESock::CMetaConnectionProviderBase& aProvBase, TUint aStopCode)
-: CMCPrPubSubSubscriber(aProvBase,aStopCode)
- {
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubAvailability ctor")));
- }
-
-void CMCPrPubSubAvailability::StartAvailabilityMonitoringL(const Messages::TNodeCtxId& aAvailabilityActivity)
- {
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubSubscriber::StartAvailabilityMonitoringL")));
-
- iAvailabilityActivity = aAvailabilityActivity;
- TInt score = TAvailabilityStatus::EUnknownAvailabilityScore;
-
- TInt result = iProperty.Attach(TUid::Uid(EAvailabilityTestingPubSubUid), iNode.ProviderInfo().APId());
- if(result != KErrNone)
- {
- User::LeaveIfError(iProperty.Define(TUid::Uid(EAvailabilityTestingPubSubUid), iNode.ProviderInfo().APId(), RProperty::EInt));
- User::LeaveIfError(iProperty.Attach(TUid::Uid(EAvailabilityTestingPubSubUid), iNode.ProviderInfo().APId()));
- }
-
- iProperty.Subscribe(iStatus);
- SetActive();
- iProperty.Get(score); //If Get() is unsuccessful score must not be modified!
-
- if (score != TAvailabilityStatus::EUnknownAvailabilityScore)
- {
- //Send the intial availability status.
- TAvailabilityStatus status(score);
- RClientInterface::OpenPostMessageClose(NodeId(), iAvailabilityActivity,
- TCFAvailabilityControlClient::TAvailabilityNotification(status).CRef());
- }
- }
-
-void CMCPrPubSubAvailability::CancelAvailabilityMonitoring()
- {
- iAvailabilityActivity = Messages::TNodeCtxId::NullId();
- }
-
-void CMCPrPubSubAvailability::RunL()
- {
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubAvailability::RunL")));
- User::LeaveIfError(iStatus.Int());
-
- // resubscribe immediately
- iProperty.Subscribe(iStatus);
- SetActive();
-
- // then process
- TInt value;
- User::LeaveIfError(iProperty.Get(value));
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubAvailability subscribed value now %d"),value));
-
- __ASSERT_DEBUG(!iAvailabilityActivity.IsNull(), User::Panic(KSpecAssert_DummyPrStopSubsc, 1)); //maybe a bit defensive, but this is test code after all. The test changes availability when nobody is listenning; Surely test is wrong?
- RClientInterface::OpenPostMessageClose(Id(), iAvailabilityActivity,
- TCFAvailabilityControlClient::TAvailabilityNotification(value).CRef());
- }
-
-//
-
-CMCPrPubSubStopTrigger* CMCPrPubSubStopTrigger::NewL(const ESock::CMetaConnectionProviderBase& aProvBase, TUint aStopCode)
- {
- CMCPrPubSubStopTrigger* self = new (ELeave) CMCPrPubSubStopTrigger(aProvBase,aStopCode);
- CleanupStack::PushL(self);
- self->StartL();
- CleanupStack::Pop(self);
- return self;
- __ASSERT_DEBUG(EFalse, User::Panic(KSpecAssert_DummyPrStopSubsc, 2));
-
- }
-
-CMCPrPubSubStopTrigger::CMCPrPubSubStopTrigger(const ESock::CMetaConnectionProviderBase& aProvBase, TUint aStopCode)
-: CMCPrPubSubSubscriber(aProvBase,aStopCode),
- iNodeId(aProvBase.Id())
- {
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubStopTrigger ctor")));
- }
-
-void
-CMCPrPubSubStopTrigger::StartL()
- {
- CMCPrPubSubSubscriber::StartL();
- TInt result = iProperty.Attach(TUid::Uid(EStopTriggeringPubSubUid), 1);
- if(result != KErrNone)
- {
- User::LeaveIfError(iProperty.Define(TUid::Uid(EStopTriggeringPubSubUid), 1, RProperty::EInt));
- User::LeaveIfError(iProperty.Attach(TUid::Uid(EStopTriggeringPubSubUid), 1));
- }
- iProperty.Subscribe(iStatus);
- SetActive();
- }
-
-void CMCPrPubSubStopTrigger::RunL()
- {
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubStopTrigger::RunL")));
- User::LeaveIfError(iStatus.Int());
-
- // resubscribe immediately
- iProperty.Subscribe(iStatus);
- SetActive();
-
- // then process
- TInt value;
- User::LeaveIfError(iProperty.Get(value));
- __CFLOG_VAR((KDummyMCprTag, KDummyMCprSubTag, _L8("CMCPrPubSubStopTrigger subscribed value now %d"),value));
-
- CMetaConnectionProviderBase* provider = const_cast<CMetaConnectionProviderBase*>(static_cast<const CMetaConnectionProviderBase*>(&iNode));
- __ASSERT_DEBUG(provider, User::Panic(KSpecAssert_DummyPrStopSubsc, 3));
-
- if(value==KStart)
- {
- if(iBlocking)
- {
- // Decrement semaphore to stop the provider from being destroyed once all of it's children have been stopped.
- provider->DecrementBlockingDestroy();
- iBlocking = false;
- }
-
- TCFServiceProvider::TStart msg;
- RClientInterface::OpenPostMessageClose(iNodeId, iNodeId, msg);
- }
- else
- if((value==KBlockingStop || value==KStop) && iNode.ServiceProvider() != NULL)
- {
- if(!iBlocking && value==KBlockingStop)
- {
- // Increment semaphore to stop the provider from being destroyed once all of it's children have been stopped.
- provider->IncrementBlockingDestroy();
- iBlocking = true;
- }
-
- TCFServiceProvider::TStop msg(iStopCode);
- RClientInterface::OpenPostMessageClose(iNodeId, iNodeId, msg);
- }
- }
-