print modes

This commit is contained in:
Matej Sekoranja
2012-10-02 10:54:22 +02:00
parent d789df4529
commit d721ba5765
3 changed files with 89 additions and 17 deletions
+23 -4
View File
@@ -155,26 +155,39 @@ void ServerSearchHandler::handleResponse(osiSockAddr* responseFrom,
AbstractServerResponseHandler::handleResponse(responseFrom,
transport, version, command, payloadSize, payloadBuffer);
LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] Search request received.");
transport->ensureData((sizeof(int32)+sizeof(int16))/sizeof(int8)+1);
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] pos %d", payloadBuffer->getPosition());
const int32 searchSequenceId = payloadBuffer->getInt();
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] pos %d", payloadBuffer->getPosition());
const int8 qosCode = payloadBuffer->getByte();
const int32 count = payloadBuffer->getShort() & 0xFFFF;
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] pos %d", payloadBuffer->getPosition());
const int32 count = payloadBuffer->getShort();
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] pos %d", payloadBuffer->getPosition());
const bool responseRequired = (QOS_REPLY_REQUIRED & qosCode) != 0;
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] Search request received: ID %d count %d.", searchSequenceId, count);
for (int32 i = 0; i < count; i++)
{
transport->ensureData(sizeof(int32)/sizeof(int8));
const int32 cid = payloadBuffer->getInt();
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] pos %d", payloadBuffer->getPosition());
const String name = SerializeHelper::deserializeString(payloadBuffer, transport.get());
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] pos %d", payloadBuffer->getPosition());
// no name check here...
//LOG(logLevelInfo,"[ServerSearchHandler::handleResponse] Search request received for CID %d name '%s'.", cid, name.c_str());
// TODO object pool!!!
int providerCount = _providers.size();
ServerChannelFindRequesterImpl* pr = new ServerChannelFindRequesterImpl(_context, providerCount);
pr->set(name, searchSequenceId, cid, responseFrom, responseRequired);
ChannelFindRequester::shared_pointer spr(pr);
for (int i = 0; i < providerCount; i++)
for (int i = 0; i < providerCount; i++)
_providers[i]->channelFind(name, spr);
}
}
@@ -237,6 +250,8 @@ void ServerChannelFindRequesterImpl::channelFindResult(const Status& status, Cha
ServerSearchHandler::s_channelNameToProvider[_name] = channelFind->getChannelProvider();
}
LOG(logLevelInfo,"[ServerChannelFindRequesterImpl::channelFindResult] Channel '%s' was found.", _name.c_str());
_wasFound = wasFound;
TransportSender::shared_pointer thisSender = shared_from_this();
_context->getBroadcastTransport()->enqueueSendRequest(thisSender);
@@ -255,6 +270,10 @@ void ServerChannelFindRequesterImpl::unlock()
void ServerChannelFindRequesterImpl::send(ByteBuffer* buffer, TransportSendControl* control)
{
char ipAddrStr[48];
ipAddrToDottedIP(&_sendTo->ia, ipAddrStr, sizeof(ipAddrStr));
LOG(logLevelInfo,"[ServerChannelFindRequesterImpl::send] Sending search response back for %s to %s.", _name.c_str(), ipAddrStr);
int32 count = 1;
control->startMessage((int8)4, (sizeof(int32)+sizeof(int8)+128+2*sizeof(int16)+count*sizeof(int32))/sizeof(int8));
@@ -1342,7 +1361,7 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
{
Monitor::shared_pointer monitor = _channelMonitor;
MonitorElement::shared_pointer element = monitor->poll();
if (element != NULL)
if (element.get())
{
control->startMessage((int8)CMD_MONITOR, sizeof(int32)/sizeof(int8) + 1);
buffer->putInt(_ioid);
@@ -1350,7 +1369,7 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl*
// changedBitSet and data, if not notify only (i.e. queueSize == -1)
BitSet::shared_pointer changedBitSet = element->changedBitSet;
if (changedBitSet != NULL)
if (changedBitSet.get())
{
changedBitSet->serialize(buffer, control);
element->pvStructurePtr->serialize(buffer, control, changedBitSet.get());
+47 -12
View File
@@ -90,7 +90,7 @@ void convertStructure(StringBuilder buffer,PVStructure *data,int notFirst)
}
}
void convertArray(StringBuilder buffer,PVScalarArray * pv,int notFirst)
void convertArray(StringBuilder buffer,PVScalarArray * pv,int /*notFirst*/)
{
// array stringification
std::stringstream sstream;
@@ -391,7 +391,9 @@ void toNTString(std::ostream& o, PVFieldPtr const & pv)
double timeOut = DEFAULT_TIMEOUT;
string request(DEFAULT_REQUEST);
bool terseMode = false;
enum PrintMode { ValueOnlyMode, StructureMode, TerseMode };
PrintMode mode = ValueOnlyMode;
void usage (void)
@@ -483,8 +485,6 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
std::cerr << "[" << m_channelName << "] channel get: " << status.toString() << std::endl;
}
String str;
// access smart pointers
{
Lock lock(m_pointerMutex);
@@ -492,17 +492,51 @@ class ChannelGetRequesterImpl : public ChannelGetRequester
// needed since we access the data
ScopedLock dataLock(m_channelGet);
if (terseMode)
if (mode == ValueOnlyMode)
{
PVFieldPtr pvField = m_pvStructure->getSubField("value");
if (pvField.get())
{
PVScalarArrayPtr pvScalarArray = std::tr1::dynamic_pointer_cast<PVScalarArray>(pvField);
if (pvScalarArray.get())
{
size_t len = pvScalarArray->getLength();
for (size_t i = 0; i < len; i++)
{
(pvScalarArray.get())->dumpValue(std::cout, i) << std::endl;
}
}
else
{
std::cout << *(pvField.get()) << std::endl;
}
}
else
{
// do a structure mode, as fallback
std::cerr << "no 'value' field" << std::endl;
String str;
m_pvStructure->toString(&str);
std::cout << str << std::endl;
}
}
else if (mode == TerseMode)
{
String str;
convertToString(&str, m_pvStructure.get(), 0);
else
std::cout << str << std::endl;
}
else //if (mode == StructureMode)
{
String str;
m_pvStructure->toString(&str);
std::cout << str << std::endl;
}
}
// this is OK since calle holds also owns it
m_channelGet.reset();
}
std::cout << str << std::endl;
m_event.signal();
}
@@ -659,7 +693,7 @@ public:
}
}
virtual void channelStateChange(Channel::shared_pointer const & channel, Channel::ConnectionState connectionState)
virtual void channelStateChange(Channel::shared_pointer const & /*channel*/, Channel::ConnectionState connectionState)
{
if (connectionState == Channel::CONNECTED)
{
@@ -723,10 +757,11 @@ int main (int argc, char *argv[])
timeOut = DEFAULT_TIMEOUT;
}
break;
case 'r': /* Set timeout value */
case 'r': /* Set pvRequest value */
request = optarg;
mode = StructureMode;
break;
case 'p': /* Servie parameters */
case 'p': /* Service parameters */
{
string param = optarg;
size_t eqPos = param.find('=');
@@ -748,7 +783,7 @@ int main (int argc, char *argv[])
serviceRequest = true;
break;
case 't': /* Terse mode */
terseMode = true;
mode = TerseMode;
break;
case 'd': /* Debug log level */
debug = true;
+19 -1
View File
@@ -771,6 +771,24 @@ class MockChannel : public Channel {
{
pvField->setCapacity(specCount);
pvField->setLength(specCount);
double v = 0;
int ix = 0;
const int COUNT = 1024;
int n = 0;
while (n < specCount)
{
double array[COUNT];
int i = 0;
for (; i < COUNT && n < specCount; i++)
{
array[i] = v; v+=1; n++;
}
pvField->put(ix, i, array, 0);
ix += i;
}
}
else
{
@@ -797,7 +815,7 @@ class MockChannel : public Channel {
pvField->toString(&str);
printf("%s\n", str.c_str());
printf("=============------------------------------------!!!\n");
*/
*/
}
else if (m_name.find("image") == 0)
{