This commit is contained in:
Matej Sekoranja
2016-03-21 21:54:37 +01:00
5 changed files with 105 additions and 132 deletions

View File

@@ -277,13 +277,6 @@ std::tr1::shared_ptr<ChannelRequester> CAChannel::getChannelRequester()
return channelRequester;
}
bool CAChannel::isConnected()
{
return (ca_state(channelID) == cs_conn);
}
void CAChannel::getField(GetFieldRequester::shared_pointer const & requester,
std::string const & subField)
{
@@ -383,12 +376,6 @@ ChannelArray::shared_pointer CAChannel::createChannelArray(
}
void CAChannel::printInfo()
{
printInfo(std::cout);
}
void CAChannel::printInfo(std::ostream& out)
{
out << "CHANNEL : " << getChannelName() << std::endl;
@@ -403,21 +390,6 @@ void CAChannel::printInfo(std::ostream& out)
}
/* --------------- epics::pvData::Requester --------------- */
string CAChannel::getRequesterName()
{
return getChannelName();
}
void CAChannel::message(std::string const & message,MessageType messageType)
{
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl;
}
/* --------------- epics::pvData::Destroyable --------------- */

View File

@@ -47,7 +47,6 @@ public:
virtual ConnectionState getConnectionState();
virtual std::string getChannelName();
virtual std::tr1::shared_ptr<ChannelRequester> getChannelRequester();
virtual bool isConnected();
virtual void getField(GetFieldRequester::shared_pointer const & requester,std::string const & subField);
@@ -81,16 +80,8 @@ public:
ChannelArrayRequester::shared_pointer const & channelArrayRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest);
virtual void printInfo();
virtual void printInfo(std::ostream& out);
/* --------------- epics::pvData::Requester --------------- */
virtual std::string getRequesterName();
virtual void message(std::string const & message, epics::pvData::MessageType messageType);
/* --------------- epics::pvData::Destroyable --------------- */
virtual void destroy();

View File

