コード例 #1
0
ファイル: OperationCaller.hpp プロジェクト: smits/rtt
 /**
  * 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) );
     }
 }
コード例 #2
0
	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);
		}
	}
コード例 #3
0
    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;
    }
コード例 #4
0
    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;
    }
コード例 #5
0
ファイル: services.cpp プロジェクト: Pobegunchik/ekiga
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;
}
コード例 #6
0
    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;
    }