示例#1
0
void SthenoCore::createServiceInstance(UUIDPtr& sid, UUIDPtr& iid, ServiceAbstractPtr& sPtr) throw (RuntimeException&, ServiceException&) {
    if (!isValid()) {
        throw RuntimeException(RuntimeException::INVALID_RUNTIME);
    }
    LocalServicePtr servicePtr;
    if (m_serviceMap.find(sid, servicePtr) == -1) {
        printf("INFO: createServiceInstance() - SID=%s not found service!\n", sid->toString().c_str());
        LocalService* ls = new LocalService(sid);
        servicePtr.reset(ls);
        if (m_serviceMap.bind(sid, servicePtr) != 0) {
            throw ServiceException("Error on binding service");
        }
    }
    printf("INFO: createServiceInstance() - SID=%s found service!\n", sid->toString().c_str());
    ServiceAbstract* i = m_serviceFactory.getInstance(sid);
    i->setIID(iid);
    ServiceAbstractPtr iPtr(i);
    servicePtr->addServiceInstance(iPtr);
    sPtr = iPtr;
}
示例#2
0
void PeerInfo::deserialize(InputStream& inputStream) throw (SerializationException&) {
    inputStream.read_ulong(m_type);
    UUID* peerID = new UUID(inputStream);
    m_uuidPtr.reset(peerID);
    UUID* fID = new UUID(inputStream);
    m_fidPtr.reset(fID);
    Boolean flag = false;
    inputStream.read_boolean(flag);
    if (flag) {
        SAPInfo* e = new SAPInfo(inputStream);
        m_meshSAP.reset(e);
    } else {
        m_meshSAP.reset(0);
    }

    inputStream.read_boolean(flag);
    if (flag) {
        SAPInfo* e = new SAPInfo(inputStream);
        m_discoverySAP.reset(e);
    } else {
        m_discoverySAP.reset(0);
    }

    inputStream.read_boolean(flag);
    if (flag) {
        SAPInfo* e = new SAPInfo(inputStream);
        m_ftSAP.reset(e);
    } else {
        m_ftSAP.reset(0);
    }
    //services
    m_serviceMap.unbind_all();
    int count = 0;
    inputStream.read_long(count);
    for (int i = 0; i < count; i++) {
        ServiceInfo* pi = new ServiceInfo(inputStream);
        ServiceInfoPtr iPtr(pi);
        m_serviceMap.bind(pi->getSid(), iPtr);
    }
}
示例#3
0
//-*****************************************************************************
const AbcA::PropertyHeader &
CprData::getPropertyHeader( AbcA::CompoundPropertyReaderPtr iParent, size_t i )
{
    // fixed length and resize called in ctor, so multithread safe.
    if ( i > m_propertyHeaders.size() )
    {
        ABCA_THROW( "Out of range index in "
                    << "CprData::getPropertyHeader: " << i );
    }
    Alembic::Util::scoped_lock l( m_subPropertyMutexes[i] );

    // read the property header stuff if we haven't yet
    if ( m_propertyHeaders[i].header == NULL )
    {
        uint32_t tsid = 0;

        PropertyHeaderPtr iPtr( new AbcA::PropertyHeader() );
        ReadPropertyHeader( m_group, m_propertyHeaders[i].name, *iPtr,
                            m_propertyHeaders[i].isScalarLike,
                            m_propertyHeaders[i].numSamples,
                            m_propertyHeaders[i].firstChangedIndex,
                            m_propertyHeaders[i].lastChangedIndex, tsid );

        if ( iPtr->isSimple() )
        {
            AbcA::TimeSamplingPtr tsPtr =
                iParent->getObject()->getArchive()->getTimeSampling( tsid );

            iPtr->setTimeSampling(tsPtr);
        }

        m_propertyHeaders[i].header = iPtr;

        // don't need name anymore (it's in the header)
        m_propertyHeaders[i].name = "";
    }

    return *(m_propertyHeaders[i].header);
}