@@ -627,6 +627,9 @@ public:
virtual ~Channel() {}
virtual std::string getRequesterName();
virtual void message(std::string const & message, epics::pvData::MessageType messageType);
/**
* Channel connection status.
*/
@@ -675,7 +678,7 @@ public:
* Is the channel connected?
* @return (false,true) means (not, is) connected.
*/
virtual bool isConnected() = 0;
virtual bool isConnected() { return getConnectionState()==CONNECTED; }
/**
* Get a Field which describes the subField.
@@ -706,7 +709,7 @@ public:
*/
virtual ChannelProcess::shared_pointer createChannelProcess(
ChannelProcessRequester::shared_pointer const & channelProcessRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Create a ChannelGet.
@@ -720,7 +723,7 @@ public:
*/
virtual ChannelGet::shared_pointer createChannelGet(
ChannelGetRequester::shared_pointer const & channelGetRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Create a ChannelPut.
@@ -734,7 +737,7 @@ public:
*/
virtual ChannelPut::shared_pointer createChannelPut(
ChannelPutRequester::shared_pointer const & channelPutRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Create a ChannelPutGet.
@@ -748,7 +751,7 @@ public:
*/
virtual ChannelPutGet::shared_pointer createChannelPutGet(
ChannelPutGetRequester::shared_pointer const & channelPutGetRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Create a ChannelRPC (Remote Procedure Call).
@@ -758,7 +761,7 @@ public:
*/
virtual ChannelRPC::shared_pointer createChannelRPC(
ChannelRPCRequester::shared_pointer const & channelRPCRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Create a Monitor.
@@ -769,7 +772,7 @@ public:
*/
virtual Monitor::shared_pointer createMonitor(
MonitorRequester::shared_pointer const & monitorRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Create a ChannelArray.
@@ -779,18 +782,18 @@ public:
*/
virtual ChannelArray::shared_pointer createChannelArray(
ChannelArrayRequester::shared_pointer const & channelArrayRequester,
epics::pvData::PVStructure::shared_pointer const & pvRequest) = 0;
epics::pvData::PVStructure::shared_pointer const & pvRequest);
/**
* Prints detailed information about the context to the standard output stream.
*/
virtual void printInfo() = 0;
virtual void printInfo() { printInfo(std::cout); }
/**
* Prints detailed information about the context to the specified output stream.
* @param out the output stream.
*/
virtual void printInfo(std::ostream& out) = 0;
virtual void printInfo(std::ostream& out) {}
};

View File

@@ -7,10 +7,98 @@
#define epicsExportSharedSymbols
#include <pv/pvAccess.h>
namespace pvd = epics::pvData;
namespace epics {
namespace pvAccess {
const char* Channel::ConnectionStateNames[] = { "NEVER_CONNECTED", "CONNECTED", "DISCONNECTED", "DESTROYED" };
std::string Channel::getRequesterName()
{
std::tr1::shared_ptr<ChannelRequester> req(getChannelRequester());
return req ? req->getRequesterName() : std::string("<Destroy'd Channel>");
}
void Channel::message(std::string const & message, epics::pvData::MessageType messageType)
{
std::tr1::shared_ptr<ChannelRequester> req(getChannelRequester());
if(req) {
req->message(message, messageType);
} else {
std::cerr<<epics::pvData::getMessageTypeName(messageType)
<<": on Destroy'd Channel \""<<getChannelName()
<<"\" : "<<message;
}
}
ChannelProcess::shared_pointer Channel::createChannelProcess(
ChannelProcessRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
ChannelProcess::shared_pointer ret;
requester->channelProcessConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"), ret);
return ret;
}
ChannelGet::shared_pointer Channel::createChannelGet(
ChannelGetRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
ChannelGet::shared_pointer ret;
requester->channelGetConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"),
ret, pvd::StructureConstPtr());
return ret;
}
ChannelPut::shared_pointer Channel::createChannelPut(
ChannelPutRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
ChannelPut::shared_pointer ret;
requester->channelPutConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"),
ret, pvd::StructureConstPtr());
return ret;
}
ChannelPutGet::shared_pointer Channel::createChannelPutGet(
ChannelPutGetRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
ChannelPutGet::shared_pointer ret;
requester->channelPutGetConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"),
ret, pvd::StructureConstPtr(), pvd::StructureConstPtr());
return ret;
}
ChannelRPC::shared_pointer Channel::createChannelRPC(
ChannelRPCRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
ChannelRPC::shared_pointer ret;
requester->channelRPCConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"), ret);
return ret;
}
pvd::Monitor::shared_pointer Channel::createMonitor(
epics::pvData::MonitorRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
pvd::Monitor::shared_pointer ret;
requester->monitorConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"),
ret, pvd::StructureConstPtr());
return ret;
}
ChannelArray::shared_pointer Channel::createChannelArray(
ChannelArrayRequester::shared_pointer const & requester,
epics::pvData::PVStructure::shared_pointer const & pvRequest)
{
ChannelArray::shared_pointer ret;
requester->channelArrayConnect(pvd::Status(pvd::Status::STATUSTYPE_FATAL, "Not Implemented"),
ret, pvd::Array::const_shared_pointer());
return ret;
}
}
}

View File

