diff -r 000000000000 -r dfb7c4ff071f commsfwsupport/commselements/NetSubscribe/src/NetSubscribe.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwsupport/commselements/NetSubscribe/src/NetSubscribe.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,123 @@ +// Copyright (c) 2004-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: +// + +/** + @file + @internalComponent +*/ + +#include "NetPSSignal.h" + +using namespace NetSubscribe; + +/** + * @internalTechnology + */ +EXPORT_C void TEvent::SubscribeL(CNetSubscribe& aSubscribe, const SSignalId& aSignalId ) + { + TEventClientData data( *this ); + aSubscribe.RegisterSignalL( data, aSignalId ); + }; + +/** + * @internalTechnology + */ +EXPORT_C void TEvent::Cancel(CNetSubscribe& aSubscribe) + { + aSubscribe.DeRegisterSignal( this ); + } + +/** + * @internalTechnology + */ +EXPORT_C CNetSubscribe* CNetSubscribe::NewL( const Meta::STypeId& aTransportId ) + { + if ( aTransportId.iUid.iUid != KTransportUid ) + { + User::Leave(KErrNotFound); + } + + CNetSubscribe* newInst = NULL; + + switch (aTransportId.iType) + { + case EPublishSubscribe: + newInst = new(ELeave)CPSSubscribe(); + break; + default: + User::Leave(KErrNotFound); + } + return newInst; + } + +/** + * @internalTechnology + */ +CNetSubscribe::CNetSubscribe() + { + } + +/** + * @internalTechnology + */ +EXPORT_C CNetSubscribe::~CNetSubscribe() + { + while ( iSignals.Count() ) + { + TInt n = iSignals.Count() - 1; + XSignal* pSignal = iSignals[n]; + delete pSignal; + iSignals.Remove(n); + } + iSignals.Close(); + } + +/** + * @internalTechnology + */ +void CNetSubscribe::DeRegisterSignal(TEventBase* aEvent) + { + TInt count = iSignals.Count(); + for (TInt n = count - 1; n >= 0; n--) + { + XSignal* pSignal = iSignals[n]; + if ( pSignal->DeRegisterClient( aEvent ) == 0 ) + { + iSignals.Remove(n); + count--; + delete pSignal; + } + } + } + +/** + * @internalTechnology + */ +void CNetSubscribe::RegisterSignalL(TEventClientData& aData, const SSignalId& aSignalId ) + { + TInt count = iSignals.Count(); + for (TInt n = 0; n < count;n++) + { + XSignal* pSignal = iSignals[n]; + if ( aSignalId == pSignal->GetSignalId() ) + { + pSignal->RegisterClientL( aData ); + return; + } + } + RegisterNewSignalL(aData, aSignalId); + } + +