本文整理汇总了C++中ConnectionReader::readEnvelope方法的典型用法代码示例。如果您正苦于以下问题:C++ ConnectionReader::readEnvelope方法的具体用法?C++ ConnectionReader::readEnvelope怎么用?C++ ConnectionReader::readEnvelope使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ConnectionReader
的用法示例。
在下文中一共展示了ConnectionReader::readEnvelope方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: read
bool PortReaderBufferBase::read(ConnectionReader& connection)
{
if (connection.getReference()!=nullptr) {
//printf("REF %ld %d\n", (long int)connection.getReference(),
// connection.isValid());
return acceptObjectBase(connection.getReference(), nullptr);
}
if (mPriv->replier != nullptr) {
if (connection.getWriter()) {
return mPriv->replier->read(connection);
}
}
PortReaderPacket *reader = nullptr;
while (reader==nullptr) {
mPriv->stateSema.wait();
reader = mPriv->get();
if (reader && reader->getReader() == nullptr) {
PortReader *next = create();
yAssert(next != nullptr);
reader->setReader(next);
}
mPriv->stateSema.post();
if (reader==nullptr) {
mPriv->consumeSema.wait();
}
}
bool ok = false;
if (connection.isValid()) {
yAssert(reader->getReader()!=nullptr);
ok = reader->getReader()->read(connection);
reader->setEnvelope(connection.readEnvelope());
} else {
// this is a disconnection
// don't talk to this port ever again
mPriv->port = nullptr;
}
if (ok) {
mPriv->stateSema.wait();
bool pruned = false;
if (mPriv->ct>0 && mPriv->prune) {
PortReaderPacket *readerPacket =
mPriv->dropContent();
pruned = (readerPacket!=nullptr);
}
//mPriv->configure(reader, false, true);
mPriv->pool.addActivePacket(reader);
mPriv->ct++;
mPriv->stateSema.post();
if (!pruned) {
mPriv->contentSema.post();
}
//YARP_ERROR(Logger::get(), ">>>>>>>>>>>>>>>>> adding data");
} else {
mPriv->stateSema.wait();
mPriv->pool.addInactivePacket(reader);
mPriv->stateSema.post();
//YARP_ERROR(Logger::get(), ">>>>>>>>>>>>>>>>> skipping data");
// important to give reader a shot anyway, allowing proper closing
YARP_DEBUG(Logger::get(), "giving PortReaderBuffer chance to close");
mPriv->contentSema.post();
}
return ok;
}