bool PortCommand::write(ConnectionWriter& writer) { //ACE_DEBUG((LM_DEBUG,"PortCommand::writeBlock")); //ACE_OS::printf("Writing port command, text mode %d\n", writer.isTextMode()); if (!writer.isTextMode()) { int len = 0; if (ch=='\0') { len = (int)str.length()+1; } yAssert(header.length()==8); char *base = header.get(); Bytes b(base,4); NetType::netInt(len,b); base[4] = '~'; base[5] = ch; base[6] = 0; base[7] = 1; writer.appendBlock(header.bytes().get(),header.bytes().length()); if (ch=='\0') { writer.appendBlock(str.c_str(),str.length()+1); } } else { if (ch!='\0') { char buf[] = "X"; buf[0] = ch; writer.appendString(ConstString(buf).c_str(),'\n'); } else { writer.appendString(str.c_str(),'\n'); } } return !writer.isError(); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~ // SERIALIZATION methods //~~~~~~~~~~~~~~~~~~~~~~ bool dynContact::write(ConnectionWriter& connection) const{ // represent a dynContact as a list of 4 elements that are: // - a list of 3 int, i.e. contactId, bodyPart, linkNumber // - a list of 3 double, i.e. the CoP // - a list of 3 double, i.e. the force // - a list of 3 double, i.e. the moment connection.appendInt(BOTTLE_TAG_LIST); connection.appendInt(4); // list of 3 int, i.e. contactId, bodyPart, linkNumber connection.appendInt(BOTTLE_TAG_LIST + BOTTLE_TAG_INT); connection.appendInt(3); connection.appendInt(contactId); connection.appendInt(bodyPart); // left_arm, right_arm, ... connection.appendInt(linkNumber); // list of 3 double, i.e. the CoP connection.appendInt(BOTTLE_TAG_LIST + BOTTLE_TAG_DOUBLE); connection.appendInt(3); for(int i=0;i<3;i++) connection.appendDouble(CoP[i]); // list of 3 double, i.e. the force connection.appendInt(BOTTLE_TAG_LIST + BOTTLE_TAG_DOUBLE); connection.appendInt(3); for(int i=0;i<3;i++) connection.appendDouble(F[i]); // list of 3 double, i.e. the moment connection.appendInt(BOTTLE_TAG_LIST + BOTTLE_TAG_DOUBLE); connection.appendInt(3); for(int i=0;i<3;i++) connection.appendDouble(Mu[i]); // if someone is foolish enough to connect in text mode, // let them see something readable. connection.convertTextMode(); return !connection.isError(); }
bool BottleImpl::write(ConnectionWriter& writer) { // could simplify this if knew lengths of blocks up front if (writer.isTextMode()) { //writer.appendLine(toString()); writer.appendString(toString().c_str(),'\n'); } else { #ifdef USE_YARP1_PREFIX if (!nested) { String name = "YARP2"; writer.appendInt(name.length()+1); writer.appendString(name.c_str(),'\0'); } #endif synch(); /* if (!nested) { // No byte count any more, to facilitate nesting //YMSG(("bottle byte count %d\n",byteCount())); //writer.appendInt(byteCount()+sizeof(NetInt32)); writer.appendInt(StoreList::code + speciality); } */ //writer.appendBlockCopy(Bytes((char*)getBytes(),byteCount())); writer.appendBlock((char*)getBytes(),byteCount()); } return !writer.isError(); }
bool Value::write(ConnectionWriter& connection) { if (!proxy) { connection.appendInt(BOTTLE_TAG_LIST); connection.appendInt(0); return !connection.isError(); } connection.appendInt(BOTTLE_TAG_LIST); connection.appendInt(1); return proxy->write(connection); }
virtual bool write(ConnectionWriter& connection) { connection.appendBlock((char*)&datum, sizeof(double)); connection.appendBlock((char*)&payloadSize, sizeof(int)); if (payloadSize>0) connection.appendBlock((char *)payload, payloadSize); return !connection.isError(); }
bool Stamp::write(ConnectionWriter& connection) { connection.appendInt(BOTTLE_TAG_LIST); // nested structure connection.appendInt(2); // with two elements connection.appendInt(BOTTLE_TAG_INT); connection.appendInt(sequenceNumber); connection.appendInt(BOTTLE_TAG_DOUBLE); connection.appendDouble(timeStamp); connection.convertTextMode(); return !connection.isError(); }
bool BufferedConnectionWriter::write(ConnectionWriter& connection) const { stopWrite(); size_t i; for (i = 0; i < header_used; i++) { yarp::os::ManagedBytes& b = *(header[i]); connection.appendBlock(b.get(), b.used()); } for (i = 0; i < lst_used; i++) { yarp::os::ManagedBytes& b = *(lst[i]); connection.appendBlock(b.get(), b.used()); } return !connection.isError(); }