ChannelFind::shared_pointer DbPvProvider::channelFind( string const & channelName, ChannelFindRequester::shared_pointer const &channelFindRequester) { struct dbAddr dbAddr; long result = dbNameToAddr(channelName.c_str(),&dbAddr); if(result==0) { channelFindRequester->channelFindResult( Status::Ok, channelFinder, true); } else { Status notFoundStatus(Status::STATUSTYPE_ERROR,"pv not found"); channelFindRequester.get()->channelFindResult( notFoundStatus, channelFinder, false); } return channelFinder; }
ChannelFind::shared_pointer ChannelProviderLocal::channelFind( string const & channelName, ChannelFindRequester::shared_pointer const &channelFindRequester) { Lock xx(mutex); PVRecordPtr pvRecord = pvDatabase->findRecord(channelName); if(pvRecord) { channelFindRequester->channelFindResult( Status::Ok, channelFinder, true); } else { Status notFoundStatus(Status::STATUSTYPE_ERROR,"pv not found"); channelFindRequester->channelFindResult( notFoundStatus, channelFinder, false); } return channelFinder; }
Channel::shared_pointer ChannelProviderLocal::createChannel( string const & channelName, ChannelRequester::shared_pointer const &channelRequester, short priority) { Lock xx(mutex); PVRecordPtr pvRecord = pvDatabase->findRecord(channelName); if(pvRecord) { ChannelLocalPtr channel(new ChannelLocal( getPtrSelf(),channelRequester,pvRecord)); channelRequester->channelCreated( Status::Ok, channel); pvRecord->addPVRecordClient(channel); return channel; } Status notFoundStatus(Status::STATUSTYPE_ERROR,"pv not found"); channelRequester->channelCreated( notFoundStatus, Channel::shared_pointer()); return Channel::shared_pointer(); }
Channel::shared_pointer DbPvProvider::createChannel( string const & channelName, ChannelRequester::shared_pointer const &channelRequester, short priority, string const & address) { struct dbAddr dbAddr; long result = dbNameToAddr(channelName.c_str(),&dbAddr); if(result!=0) { Status notFoundStatus(Status::STATUSTYPE_ERROR,"pv not found"); channelRequester->channelCreated( notFoundStatus, Channel::shared_pointer()); return Channel::shared_pointer(); } std::tr1::shared_ptr<DbAddr> addr(new DbAddr()); memcpy(addr.get(),&dbAddr,sizeof(dbAddr)); DbPvPtr v3Channel(new DbPv( getPtrSelf(), channelRequester,channelName,addr)); v3Channel->init(); channelRequester->channelCreated(Status::Ok,v3Channel); return v3Channel; }