Status changes

This commit is contained in:
Matej Sekoranja
2011-02-17 01:22:08 +01:00
parent b795ac0f5d
commit f7742d3eb0
12 changed files with 209 additions and 243 deletions

View File

@@ -85,25 +85,25 @@ namespace epics { namespace pvAccess {
* @param channelArray The channelArray interface or null if the request failed.
* @param pvArray The PVArray that holds the data.
*/
virtual void channelArrayConnect(epics::pvData::Status *status,ChannelArray *channelArray,epics::pvData::PVArray *pvArray) = 0;
virtual void channelArrayConnect(const epics::pvData::Status &status,ChannelArray *channelArray,epics::pvData::PVArray *pvArray) = 0;
/**
* The request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void putArrayDone(epics::pvData::Status *status) = 0;
virtual void putArrayDone(const epics::pvData::Status &status) = 0;
/**
* The request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void getArrayDone(epics::pvData::Status *status) = 0;
virtual void getArrayDone(const epics::pvData::Status &status) = 0;
/**
* The request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void setLengthDone(epics::pvData::Status *status) = 0;
virtual void setLengthDone(const epics::pvData::Status &status) = 0;
};
@@ -127,7 +127,7 @@ namespace epics { namespace pvAccess {
/**
* @param status Completion status.
*/
virtual void channelFindResult(epics::pvData::Status *status,ChannelFind *channelFind,bool wasFound) = 0;
virtual void channelFindResult(const epics::pvData::Status &status,ChannelFind *channelFind,bool wasFound) = 0;
};
@@ -164,14 +164,14 @@ namespace epics { namespace pvAccess {
* @param pvStructure The PVStructure that holds the data.
* @param bitSet The bitSet for that shows what data has changed.
*/
virtual void channelGetConnect(epics::pvData::Status *status,ChannelGet *channelGet,
virtual void channelGetConnect(const epics::pvData::Status &status,ChannelGet *channelGet,
epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet) = 0;
/**
* The request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void getDone(epics::pvData::Status *status) = 0;
virtual void getDone(const epics::pvData::Status &status) = 0;
};
@@ -207,13 +207,13 @@ namespace epics { namespace pvAccess {
* @param channelProcess The channelProcess interface or null if the client could not become
* the record processor.
*/
virtual void channelProcessConnect(epics::pvData::Status *status,ChannelProcess *channelProcess) = 0;
virtual void channelProcessConnect(const epics::pvData::Status &status,ChannelProcess *channelProcess) = 0;
/**
* The process request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void processDone(epics::pvData::Status *status) = 0;
virtual void processDone(const epics::pvData::Status &status) = 0;
};
@@ -255,20 +255,20 @@ namespace epics { namespace pvAccess {
* @param pvStructure The PVStructure that holds the data.
* @param bitSet The bitSet for that shows what data has changed.
*/
virtual void channelPutConnect(epics::pvData::Status *status,ChannelPut *channelPut,
virtual void channelPutConnect(const epics::pvData::Status &status,ChannelPut *channelPut,
epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet) = 0;
/**
* The request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void putDone(epics::pvData::Status *status) = 0;
virtual void putDone(const epics::pvData::Status &status) = 0;
/**
* The get request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void getDone(epics::pvData::Status *status) = 0;
virtual void getDone(const epics::pvData::Status &status) = 0;
};
@@ -317,25 +317,25 @@ namespace epics { namespace pvAccess {
* @param pvPutStructure The PVStructure that holds the putData.
* @param pvGetStructure The PVStructure that holds the getData.
*/
virtual void channelPutGetConnect(epics::pvData::Status *status,ChannelPutGet *channelPutGet,
virtual void channelPutGetConnect(const epics::pvData::Status &status,ChannelPutGet *channelPutGet,
epics::pvData::PVStructure *pvPutStructure,epics::pvData::PVStructure *pvGetStructure) = 0;
/**
* The putGet request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void putGetDone(epics::pvData::Status *status) = 0;
virtual void putGetDone(const epics::pvData::Status &status) = 0;
/**
* The getPut request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void getPutDone(epics::pvData::Status *status) = 0;
virtual void getPutDone(const epics::pvData::Status &status) = 0;
/**
* The getGet request is done. This is always called with no locks held.
* @param status Completion status.
*/
virtual void getGetDone(epics::pvData::Status *status) = 0;
virtual void getGetDone(const epics::pvData::Status &status) = 0;
};
@@ -371,7 +371,7 @@ namespace epics { namespace pvAccess {
* @param pvArgument The argument structure for an RPC request.
* @param bitSet The bitSet for argument changes.
*/
virtual void channelRPCConnect(epics::pvData::Status *status,ChannelRPC *channelRPC,
virtual void channelRPCConnect(const epics::pvData::Status &status,ChannelRPC *channelRPC,
epics::pvData::PVStructure *pvArgument,epics::pvData::BitSet *bitSet) = 0;
/**
@@ -379,7 +379,7 @@ namespace epics { namespace pvAccess {
* @param status Completion status.
* @param pvResponse The response data for the RPC request.
*/
virtual void requestDone(epics::pvData::Status *status,epics::pvData::PVStructure *pvResponse) = 0;
virtual void requestDone(const epics::pvData::Status &status,epics::pvData::PVStructure *pvResponse) = 0;
};
@@ -396,7 +396,7 @@ namespace epics { namespace pvAccess {
* @param status Completion status.
* @param field The Structure for the request.
*/
virtual void getDone(epics::pvData::Status *status,epics::pvData::FieldConstPtr field) = 0;
virtual void getDone(const epics::pvData::Status &status,epics::pvData::FieldConstPtr field) = 0;
};
@@ -588,7 +588,7 @@ namespace epics { namespace pvAccess {
* @param status Completion status.
* @param channel The channel.
*/
virtual void channelCreated(epics::pvData::Status* status, Channel *channel) = 0;
virtual void channelCreated(const epics::pvData::Status &status, Channel *channel) = 0;
/**
* A channel connection state change has occurred.

View File

@@ -537,7 +537,7 @@ namespace epics {
* Report status to clients (e.g. disconnected).
* @param status to report.
*/
virtual void reportStatus(epics::pvData::Status* status) = 0;
virtual void reportStatus(const epics::pvData::Status& status) = 0;
/**
* Get request requester.

View File

@@ -33,8 +33,8 @@ using namespace epics::pvData;
namespace epics {
namespace pvAccess {
Status* ChannelImpl::channelDestroyed = getStatusCreate()->createStatus(STATUSTYPE_WARNING, "channel destroyed");
Status* ChannelImpl::channelDisconnected = getStatusCreate()->createStatus(STATUSTYPE_WARNING, "channel disconnected");
Status ChannelImpl::channelDestroyed = Status(Status::STATUSTYPE_WARNING, "channel destroyed");
Status ChannelImpl::channelDisconnected = Status(Status::STATUSTYPE_WARNING, "channel disconnected");
// TODO consider std::unordered_map
@@ -86,23 +86,23 @@ namespace epics {
int m_refCount;
Status m_status;
virtual ~BaseRequestImpl() {};
public:
static StatusCreate* statusCreate;
static PVDataCreate* pvDataCreate;
static Status* okStatus;
static Status* destroyedStatus;
static Status* channelNotConnected;
static Status* otherRequestPendingStatus;
static Status* pvRequestNull;
static Status destroyedStatus;
static Status channelNotConnected;
static Status otherRequestPendingStatus;
static Status pvRequestNull;
BaseRequestImpl(ChannelImpl* channel, Requester* requester) :
m_channel(channel), m_context(channel->getContext()),
m_requester(requester), m_destroyed(false), m_remotelyDestroy(false),
m_pendingRequest(NULL_REQUEST), m_refCount(1)
m_pendingRequest(NULL_REQUEST), m_refCount(1), m_status()
{
// register response request
m_ioid = m_context->registerResponseRequest(this);
@@ -138,20 +138,20 @@ namespace epics {
return m_ioid;
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) = 0;
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) = 0;
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) = 0;
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) = 0;
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) = 0;
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) = 0;
virtual void response(Transport* transport, int8 version, ByteBuffer* payloadBuffer) {
transport->ensureData(1);
int8 qos = payloadBuffer->getByte();
Status* status = statusCreate->deserializeStatus(payloadBuffer, transport);
transport->getIntrospectionRegistry()->deserializeStatus(m_status, payloadBuffer, transport);
try
{
if (qos & QOS_INIT)
{
if (status->isSuccess())
if (m_status.isSuccess())
{
// once created set destroy flag
m_mutex.lock();
@@ -159,7 +159,7 @@ namespace epics {
m_mutex.unlock();
}
initResponse(transport, version, payloadBuffer, qos, status);
initResponse(transport, version, payloadBuffer, qos, m_status);
}
else if (qos & QOS_DESTROY)
{
@@ -167,24 +167,18 @@ namespace epics {
m_remotelyDestroy = false;
m_mutex.unlock();
if (!destroyResponse(transport, version, payloadBuffer, qos, status))
if (!destroyResponse(transport, version, payloadBuffer, qos, m_status))
cancel();
}
else
{
normalResponse(transport, version, payloadBuffer, qos, status);
normalResponse(transport, version, payloadBuffer, qos, m_status);
}
}
catch (std::exception &e) {
errlogSevPrintf(errlogMajor, "Unhandled exception caught from client code at %s:%d: %s", __FILE__, __LINE__, e.what());
// TODO
if (status != okStatus)
delete status;
}
catch (...) { errlogSevPrintf(errlogMajor, "Unhandled exception caught from client code at %s:%d.", __FILE__, __LINE__);
// TODO
if (status != okStatus)
delete status;
}
}
@@ -226,11 +220,11 @@ namespace epics {
// TODO notify?
}
void reportStatus(Status* status) {
void reportStatus(const Status& status) {
// destroy, since channel (parent) was destroyed
if (status == ChannelImpl::channelDestroyed)
if (&status == &ChannelImpl::channelDestroyed)
destroy();
else if (status == ChannelImpl::channelDisconnected)
else if (&status == &ChannelImpl::channelDisconnected)
stopRequest();
// TODO notify?
}
@@ -280,14 +274,12 @@ namespace epics {
StatusCreate* BaseRequestImpl::statusCreate = getStatusCreate();
PVDataCreate* BaseRequestImpl::pvDataCreate = getPVDataCreate();
Status* BaseRequestImpl::okStatus = getStatusCreate()->getStatusOK();;
Status* BaseRequestImpl::destroyedStatus = getStatusCreate()->createStatus(STATUSTYPE_ERROR, "request destroyed");
Status* BaseRequestImpl::channelNotConnected = getStatusCreate()->createStatus(STATUSTYPE_ERROR, "channel not connected");
Status* BaseRequestImpl::otherRequestPendingStatus = getStatusCreate()->createStatus(STATUSTYPE_ERROR, "other request pending");
Status* BaseRequestImpl::pvRequestNull = getStatusCreate()->createStatus(STATUSTYPE_ERROR, "pvRequest == 0");
Status BaseRequestImpl::destroyedStatus = Status(Status::STATUSTYPE_ERROR, "request destroyed");
Status BaseRequestImpl::channelNotConnected = Status(Status::STATUSTYPE_ERROR, "channel not connected");
Status BaseRequestImpl::otherRequestPendingStatus = Status(Status::STATUSTYPE_ERROR, "other request pending");
Status BaseRequestImpl::pvRequestNull = Status(Status::STATUSTYPE_ERROR, "pvRequest == 0");
@@ -352,17 +344,17 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
EXCEPTION_GUARD(m_callback->processDone(status));
return true;
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
EXCEPTION_GUARD(m_callback->channelProcessConnect(status, this));
return true;
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
EXCEPTION_GUARD(m_callback->processDone(status));
return true;
}
@@ -386,6 +378,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_callback->processDone(channelNotConnected));
}
}
@@ -477,15 +470,15 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
// data available
if (qos & QOS_GET)
return normalResponse(transport, version, payloadBuffer, qos, status);
return true;
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelGetRequester->channelGetConnect(status, this, 0, 0));
return true;
@@ -500,8 +493,8 @@ namespace epics {
return true;
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelGetRequester->getDone(status));
return true;
@@ -533,6 +526,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelGetRequester->getDone(channelNotConnected));
}
}
@@ -635,13 +629,13 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
EXCEPTION_GUARD(m_channelPutRequester->putDone(status));
return true;
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelPutRequester->channelPutConnect(status, this, 0, 0));
return true;
@@ -656,10 +650,10 @@ namespace epics {
return true;
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (qos & QOS_GET)
{
if (!status->isSuccess())
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelPutRequester->getDone(status));
return true;
@@ -694,6 +688,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelPutRequester->getDone(channelNotConnected));
}
}
@@ -714,6 +709,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelPutRequester->putDone(channelNotConnected));
}
}
@@ -814,14 +810,14 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
// data available
// TODO we need a flag here...
return normalResponse(transport, version, payloadBuffer, qos, status);
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelPutGetRequester->channelPutGetConnect(status, this, 0, 0));
return true;
@@ -837,10 +833,10 @@ namespace epics {
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (qos & QOS_GET)
{
if (!status->isSuccess())
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelPutGetRequester->getGetDone(status));
return true;
@@ -854,7 +850,7 @@ namespace epics {
}
else if (qos & QOS_GET_PUT)
{
if (!status->isSuccess())
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelPutGetRequester->getPutDone(status));
return true;
@@ -868,7 +864,7 @@ namespace epics {
}
else
{
if (!status->isSuccess())
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelPutGetRequester->putGetDone(status));
return true;
@@ -897,6 +893,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelPutGetRequester->putGetDone(channelNotConnected));
}
}
@@ -915,6 +912,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelPutGetRequester->getGetDone(channelNotConnected));
}
}
@@ -933,6 +931,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelPutGetRequester->getPutDone(channelNotConnected));
}
}
@@ -1032,14 +1031,14 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
// data available
// TODO we need a flag here...
return normalResponse(transport, version, payloadBuffer, qos, status);
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelRPCRequester->channelRPCConnect(status, this, 0, 0));
return true;
@@ -1054,8 +1053,8 @@ namespace epics {
return true;
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelRPCRequester->requestDone(status, 0));
return true;
@@ -1084,6 +1083,7 @@ namespace epics {
try {
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelRPCRequester->requestDone(channelNotConnected, 0));
}
}
@@ -1194,15 +1194,15 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
// data available (get with destroy)
if (qos & QOS_GET)
return normalResponse(transport, version, payloadBuffer, qos, status);
return true;
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_channelArrayRequester->channelArrayConnect(status, this, 0));
return true;
@@ -1217,10 +1217,10 @@ namespace epics {
return true;
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (qos & QOS_GET)
{
if (!status->isSuccess())
if (!status.isSuccess())
{
m_channelArrayRequester->getArrayDone(status);
return true;
@@ -1262,6 +1262,7 @@ namespace epics {
m_count = count;
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelArrayRequester->getArrayDone(channelNotConnected));
}
}
@@ -1284,6 +1285,7 @@ namespace epics {
m_count = count;
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelArrayRequester->putArrayDone(channelNotConnected));
}
}
@@ -1306,6 +1308,7 @@ namespace epics {
m_capacity = capacity;
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
} catch (std::runtime_error &rte) {
stopRequest();
EXCEPTION_GUARD(m_channelArrayRequester->setLengthDone(channelNotConnected));
}
}
@@ -1401,9 +1404,9 @@ namespace epics {
cancel();
}
void reportStatus(Status* status) {
void reportStatus(const Status& status) {
// destroy, since channel (parent) was destroyed
if (status == ChannelImpl::channelDestroyed)
if (&status == &ChannelImpl::channelDestroyed)
destroy();
// TODO notify?
}
@@ -1442,11 +1445,10 @@ namespace epics {
}
virtual void response(Transport* transport, int8 version, ByteBuffer* payloadBuffer) {
// TODO?
// try
// {
Status* status = BaseRequestImpl::statusCreate->deserializeStatus(payloadBuffer, transport);
if (status->isSuccess())
Status status;
transport->getIntrospectionRegistry()->deserializeStatus(status, payloadBuffer, transport);
if (status.isSuccess())
{
// deserialize Field...
const Field* field = transport->getIntrospectionRegistry()->deserialize(payloadBuffer, transport);
@@ -1458,16 +1460,6 @@ namespace epics {
EXCEPTION_GUARD(m_callback->getDone(status, 0));
}
// TODO
if (status != BaseRequestImpl::okStatus)
delete status;
// } // TODO guard callback
// finally
// {
// always cancel request
// cancel();
// }
cancel();
}
@@ -1531,12 +1523,12 @@ namespace epics {
m_gotMonitor = false;
}
Status* start() {
return 0;
Status start() {
return Status::OK;
}
Status* stop() {
return 0;
Status stop() {
return Status::OK;
}
void destroy() {
@@ -1620,14 +1612,14 @@ namespace epics {
m_gotMonitor = false;
}
Status* start() {
Status start() {
Lock guard(&m_mutex);
m_gotMonitor = false;
return 0;
return Status::OK;
}
Status* stop() {
return 0;
Status stop() {
return Status::OK;
}
void destroy() {
@@ -1757,16 +1749,18 @@ namespace epics {
m_gotMonitor = false;
}
Status* start() {
Status start() {
Lock guard(&m_mutex);
if (!m_monitorElementChangeBitSet)
return Status(Status::STATUSTYPE_ERROR, "Monitor not connected.");
m_gotMonitor = false;
m_monitorElementChangeBitSet->clear();
m_monitorElementOverrunBitSet->clear();
return 0;
return Status::OK;
}
Status* stop() {
return 0;
Status stop() {
return Status::OK;
}
void destroy() {
@@ -1847,9 +1841,8 @@ namespace epics {
if ((buffer >> queueSize).fail())
{
Status* failedToConvert = getStatusCreate()->createStatus(STATUSTYPE_ERROR, "queueSize type is not a valid integer");
Status failedToConvert(Status::STATUSTYPE_ERROR, "queueSize type is not a valid integer");
EXCEPTION_GUARD(m_monitorRequester->monitorConnect(failedToConvert, 0, 0));
delete failedToConvert;
return;
}
}
@@ -1896,14 +1889,14 @@ namespace epics {
stopRequest();
}
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool destroyResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
// data available
// TODO if (qos & QOS_GET)
return normalResponse(transport, version, payloadBuffer, qos, status);
}
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
if (!status->isSuccess())
virtual bool initResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (!status.isSuccess())
{
EXCEPTION_GUARD(m_monitorRequester->monitorConnect(status, this, 0));
return true;
@@ -1917,12 +1910,12 @@ namespace epics {
structure->decReferenceCount();
if (m_started)
delete start();
start();
return true;
}
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, Status* status) {
virtual bool normalResponse(Transport* transport, int8 version, ByteBuffer* payloadBuffer, int8 qos, const Status& status) {
if (qos & QOS_GET)
{
// TODO not supported by IF yet...
@@ -1941,86 +1934,76 @@ namespace epics {
// override, since we optimize status
virtual void response(Transport* transport, int8 version, ByteBuffer* payloadBuffer) {
// TODO?
// try
// {
transport->ensureData(1);
int8 qos = payloadBuffer->getByte();
if (qos & QOS_INIT)
{
Status* status = statusCreate->deserializeStatus(payloadBuffer, transport);
Status status;
transport->getIntrospectionRegistry()->deserializeStatus(status, payloadBuffer, transport);
initResponse(transport, version, payloadBuffer, qos, status);
// TODO
if (status != okStatus)
delete status;
}
else if (qos & QOS_DESTROY)
{
Status* status = statusCreate->deserializeStatus(payloadBuffer, transport);
Status status;
transport->getIntrospectionRegistry()->deserializeStatus(status, payloadBuffer, transport);
m_remotelyDestroy = true;
if (!destroyResponse(transport, version, payloadBuffer, qos, status))
cancel();
// TODO
if (status != okStatus)
delete status;
}
else
{
normalResponse(transport, version, payloadBuffer, qos, okStatus);
normalResponse(transport, version, payloadBuffer, qos, Status::OK);
}
}
virtual Status* start()
virtual Status start()
{
Lock guard(&m_mutex);
if (m_destroyed)
return getStatusCreate()->createStatus(STATUSTYPE_ERROR, "Monitor destroyed.");;
return BaseRequestImpl::destroyedStatus;
m_monitorStrategy->start();
// start == process + get
if (!startRequest(QOS_PROCESS | QOS_GET))
{
return getStatusCreate()->createStatus(STATUSTYPE_ERROR, "Other request pending.");
}
return BaseRequestImpl::otherRequestPendingStatus;
try
{
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
m_started = true;
// client needs to delete status, so passing shared OK instance is not right thing to do
return getStatusCreate()->createStatus(STATUSTYPE_OK, "Monitor started.");
return Status::OK;
} catch (std::runtime_error &rte) {
return getStatusCreate()->createStatus(STATUSTYPE_ERROR, "channel not connected.");
stopRequest();
return BaseRequestImpl::channelNotConnected;
}
}
virtual Status* stop()
virtual Status stop()
{
Lock guard(&m_mutex);
if (m_destroyed)
return getStatusCreate()->createStatus(STATUSTYPE_ERROR, "Monitor destroyed.");;
return BaseRequestImpl::destroyedStatus;
m_monitorStrategy->stop();
// stop == process + no get
if (!startRequest(QOS_PROCESS))
{
return getStatusCreate()->createStatus(STATUSTYPE_ERROR, "Other request pending.");
}
return BaseRequestImpl::otherRequestPendingStatus;
try
{
m_channel->checkAndGetTransport()->enqueueSendRequest(this);
m_started = false;
// client needs to delete status, so passing shared OK instance is not right thing to do
return getStatusCreate()->createStatus(STATUSTYPE_OK, "Monitor stopped.");
return Status::OK;
} catch (std::runtime_error &rte) {
return getStatusCreate()->createStatus(STATUSTYPE_ERROR, "channel not connected.");
stopRequest();
return BaseRequestImpl::channelNotConnected;
}
}
@@ -2349,14 +2332,15 @@ namespace epics {
transport->ensureData(8);
pvAccessID cid = payloadBuffer->getInt();
pvAccessID sid = payloadBuffer->getInt();
// TODO... do not destroy OK
Status* status = transport->getIntrospectionRegistry()->deserializeStatus(payloadBuffer, transport);
Status status;
transport->getIntrospectionRegistry()->deserializeStatus(status, payloadBuffer, transport);
ChannelImpl* channel = static_cast<ChannelImpl*>(_context->getChannel(cid));
if (channel)
{
// failed check
if (!status->isSuccess()) {
if (!status.isSuccess()) {
channel->createChannelFailed();
return;
}
@@ -2365,11 +2349,6 @@ namespace epics {
channel->connectionCompleted(sid);
}
// TODO not nice
if (status != BaseRequestImpl::okStatus)
delete status;
}
};
@@ -3141,8 +3120,7 @@ namespace epics {
*/
void disconnectPendingIO(bool destroy)
{
// TODO destroy????!!
Status* status = destroy ? channelDestroyed : channelDisconnected;
Status* status = destroy ? &channelDestroyed : &channelDisconnected;
Lock guard(&m_responseRequestsMutex);
@@ -3159,7 +3137,7 @@ namespace epics {
for (int i = 0; i< count; i++)
{
EXCEPTION_GUARD(rrs[i]->reportStatus(status));
EXCEPTION_GUARD(rrs[i]->reportStatus(*status));
}
}
@@ -3345,8 +3323,8 @@ namespace epics {
if (!channelFindRequester)
throw std::runtime_error("0 requester");
std::auto_ptr<Status> errorStatus(getStatusCreate()->createStatus(STATUSTYPE_ERROR, "not implemented", 0));
channelFindRequester->channelFindResult(errorStatus.get(), 0, false);
Status errorStatus(Status::STATUSTYPE_ERROR, "not implemented", 0);
channelFindRequester->channelFindResult(errorStatus, 0, false);
return 0;
}
@@ -3367,7 +3345,7 @@ namespace epics {
// TODO support addressList
Channel* channel = m_context->createChannelInternal(channelName, channelRequester, priority, 0);
if (channel)
channelRequester->channelCreated(getStatusCreate()->getStatusOK(), channel);
channelRequester->channelCreated(Status::OK, channel);
return channel;
// NOTE it's up to internal code to respond w/ error to requester and return 0 in case of errors

View File

@@ -37,8 +37,8 @@ namespace epics {
virtual Transport* checkAndGetTransport() = 0;
virtual Transport* getTransport() = 0;
static Status* channelDestroyed;
static Status* channelDisconnected;
static Status channelDestroyed;
static Status channelDisconnected;
};

View File

@@ -234,7 +234,7 @@ namespace epics {
return this;
}
void ChannelFindRequesterImpl::channelFindResult(epics::pvData::Status* status, ChannelFind* channelFind, boolean wasFound)
void ChannelFindRequesterImpl::channelFindResult(const epics::pvData::Status& status, ChannelFind* channelFind, boolean wasFound)
{
// TODO status
Lock guard(_mutex);
@@ -318,13 +318,13 @@ namespace epics {
_transport(transport),
_channelName(channelName),
_cid(cid),
_status(NULL),
_status(),
_channel(NULL)
{
}
void ChannelRequesterImpl::channelCreated(Status* const status, Channel* const channel)
void ChannelRequesterImpl::channelCreated(const Status& status, Channel* const channel)
{
Lock guard(_mutex);
_status = status;

View File

@@ -181,7 +181,7 @@ namespace epics {
ChannelFindRequesterImpl(ServerContextImpl* context, ChannelFindRequesterImplObjectPool* objectPool);
void clear();
ChannelFindRequesterImpl* set(int32 searchSequenceId, int32 cid, osiSockAddr* sendTo, boolean responseRequired);
void channelFindResult(epics::pvData::Status* status, ChannelFind* channelFind, boolean wasFound);
void channelFindResult(const epics::pvData::Status& status, ChannelFind* channelFind, boolean wasFound);
void lock();
void unlock();
void acquire();
@@ -237,7 +237,7 @@ namespace epics {
{
public:
ChannelRequesterImpl(Transport* transport, const String channelName, const int32 cid);
void channelCreated(Status* const status, Channel* const channel);
void channelCreated(const Status& status, Channel* const channel);
void channelStateChange(Channel* const c, const Channel::ConnectionState isConnected);
String getRequesterName();
void message(const String message, const epics::pvData::MessageType messageType);
@@ -249,7 +249,7 @@ namespace epics {
Transport* _transport;
const String _channelName;
const int32 _cid;
Status* _status;
Status _status;
Channel* _channel;
epics::pvData::Mutex _mutex;
void createChannelFailedResponse(ByteBuffer* buffer, TransportSendControl* control, Status* const status);

View File

@@ -73,9 +73,7 @@ namespace epics {
v->push_back(pNewNode);
}
/* port of osiSockDiscoverBroadcastAddresses() in
* epics/base/src/libCom/osi/os/default/osdNetIntf.c
*/
// TODO use osiSockDiscoverBroadcastAddresses() from epics/base/src/libCom/osi/os/default/osdNetIntf.c
InetAddrVector* getBroadcastAddresses(SOCKET sock,
in_port_t defaultPort) {
static const unsigned nelem = 100;

View File

@@ -10,14 +10,12 @@ const int8 IntrospectionRegistry::NULL_TYPE_CODE = (int8)-1;
const int8 IntrospectionRegistry::ONLY_ID_TYPE_CODE = (int8)-2;
const int8 IntrospectionRegistry::FULL_WITH_ID_TYPE_CODE = (int8)-3;
PVDataCreate* IntrospectionRegistry::_pvDataCreate = 0;
StatusCreate* IntrospectionRegistry::_statusCreate = 0;
FieldCreate* IntrospectionRegistry::_fieldCreate = 0;
IntrospectionRegistry::IntrospectionRegistry(bool serverSide) : _mutex(Mutex())
{
// TODO not optimal
_pvDataCreate = getPVDataCreate();
_statusCreate = getStatusCreate();
_fieldCreate = getFieldCreate();
_direction = serverSide ? 1 : -1;
@@ -359,14 +357,14 @@ PVStructurePtr IntrospectionRegistry::deserializeStructureAndCreatePVStructure(B
return retVal;
}
void IntrospectionRegistry::serializeStatus(ByteBuffer* buffer, SerializableControl* control, Status* status)
void IntrospectionRegistry::serializeStatus(ByteBuffer* buffer, SerializableControl* control, const Status& status)
{
status->serialize(buffer, control);
status.serialize(buffer, control);
}
Status* IntrospectionRegistry::deserializeStatus(ByteBuffer* buffer, DeserializableControl* control)
void IntrospectionRegistry::deserializeStatus(Status &status, ByteBuffer* buffer, DeserializableControl* control)
{
return _statusCreate->deserializeStatus(buffer, control);
status.deserialize(buffer, control);
}

View File

@@ -208,7 +208,7 @@ typedef std::map<const short,const Field*> registryMap_t;
* @param control serialization control.
* @param status status to serialize.
*/
void serializeStatus(ByteBuffer* buffer, SerializableControl* control, Status* status);
void serializeStatus(ByteBuffer* buffer, SerializableControl* control, const Status &status);
/**
* Deserialize status.
@@ -216,7 +216,7 @@ typedef std::map<const short,const Field*> registryMap_t;
* @param buffer data buffer.
* @param control serialization control.
*/
Status* deserializeStatus(ByteBuffer* buffer, DeserializableControl* control);
void deserializeStatus(Status &status, ByteBuffer* buffer, DeserializableControl* control);
private:
registryMap_t _registry;
@@ -231,11 +231,6 @@ typedef std::map<const short,const Field*> registryMap_t;
*/
static PVDataCreate* _pvDataCreate;
/**
* Status factory.
*/
static StatusCreate* _statusCreate;
/**
* Field factory.
*/

View File

@@ -10,9 +10,9 @@ PROD_HOST += testCreateRequest
testCreateRequest_SRCS += testCreateRequest.cpp
testCreateRequest_LIBS += pvData pvAccess Com
PROD_HOST += testMockClient
testMockClient_SRCS = testMockClient.cpp MockClientImpl.cpp
testMockClient_LIBS = pvData pvAccess Com
#PROD_HOST += testMockClient
#testMockClient_SRCS = testMockClient.cpp MockClientImpl.cpp
#testMockClient_LIBS = pvData pvAccess Com
include $(TOP)/configure/RULES
#----------------------------------------

View File

@@ -16,10 +16,10 @@ using namespace epics::pvAccess;
class ChannelFindRequesterImpl : public ChannelFindRequester
{
virtual void channelFindResult(epics::pvData::Status *status,ChannelFind *channelFind,bool wasFound)
virtual void channelFindResult(const epics::pvData::Status& status,ChannelFind *channelFind,bool wasFound)
{
std::cout << "[ChannelFindRequesterImpl] channelFindResult("
<< status->toString() << ", ..., " << wasFound << ")" << std::endl;
<< status.toString() << ", ..., " << wasFound << ")" << std::endl;
}
};
@@ -35,9 +35,9 @@ class ChannelRequesterImpl : public ChannelRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelCreated(epics::pvData::Status* status, Channel *channel)
virtual void channelCreated(const epics::pvData::Status& status, Channel *channel)
{
std::cout << "channelCreated(" << status->toString() << ", "
std::cout << "channelCreated(" << status.toString() << ", "
<< (channel ? channel->getChannelName() : "(0)") << ")" << std::endl;
}
@@ -59,9 +59,9 @@ class GetFieldRequesterImpl : public GetFieldRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void getDone(epics::pvData::Status *status,epics::pvData::FieldConstPtr field)
virtual void getDone(const epics::pvData::Status& status,epics::pvData::FieldConstPtr field)
{
std::cout << "getDone(" << status->toString() << ", ";
std::cout << "getDone(" << status.toString() << ", ";
if (field)
{
String str;
@@ -95,10 +95,10 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelGetConnect(epics::pvData::Status *status,ChannelGet *channelGet,
virtual void channelGetConnect(const epics::pvData::Status& status,ChannelGet *channelGet,
epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet)
{
std::cout << "channelGetConnect(" << status->toString() << ")" << std::endl;
std::cout << "channelGetConnect(" << status.toString() << ")" << std::endl;
if (pvStructure)
{
String st;
@@ -113,9 +113,9 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
m_mutex.unlock();
}
virtual void getDone(epics::pvData::Status *status)
virtual void getDone(const epics::pvData::Status& status)
{
std::cout << "getDone(" << status->toString() << ")" << std::endl;
std::cout << "getDone(" << status.toString() << ")" << std::endl;
Lock guard(&m_mutex);
if (m_pvStructure)
{
@@ -143,10 +143,10 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelPutConnect(epics::pvData::Status *status,ChannelPut *channelPut,
virtual void channelPutConnect(const epics::pvData::Status& status,ChannelPut *channelPut,
epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet)
{
std::cout << "channelPutConnect(" << status->toString() << ")" << std::endl;
std::cout << "channelPutConnect(" << status.toString() << ")" << std::endl;
// TODO sync
m_channelPut = channelPut;
@@ -154,9 +154,9 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
m_bitSet = bitSet;
}
virtual void getDone(epics::pvData::Status *status)
virtual void getDone(const epics::pvData::Status& status)
{
std::cout << "getDone(" << status->toString() << ")" << std::endl;
std::cout << "getDone(" << status.toString() << ")" << std::endl;
if (m_pvStructure)
{
String str;
@@ -166,9 +166,9 @@ class ChannelPutRequesterImpl : public ChannelPutRequester
}
}
virtual void putDone(epics::pvData::Status *status)
virtual void putDone(const epics::pvData::Status& status)
{
std::cout << "putDone(" << status->toString() << ")" << std::endl;
std::cout << "putDone(" << status.toString() << ")" << std::endl;
if (m_pvStructure)
{
String str;
@@ -196,10 +196,10 @@ class ChannelPutGetRequesterImpl : public ChannelPutGetRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelPutGetConnect(epics::pvData::Status *status,ChannelPutGet *channelPutGet,
virtual void channelPutGetConnect(const epics::pvData::Status& status,ChannelPutGet *channelPutGet,
epics::pvData::PVStructure *putData,epics::pvData::PVStructure *getData)
{
std::cout << "channelGetPutConnect(" << status->toString() << ")" << std::endl;
std::cout << "channelGetPutConnect(" << status.toString() << ")" << std::endl;
// TODO sync
m_channelPutGet = channelPutGet;
m_putData = putData;
@@ -221,9 +221,9 @@ class ChannelPutGetRequesterImpl : public ChannelPutGetRequester
}
}
virtual void getGetDone(epics::pvData::Status *status)
virtual void getGetDone(const epics::pvData::Status& status)
{
std::cout << "getGetDone(" << status->toString() << ")" << std::endl;
std::cout << "getGetDone(" << status.toString() << ")" << std::endl;
if (m_getData)
{
String str;
@@ -233,9 +233,9 @@ class ChannelPutGetRequesterImpl : public ChannelPutGetRequester
}
}
virtual void getPutDone(epics::pvData::Status *status)
virtual void getPutDone(const epics::pvData::Status& status)
{
std::cout << "getPutDone(" << status->toString() << ")" << std::endl;
std::cout << "getPutDone(" << status.toString() << ")" << std::endl;
if (m_putData)
{
String str;
@@ -245,9 +245,9 @@ class ChannelPutGetRequesterImpl : public ChannelPutGetRequester
}
}
virtual void putGetDone(epics::pvData::Status *status)
virtual void putGetDone(const epics::pvData::Status& status)
{
std::cout << "putGetDone(" << status->toString() << ")" << std::endl;
std::cout << "putGetDone(" << status.toString() << ")" << std::endl;
if (m_putData)
{
String str;
@@ -276,10 +276,10 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelRPCConnect(epics::pvData::Status *status,ChannelRPC *channelRPC,
virtual void channelRPCConnect(const epics::pvData::Status& status,ChannelRPC *channelRPC,
epics::pvData::PVStructure *pvStructure,epics::pvData::BitSet *bitSet)
{
std::cout << "channelRPCConnect(" << status->toString() << ")" << std::endl;
std::cout << "channelRPCConnect(" << status.toString() << ")" << std::endl;
if (pvStructure)
{
String st;
@@ -293,9 +293,9 @@ class ChannelRPCRequesterImpl : public ChannelRPCRequester
m_bitSet = bitSet;
}
virtual void requestDone(epics::pvData::Status *status,epics::pvData::PVStructure *pvResponse)
virtual void requestDone(const epics::pvData::Status& status,epics::pvData::PVStructure *pvResponse)
{
std::cout << "requestDone(" << status->toString() << ")" << std::endl;
std::cout << "requestDone(" << status.toString() << ")" << std::endl;
if (pvResponse)
{
String str;
@@ -321,10 +321,10 @@ class ChannelArrayRequesterImpl : public ChannelArrayRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelArrayConnect(epics::pvData::Status *status,ChannelArray *channelArray,
virtual void channelArrayConnect(const epics::pvData::Status& status,ChannelArray *channelArray,
epics::pvData::PVArray *pvArray)
{
std::cout << "channelArrayConnect(" << status->toString() << ")" << std::endl;
std::cout << "channelArrayConnect(" << status.toString() << ")" << std::endl;
if (pvArray)
{
String st;
@@ -337,9 +337,9 @@ class ChannelArrayRequesterImpl : public ChannelArrayRequester
m_pvArray = pvArray;
}
virtual void getArrayDone(epics::pvData::Status *status)
virtual void getArrayDone(const epics::pvData::Status& status)
{
std::cout << "getArrayDone(" << status->toString() << ")" << std::endl;
std::cout << "getArrayDone(" << status.toString() << ")" << std::endl;
if (m_pvArray)
{
String str;
@@ -349,14 +349,14 @@ class ChannelArrayRequesterImpl : public ChannelArrayRequester
}
}
virtual void putArrayDone(epics::pvData::Status *status)
virtual void putArrayDone(const epics::pvData::Status& status)
{
std::cout << "putArrayDone(" << status->toString() << ")" << std::endl;
std::cout << "putArrayDone(" << status.toString() << ")" << std::endl;
}
virtual void setLengthDone(epics::pvData::Status *status)
virtual void setLengthDone(const epics::pvData::Status& status)
{
std::cout << "setLengthDone(" << status->toString() << ")" << std::endl;
std::cout << "setLengthDone(" << status.toString() << ")" << std::endl;
}
};
@@ -372,9 +372,9 @@ class MonitorRequesterImpl : public MonitorRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void monitorConnect(Status* status, Monitor* monitor, Structure* structure)
virtual void monitorConnect(const epics::pvData::Status& status, Monitor* monitor, Structure* structure)
{
std::cout << "monitorConnect(" << status->toString() << ")" << std::endl;
std::cout << "monitorConnect(" << status.toString() << ")" << std::endl;
if (structure)
{
String str;
@@ -421,17 +421,17 @@ class ChannelProcessRequesterImpl : public ChannelProcessRequester
std::cout << "[" << getRequesterName() << "] message(" << message << ", " << messageTypeName[messageType] << ")" << std::endl;
}
virtual void channelProcessConnect(epics::pvData::Status *status,ChannelProcess *channelProcess)
virtual void channelProcessConnect(const epics::pvData::Status& status,ChannelProcess *channelProcess)
{
std::cout << "channelProcessConnect(" << status->toString() << ")" << std::endl;
std::cout << "channelProcessConnect(" << status.toString() << ")" << std::endl;
// TODO sync
m_channelProcess = channelProcess;
}
virtual void processDone(epics::pvData::Status *status)
virtual void processDone(const epics::pvData::Status& status)
{
std::cout << "processDone(" << status->toString() << ")" << std::endl;
std::cout << "processDone(" << status.toString() << ")" << std::endl;
}
};
@@ -549,15 +549,13 @@ int main(int argc,char *argv[])
epicsThreadSleep( 1.0 );
Status* status = monitor->start();
std::cout << "monitor->start() = " << status->toString() << std::endl;
delete status;
Status status = monitor->start();
std::cout << "monitor->start() = " << status.toString() << std::endl;
epicsThreadSleep( 3.0 );
status = monitor->stop();
std::cout << "monitor->stop() = " << status->toString() << std::endl;
delete status;
std::cout << "monitor->stop() = " << status.toString() << std::endl;
monitor->destroy();

View File

@@ -58,7 +58,6 @@ static DeserializableControl* control;
static ByteBuffer* buffer;
static PVDataCreate* pvDataCreate;
static StatusCreate* statusCreate;
static FieldCreate* fieldCreate;
static StandardField *standardField;
@@ -396,20 +395,20 @@ void testSerializeStatus()
{
buffer->clear();
registry->reset();
Status* statusIn = statusCreate->getStatusOK();
Status statusIn(Status::STATUSTYPE_WARNING, "msg", "dumpy");
registry->serializeStatus(buffer,flusher,statusIn);
buffer->flip();
Status* statusOut= registry->deserializeStatus(buffer,control);
assert(statusIn->getType() == statusOut->getType());
delete statusOut;
//TODO why are in and out on the same address?
Status statusOut;
registry->deserializeStatus(statusOut, buffer,control);
assert(statusIn.getType() == statusOut.getType());
assert(statusIn.getMessage() == statusOut.getMessage());
assert(statusIn.getStackDump() == statusOut.getStackDump());
}
int main(int argc, char *argv[])
{
pvDataCreate = getPVDataCreate();
statusCreate = getStatusCreate();
fieldCreate = getFieldCreate();
standardField = getStandardField();