@@ -189,9 +189,6 @@ class RPCChannel :
{
private:
static Status notSupportedStatus;
static Status destroyedStatus;
AtomicBoolean m_destroyed;
ChannelProvider::shared_pointer m_provider;
@@ -233,7 +230,7 @@ public:
virtual ConnectionState getConnectionState()
{
return isConnected() ?
return (!m_destroyed.get()) ?
Channel::CONNECTED :
Channel::DESTROYED;
}
@@ -248,12 +245,6 @@ public:
return m_channelRequester;
}
virtual bool isConnected()
{
return !m_destroyed.get();
}
virtual AccessRights getAccessRights(epics::pvData::PVField::shared_pointer const & /*pvField*/)
{
return none;
@@ -261,47 +252,8 @@ public:
virtual void getField(GetFieldRequester::shared_pointer const & requester,std::string const & /*subField*/)
{
requester->getDone(notSupportedStatus, epics::pvData::Field::shared_pointer());
}
virtual ChannelProcess::shared_pointer createChannelProcess(
ChannelProcessRequester::shared_pointer const & channelProcessRequester,
epics::pvData::PVStructure::shared_pointer const & /*pvRequest*/)
{
ChannelProcess::shared_pointer nullPtr;
channelProcessRequester->channelProcessConnect(notSupportedStatus, nullPtr);
return nullPtr;
}
virtual ChannelGet::shared_pointer createChannelGet(
ChannelGetRequester::shared_pointer const & channelGetRequester,
epics::pvData::PVStructure::shared_pointer const & /*pvRequest*/)
{
ChannelGet::shared_pointer nullPtr;
channelGetRequester->channelGetConnect(notSupportedStatus, nullPtr,
epics::pvData::Structure::const_shared_pointer());
return nullPtr;
}
virtual ChannelPut::shared_pointer createChannelPut(
ChannelPutRequester::shared_pointer const & channelPutRequester,
epics::pvData::PVStructure::shared_pointer const & /*pvRequest*/)
{
ChannelPut::shared_pointer nullPtr;
channelPutRequester->channelPutConnect(notSupportedStatus, nullPtr,
epics::pvData::Structure::const_shared_pointer());
return nullPtr;
}
virtual ChannelPutGet::shared_pointer createChannelPutGet(
ChannelPutGetRequester::shared_pointer const & channelPutGetRequester,
epics::pvData::PVStructure::shared_pointer const & /*pvRequest*/)
{
ChannelPutGet::shared_pointer nullPtr;
epics::pvData::Structure::const_shared_pointer nullStructure;
channelPutGetRequester->channelPutGetConnect(notSupportedStatus, nullPtr, nullStructure, nullStructure);
return nullPtr;
requester->getDone(epics::pvData::Status(epics::pvData::Status::STATUSTYPE_ERROR, "Only RPC is implemented"),
epics::pvData::Field::shared_pointer());
}
virtual ChannelRPC::shared_pointer createChannelRPC(
@@ -316,7 +268,7 @@ public:
if (m_destroyed.get())
{
ChannelRPC::shared_pointer nullPtr;
channelRPCRequester->channelRPCConnect(destroyedStatus, nullPtr);
channelRPCRequester->channelRPCConnect(epics::pvData::Status(epics::pvData::Status::STATUSTYPE_ERROR, "channel destroyed"), nullPtr);
return nullPtr;
}
@@ -329,30 +281,6 @@ public:
return channelRPCImpl;
}
virtual epics::pvData::Monitor::shared_pointer createMonitor(
epics::pvData::MonitorRequester::shared_pointer const & monitorRequester,
epics::pvData::PVStructure::shared_pointer const & /*pvRequest*/)
{
epics::pvData::Monitor::shared_pointer nullPtr;
monitorRequester->monitorConnect(notSupportedStatus, nullPtr, epics::pvData::Structure::shared_pointer());
return nullPtr;
}
virtual ChannelArray::shared_pointer createChannelArray(
ChannelArrayRequester::shared_pointer const & channelArrayRequester,
epics::pvData::PVStructure::shared_pointer const & /*pvRequest*/)
{
ChannelArray::shared_pointer nullPtr;
channelArrayRequester->channelArrayConnect(notSupportedStatus, nullPtr, epics::pvData::Array::const_shared_pointer());
return nullPtr;
}
virtual void printInfo()
{
printInfo(std::cout);
}
virtual void printInfo(std::ostream& out)
{
out << "RPCChannel: ";
@@ -367,21 +295,12 @@ public:
return getChannelName();
}
virtual void message(std::string const & message,MessageType messageType)
{
// just delegate
m_channelRequester->message(message, messageType);
}
virtual void destroy()
{
m_destroyed.set();
}
};
Status RPCChannel::notSupportedStatus(Status::STATUSTYPE_ERROR, "only channelRPC requests are supported by this channel");
Status RPCChannel::destroyedStatus(Status::STATUSTYPE_ERROR, "channel destroyed");
Channel::shared_pointer createRPCChannel(ChannelProvider::shared_pointer const & provider,
std::string const & channelName,
ChannelRequester::shared_pointer const & channelRequester,