minor client message handling

avoid unnecessary dynamic_cast
This commit is contained in:
Michael Davidsaver
2017-09-06 13:40:02 -05:00
parent 8a24f9cd9c
commit 5137b90f56
4 changed files with 16 additions and 15 deletions

View File

@@ -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<DataResponse>(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 "<<type<<" : "<<message<<"\n";
}
};

View File

@@ -94,7 +94,7 @@ BaseChannelRequesterMessageTransportSender::BaseChannelRequesterMessageTransport
void BaseChannelRequesterMessageTransportSender::send(ByteBuffer* buffer, TransportSendControl* control)
{
control->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);

View File

@@ -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 */
}

View File

@@ -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";
}
}}