diff --git a/pvAccessApp/remote/channelSearchManager.cpp b/pvAccessApp/remote/channelSearchManager.cpp index 89b8627..c07c6a1 100644 --- a/pvAccessApp/remote/channelSearchManager.cpp +++ b/pvAccessApp/remote/channelSearchManager.cpp @@ -60,7 +60,7 @@ bool BaseSearchInstance::generateSearchRequestMessage(ByteBuffer* requestMessage return false; } - const string name = getChannelName(); + const String name = getSearchInstanceName(); // not nice... const int addedPayloadSize = sizeof(int32)/sizeof(int8) + (1 + sizeof(int32)/sizeof(int8) + name.length()); @@ -69,7 +69,7 @@ bool BaseSearchInstance::generateSearchRequestMessage(ByteBuffer* requestMessage return false; } - requestMessage->putInt(getChannelID()); + requestMessage->putInt(getSearchInstanceID()); SerializeHelper::serializeString(name, requestMessage, control); requestMessage->putInt(PAYLOAD_POSITION, requestMessage->getPosition() - CA_MESSAGE_HEADER_SIZE); @@ -421,7 +421,7 @@ const int64 ChannelSearchManager::MAX_SEARCH_PERIOD_LOWER_LIMIT = 60000; const int64 ChannelSearchManager::BEACON_ANOMALY_SEARCH_PERIOD = 5000; const int32 ChannelSearchManager::MAX_TIMERS = 18; -ChannelSearchManager::ChannelSearchManager(ClientContextImpl* context): +ChannelSearchManager::ChannelSearchManager(Context* context): _context(context), _canceled(false), _rttmean(MIN_RTT), @@ -503,17 +503,17 @@ void ChannelSearchManager::registerChannel(SearchInstance* channel) Lock guard(&_channelMutex); //overrides if already registered - _channels[channel->getChannelID()] = channel; + _channels[channel->getSearchInstanceID()] = channel; _timers[0]->installChannel(channel); } void ChannelSearchManager::unregisterChannel(SearchInstance* channel) { Lock guard(&_channelMutex); - _channelsIter = _channels.find(channel->getChannelID()); + _channelsIter = _channels.find(channel->getSearchInstanceID()); if(_channelsIter != _channels.end()) { - _channels.erase(channel->getChannelID()); + _channels.erase(channel->getSearchInstanceID()); } channel->removeAndUnsetListOwnership(); @@ -590,7 +590,7 @@ void ChannelSearchManager::flushSendBuffer() TimeStamp now; now.getCurrent(); _timeAtLastSend = now.getMilliseconds(); - _context->getSearchTransport()->send(_sendBuffer); + ((BlockingUDPTransport*)_context->getSearchTransport())->send(_sendBuffer); initializeSendBuffer(); } diff --git a/pvAccessApp/remote/channelSearchManager.h b/pvAccessApp/remote/channelSearchManager.h index 93a1873..09311c7 100644 --- a/pvAccessApp/remote/channelSearchManager.h +++ b/pvAccessApp/remote/channelSearchManager.h @@ -24,7 +24,7 @@ using namespace epics::pvData; namespace epics { namespace pvAccess { -//TODO check the const of paramerers +//TODO check the const of parameters /** * SearchInstance. diff --git a/testApp/remote/testChannelSearchManager.cpp b/testApp/remote/testChannelSearchManager.cpp index 601b639..b432ba7 100644 --- a/testApp/remote/testChannelSearchManager.cpp +++ b/testApp/remote/testChannelSearchManager.cpp @@ -6,12 +6,341 @@ using namespace epics::pvData; using namespace epics::pvAccess; +//TODO this will be deleted + class ChannelImpl; + + class ContextImpl : public Context + + { + + private: + + Timer* _timer; + + public: + + + + ContextImpl() + + { + + _timer = new Timer("krneki",lowPriority); + + } + + + + virtual Version* getVersion() { + + return NULL; + + } + + + + virtual ChannelProvider* getProvider() { + + return NULL; + + } + + + + Timer* getTimer() + + { + + return _timer; + + } + + + + virtual void initialize() { + + + + } + + + + virtual void printInfo() { + + + + } + + + + virtual void printInfo(epics::pvData::StringBuilder out) { + + + + } + + + + virtual void destroy() + + { + + + + } + + + + virtual void dispose() + + { + + + + } + + + + BlockingUDPTransport* getSearchTransport() + + { + + return NULL; + + } + + + + /** + + * Searches for a channel with given channel ID. + + * @param channelID CID. + + * @return channel with given CID, if non-existent. + + */ + + Channel* getChannel(pvAccessID channelID) + + { + + return NULL; + + } + + Configuration* getConfiguration() {return NULL;} + + TransportRegistry* getTransportRegistry() {return NULL;} + + ~ContextImpl() { delete _timer;}; + + private: + + + + + + void loadConfiguration() { + + + + } + + + + void internalInitialize() { + + + + + + } + + + + void initializeUDPTransport() { + + + + } + + + + void internalDestroy() { + + + + } + + + + void destroyAllChannels() { + + + + } + + + + /** + + * Check channel name. + + */ + + void checkChannelName(String& name) { + + + + } + + + + /** + + * Check context state and tries to establish necessary state. + + */ + + void checkState() { + + + + } + + + + + + + + /** + + * Generate Client channel ID (CID). + + * @return Client channel ID (CID). + + */ + + pvAccessID generateCID() + + { + + return 0; + + } + + + + /** + + * Free generated channel ID (CID). + + */ + + void freeCID(int cid) + + { + + + + } + + + + + + /** + + * Get, or create if necessary, transport of given server address. + + * @param serverAddress required transport address + + * @param priority process priority. + + * @return transport for given address + + */ + + Transport* getTransport(TransportClient* client, osiSockAddr* serverAddress, int minorRevision, int priority) + + { + + + + return NULL; + + } + + + + /** + + * Internal create channel. + + */ + + // TODO no minor version with the addresses + + // TODO what if there is an channel with the same name, but on different host! + + Channel* createChannelInternal(String name, ChannelRequester* requester, short priority, + + InetAddrVector* addresses) { + + return NULL; + + } + + + + /** + + * Destroy channel. + + * @param channel + + * @param force + + * @throws CAException + + * @throws IllegalStateException + + */ + + void destroyChannel(ChannelImpl* channel, bool force) { + + + + + + } + + + + /** + + * Get channel search manager. + + * @return channel search manager. + + */ + + ChannelSearchManager* getChannelSearchManager() { + + return NULL; + + } + + }; + class TestSearcInstance : public BaseSearchInstance { public: TestSearcInstance(string channelName, pvAccessID channelID): _channelID(channelID), _channelName(channelName) {} - pvAccessID getChannelID() { return _channelID;}; - string getChannelName() {return _channelName;}; + pvAccessID getSearchInstanceID() { return _channelID;}; + string getSearchInstanceName() {return _channelName;}; void searchResponse(int8 minorRevision, osiSockAddr* serverAddress) {}; private: pvAccessID _channelID; @@ -19,8 +348,8 @@ private: }; static const int max_channels = 100; -ClientContextImpl* context = new ClientContextImpl(); -ChannelSearchManager* manager = new ChannelSearchManager(context); +ContextImpl* context = new ContextImpl(); +ChannelSearchManager* manager = new ChannelSearchManager(static_cast(context)); TestSearcInstance** chanArray = new TestSearcInstance*[max_channels]; void* testWorker1(void* p)