diff -r f5050f1da672 -r 04becd199f91 javacommons/comms/src/commscontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/comms/src/commscontext.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2008 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: Container for sharable endpoints. Sharable endpoints can be + found using name (wstring) +* +*/ + +#include +#include + +#include "logger.h" +#include "javacommonutils.h" + +#include "commscontext.h" +#include "commsclientendpoint.h" + +using namespace java::comms; +using java::util::ScopedLock; + +using namespace java::util; + +CommsContext::CommsContext() +{ +} + +CommsContext::~CommsContext() +{ + for (endpoints_t::iterator it = mEndpoints.begin(); it != mEndpoints.end(); it++) + { + delete it->second; + } + mEndpoints.clear(); + + for (serverEndpoints_t::iterator it = mServerEndpoints.begin(); it != mServerEndpoints.end(); it++) + { + delete it->second; + } + mServerEndpoints.clear(); +} + +#if defined(__SYMBIAN32__) && defined(__WINSCW__) + +#include +CommsContext& CommsContext::getContext() +{ + // Access the PLS of this process + CommsContext* context = Pls(TUid::Uid(0x200211DF)); + return *context; +} + +#else + +static CommsContext* sContext = 0; +CommsContext& CommsContext::getContext() +{ + + if (sContext == 0) + { + sContext = new CommsContext(); + } + return *sContext; +} +#endif + +void CommsContext::add(CommsClientEndpoint* aEndpoint, const wstring& aName) +{ +// JELOG2(EJavaComms); + ScopedLock lock(mEndpointsMutex); + + endpoints_t::iterator it = mEndpoints.find(aEndpoint); + if (it == mEndpoints.end() && find(aName) == 0) + { + mEndpoints.insert(std::make_pair(aEndpoint, new wstring(aName))); + LOG1WSTR(EJavaComms, EInfo, "Added client endpoint=%s", aName); + } + else + { + ELOG1WSTR(EJavaComms, "Add client endpoint failed, endpoint=%s", aName); + } +} + +void CommsContext::remove(CommsClientEndpoint* aEndpoint) +{ +// JELOG2(EJavaComms); + ScopedLock lock(mEndpointsMutex); + + endpoints_t::iterator it = mEndpoints.find(aEndpoint); + + if (it != mEndpoints.end()) + { + LOG1WSTR(EJavaComms, EInfo, "Removed client endpoint=%s", *(it->second)); + delete it->second; + mEndpoints.erase(it); + } +} + +CommsClientEndpoint* CommsContext::find(const wstring& aName) +{ +// JELOG2(EJavaComms); + ScopedLock lock(mEndpointsMutex); + + CommsClientEndpoint* client = 0; + for (endpoints_t::iterator it = mEndpoints.begin(); it != mEndpoints.end(); it++) + { + if (aName.compare(*(it->second)) == 0) + { + client = it->first; + LOG1WSTR(EJavaComms, EInfo, "Found client endpoint=%s", aName); + break; + } + } + return client; +} + +void CommsContext::add(CommsServerEndpoint* aEndpoint, const wstring& aName) +{ +// JELOG2(EJavaComms); + ScopedLock lock(mEndpointsMutex); + + serverEndpoints_t::iterator it = mServerEndpoints.find(aEndpoint); + if (it == mServerEndpoints.end() && findServer(aName) == 0) + { + mServerEndpoints.insert(std::make_pair(aEndpoint, new wstring(aName))); + LOG1WSTR(EJavaComms, EInfo, "Added server endpoint=%s", aName); + } + else + { + ELOG1WSTR(EJavaComms, "Add server endpoint failed, endpoint=%s", aName); + } +} + +void CommsContext::remove(CommsServerEndpoint* aEndpoint) +{ +// JELOG2(EJavaComms); + ScopedLock lock(mEndpointsMutex); + + serverEndpoints_t::iterator it = mServerEndpoints.find(aEndpoint); + + if (it != mServerEndpoints.end()) + { + LOG1WSTR(EJavaComms, EInfo, "Removed server endpoint=%s", *(it->second)); + delete it->second; + mServerEndpoints.erase(it); + } +} + +CommsServerEndpoint* CommsContext::findServer(const wstring& aName) +{ +// JELOG2(EJavaComms); + ScopedLock lock(mEndpointsMutex); + + CommsServerEndpoint* server = 0; + for (serverEndpoints_t::iterator it = mServerEndpoints.begin(); it != mServerEndpoints.end(); it++) + { + if (aName.compare(*(it->second)) == 0) + { + server = it->first; + LOG1WSTR(EJavaComms, EInfo, "Found server endpoint=%s", aName); + break; + } + } + return server; +} +