--- a/datacommsserver/esockserver/test/providers/dummy/src/dummypr_mcprpubsubsubscriber.cpp Mon Mar 15 12:45:15 2010 +0200
+++ b/datacommsserver/esockserver/test/providers/dummy/src/dummypr_mcprpubsubsubscriber.cpp Wed Mar 31 23:27:09 2010 +0300
@@ -38,15 +38,6 @@
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),
@@ -54,35 +45,6 @@
{
}
-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()
{
@@ -90,25 +52,6 @@
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.
@@ -126,3 +69,150 @@
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);
+ }
+ }
+