diff --git a/src/remoteClient/clientContextImpl.cpp b/src/remoteClient/clientContextImpl.cpp index a3c965e..80b2b08 100644 --- a/src/remoteClient/clientContextImpl.cpp +++ b/src/remoteClient/clientContextImpl.cpp @@ -2874,23 +2874,23 @@ public: AbstractClientResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer); transport->ensureData(5); + int32 ioid = payloadBuffer->getInt(); + MessageType type = (MessageType)payloadBuffer->getByte(); - // TODO optimize - ResponseRequest::shared_pointer rr = _context.lock()->getResponseRequest(payloadBuffer->getInt()); - if (rr.get()) + string message = SerializeHelper::deserializeString(payloadBuffer, transport.get()); + + bool shown = false; + ResponseRequest::shared_pointer rr = _context.lock()->getResponseRequest(ioid); + if (rr) { - DataResponse::shared_pointer nrr = dynamic_pointer_cast(rr); - if (nrr.get()) - { - Requester::shared_pointer requester = nrr->getRequester(); - if (requester.get()) { - MessageType type = (MessageType)payloadBuffer->getByte(); - string message = SerializeHelper::deserializeString(payloadBuffer, transport.get()); - requester->message(message, type); - } + Requester::shared_pointer requester = rr->getRequester(); + if (requester) { + requester->message(message, type); + shown = true; } } - + if(!shown) + std::cerr<<"Orphaned server message "<startMessage((int8)18, sizeof(int32)/sizeof(int8) + 1); + control->startMessage((int8)CMD_MESSAGE, sizeof(int32)/sizeof(int8) + 1); buffer->putInt(_ioid); buffer->putByte((int8)_messageType); epics::pvData::SerializeHelper::serializeString(_message, buffer, control); diff --git a/src/server/responseHandlers.cpp b/src/server/responseHandlers.cpp index 8c30a33..4a53222 100644 --- a/src/server/responseHandlers.cpp +++ b/src/server/responseHandlers.cpp @@ -129,6 +129,7 @@ ServerResponseHandler::ServerResponseHandler(ServerContextImpl::shared_pointer c m_handlerTable[CMD_GET_FIELD].reset(new ServerGetFieldHandler(context)); /* 17 - get field response */ m_handlerTable[CMD_MESSAGE] = badResponse; /* 18 - message to Requester */ m_handlerTable[CMD_MULTIPLE_DATA] = badResponse; /* 19 - grouped monitors */ + m_handlerTable[CMD_RPC].reset(new ServerRPCHandler(context)); /* 20 - RPC response */ m_handlerTable[CMD_CANCEL_REQUEST].reset(new ServerCancelRequestHandler(context)); /* 21 - cancel request */ } diff --git a/src/utils/requester.cpp b/src/utils/requester.cpp index 6927e68..bd2920f 100644 --- a/src/utils/requester.cpp +++ b/src/utils/requester.cpp @@ -35,7 +35,7 @@ string getMessageTypeName(MessageType messageType) void Requester::message(std::string const & message,MessageType messageType) { - std::cerr << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")\n"; + std::cerr << "[" << getRequesterName() << "] " << getMessageTypeName(messageType) << " : " << message << "\n"; } }}