/** * Initialise a named OperationCaller object from a Service. * * @param name The name of the operation to look for. * @param service The Service where the operation will be looked up. * @param caller The ExecutionEngine which will be used to call us * back in case of asynchronous communication. If zero, the global Engine is used. */ OperationCaller(const std::string& name, ServicePtr service, ExecutionEngine* caller = 0) : Base(), mname(name), mcaller(caller) { if (service) { this->impl = boost::dynamic_pointer_cast< base::OperationCallerBase<Signature> >( service->getLocalOperation(name) ); if (service->hasMember(name)) setupOperationCaller( service->getOperation(name) ); } }
ServicePtr ServiceManager::getService(size_t sid) { ServicePtr service = mServiceInstances[sid]; if (!service.isNull()) return service; else { LOG_DEBUG("ServiceManager: Service instance for %d not found, will create.", sid); return createInstance(sid); } }
bool RcfServer::removeService(ServicePtr servicePtr) { RCF_LOG_2()(typeid(*servicePtr).name()) << "Removing service."; RCF_ASSERT(!mStarted && "Services cannot be added or removed while server is running."); std::vector<ServicePtr>::iterator iter = std::find(mServices.begin(), mServices.end(), servicePtr); if (iter != mServices.end()) { mServices.erase(iter); ServerTransportPtr serverTransportPtr = boost::dynamic_pointer_cast<ServerTransport>(servicePtr); if (serverTransportPtr) { eraseRemove(mServerTransports, serverTransportPtr); } stopService(servicePtr); servicePtr->onServiceRemoved(*this); return true; } return false; }
bool RcfServer::addService(ServicePtr servicePtr) { RCF_LOG_2()(typeid(*servicePtr).name()) << "RcfServer - adding service."; RCF_ASSERT(!mStarted && "Services cannot be added or removed while server is running."); if ( std::find( mServices.begin(), mServices.end(), servicePtr) == mServices.end()) { mServices.push_back(servicePtr); ServerTransportPtr serverTransportPtr = boost::dynamic_pointer_cast<ServerTransport>(servicePtr); if (serverTransportPtr) { mServerTransports.push_back(serverTransportPtr); } servicePtr->onServiceAdded(*this); return true; } return false; }
bool Ekiga::ServiceCore::add (ServicePtr service) { bool result = false; if ( !get (service->get_name ())) { services.push_front (service); service_added (service); result = true; } else { result = false; } #if DEBUG if (result) std::cout << "Ekiga::ServiceCore added " << service->get_name () << std::endl; else std::cout << "Ekiga::ServiceCore already has " << service->get_name () << std::endl; #endif return result; }
bool RcfServer::removeService(ServicePtr servicePtr) { RCF_LOG_2()(typeid(*servicePtr).name()) << "Removing service."; WriteLock lock(mServicesMutex); std::vector<ServicePtr>::iterator iter = std::find(mServices.begin(), mServices.end(), servicePtr); if (iter != mServices.end()) { mServices.erase(iter); ObjectFactoryServicePtr objectFactoryServicePtr = boost::dynamic_pointer_cast<ObjectFactoryService>(servicePtr); if (objectFactoryServicePtr) { mObjectFactoryServicePtr.reset(); } FilterServicePtr filterServicePtr = boost::dynamic_pointer_cast<FilterService>(servicePtr); if (filterServicePtr) { mFilterServicePtr.reset(); } ServerTransportPtr serverTransportPtr = boost::dynamic_pointer_cast<I_ServerTransport>(servicePtr); if (serverTransportPtr) { eraseRemove(mServerTransports, serverTransportPtr); } PingBackServicePtr pingBackServicePtr = boost::dynamic_pointer_cast<PingBackService>(servicePtr); if (pingBackServicePtr) { mPingBackServicePtr.reset(); } FileTransferServicePtr fileTransferServicePtr = boost::dynamic_pointer_cast<FileTransferService>(servicePtr); if (fileTransferServicePtr) { mFileTransferServicePtr.reset(); } SessionTimeoutServicePtr sessionTimeoutServicePtr = boost::dynamic_pointer_cast<SessionTimeoutService>(servicePtr); if (sessionTimeoutServicePtr) { mSessionTimeoutServicePtr.reset(); } lock.unlock(); stopService(servicePtr, true); servicePtr->onServiceRemoved(*this); return true; } return false; }