Changeset 20197
- Timestamp:
- 05/10/07 10:04:47 (2 years ago)
- Files:
-
- juggler/trunk/modules/gadgeteer/cluster/Packets/ConfigPacket.cpp (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/cluster/Packets/ConfigPacket.h (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/cluster/Packets/DataPacket.cpp (modified) (6 diffs)
- juggler/trunk/modules/gadgeteer/cluster/Packets/DataPacket.h (modified) (4 diffs)
- juggler/trunk/modules/gadgeteer/cluster/Packets/DeviceAck.cpp (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/cluster/Packets/DeviceAck.h (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/cluster/Packets/EndBlock.cpp (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/cluster/Packets/EndBlock.h (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/cluster/Packets/Packet.h (modified) (2 diffs)
- juggler/trunk/modules/gadgeteer/gadget/Node.cpp (modified) (7 diffs)
- juggler/trunk/modules/gadgeteer/plugins/ApplicationDataManager/ApplicationDataManager.cpp (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/plugins/ApplicationDataManager/ApplicationDataServer.cpp (modified) (4 diffs)
- juggler/trunk/modules/gadgeteer/plugins/ApplicationDataManager/ApplicationDataServer.h (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/plugins/RIMPlugin/DeviceServer.cpp (modified) (5 diffs)
- juggler/trunk/modules/gadgeteer/plugins/RIMPlugin/DeviceServer.h (modified) (1 diff)
- juggler/trunk/modules/gadgeteer/plugins/RIMPlugin/RIMPlugin.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
juggler/trunk/modules/gadgeteer/cluster/Packets/ConfigPacket.cpp
r20118 r20197 79 79 } 80 80 81 void ConfigPacket::parse( vpr::BufferObjectReader* reader)81 void ConfigPacket::parse() 82 82 { 83 mConfig = reader->readString(); 84 mType = reader->readUint16(); 83 mPacketReader->setCurPos(0); 84 85 mConfig = mPacketReader->readString(); 86 mType = mPacketReader->readUint16(); 85 87 } 86 88 juggler/trunk/modules/gadgeteer/cluster/Packets/ConfigPacket.h
r20118 r20197 85 85 * Parses the data stream into the local member variables. 86 86 */ 87 virtual void parse( vpr::BufferObjectReader* reader);87 virtual void parse(); 88 88 89 89 /** juggler/trunk/modules/gadgeteer/cluster/Packets/DataPacket.cpp
r20118 r20197 43 43 DataPacket::DataPacket() 44 44 : Packet(vpr::GUID()) 45 , mDeviceData(NULL)46 45 {;} 47 46 48 DataPacket::DataPacket(const vpr::GUID& pluginId, const vpr::GUID& objectId , std::vector<vpr::Uint8>* data)47 DataPacket::DataPacket(const vpr::GUID& pluginId, const vpr::GUID& objectId) 49 48 : Packet(pluginId) 50 49 , mObjectId(objectId) 51 , mDeviceData(data)52 50 { 53 51 // Create a Header for this packet with the correect type and size. … … 57 55 + 16 /*Plugin GUID*/ 58 56 + 16 /*Object GUID*/ 59 + mDeviceData->size(),57 + 0 /* Empty now, but needs updated later. */, 60 58 0/*Field not curently used*/); 61 59 // Serialize the given data. 62 serialize();60 //serialize(); 63 61 } 64 62 … … 68 66 } 69 67 70 DataPacketPtr DataPacket::create(const vpr::GUID& pluginId, const vpr::GUID& objectId, 71 std::vector<vpr::Uint8>* data) 68 DataPacketPtr DataPacket::create(const vpr::GUID& pluginId, const vpr::GUID& objectId) 72 69 { 73 return DataPacketPtr(new DataPacket(pluginId, objectId , data));70 return DataPacketPtr(new DataPacket(pluginId, objectId)); 74 71 } 75 72 76 73 DataPacket::~DataPacket() 77 74 { 78 delete mDeviceData;79 75 } 80 76 81 void DataPacket::serialize( )77 void DataPacket::serialize(vpr::SerializableObject& object) 82 78 { 83 79 // Clear the data stream. … … 93 89 // Serialize device GUID. 94 90 mObjectId.writeObject(mPacketWriter); 95 96 // mDeviceData is a pointer that points at the DeviceData located in the DeviceServer 97 // this data will be updated every frame before sent. 91 92 object.writeObject(mPacketWriter); 98 93 } 99 94 100 void DataPacket::parse( vpr::BufferObjectReader* reader)95 void DataPacket::parse() 101 96 { 102 // De-Serialize plugin GUID 103 mPluginId.readObject(reader); 97 mPacketReader->setCurPos(0); 104 98 105 99 // De-Serialize plugin GUID 106 mObjectId.readObject(reader); 107 108 mDeviceData = new std::vector<vpr::Uint8>(); 100 mPluginId.readObject(mPacketReader); 109 101 110 unsigned int data_size = mHeader->getPacketLength() - Header::RIM_PACKET_HEAD_SIZE - 32; 111 for(unsigned int i = 0 ; i < data_size ; i++) 112 { 113 mDeviceData->push_back(*(reader->readRaw(1))); 114 } 102 // De-Serialize plugin GUID 103 mObjectId.readObject(mPacketReader); 104 105 // There is extra data on the buffer for the object itself. 115 106 } 116 107 … … 122 113 boost::ignore_unused_variable_warning(debug_level); 123 114 124 /*125 115 vprDEBUG_BEGIN(gadgetDBG_RIM,debug_level) 126 116 << clrOutBOLD(clrYELLOW,"==== Device Data Packet ====\n") << vprDEBUG_FLUSH; … … 137 127 vprDEBUG_END(gadgetDBG_RIM,debug_level) 138 128 << clrOutBOLD(clrYELLOW,"============================\n") << vprDEBUG_FLUSH; 139 */140 129 } 141 130 juggler/trunk/modules/gadgeteer/cluster/Packets/DataPacket.h
r20118 r20197 61 61 * the network 62 62 */ 63 DataPacket(const vpr::GUID& pluginId, const vpr::GUID& objectId, 64 std::vector<vpr::Uint8>* data); 63 DataPacket(const vpr::GUID& pluginId, const vpr::GUID& objectId); 65 64 66 65 public: … … 79 78 * @since 1.3.7 80 79 */ 81 static DataPacketPtr create(const vpr::GUID& pluginId, const vpr::GUID& objectId, 82 std::vector<vpr::Uint8>* data); 80 static DataPacketPtr create(const vpr::GUID& pluginId, const vpr::GUID& objectId); 83 81 84 82 /** … … 90 88 * Serializes member variables into a data stream. 91 89 */ 92 void serialize( );90 void serialize(vpr::SerializableObject& object); 93 91 94 92 /** 95 93 * Parses the data stream into the local member variables. 96 94 */ 97 virtual void parse( vpr::BufferObjectReader* reader);95 virtual void parse(); 98 96 99 97 /** … … 118 116 } 119 117 120 /**121 * Return a pointer to the raw data that we are sending across the network122 */123 std::vector<vpr::Uint8>* getDeviceData()124 {125 return mDeviceData;126 }127 128 118 private: 129 119 vpr::GUID mObjectId; /**< GUID of the object that we are sending raw data for. */ 130 std::vector<vpr::Uint8>* mDeviceData; /**< Raw data that we are sending across the network. */131 120 }; 132 121 juggler/trunk/modules/gadgeteer/cluster/Packets/DeviceAck.cpp
r20118 r20197 113 113 } 114 114 115 void DeviceAck::parse( vpr::BufferObjectReader* reader)115 void DeviceAck::parse() 116 116 { 117 mPacketReader->setCurPos(0); 118 117 119 // De-Serialize plugin GUID 118 mPluginId.readObject( reader);120 mPluginId.readObject(mPacketReader); 119 121 120 122 // De-Serialize Device GUID 121 mId.readObject( reader);123 mId.readObject(mPacketReader); 122 124 123 125 // De-Serialize the Device Name 124 mDeviceName = reader->readString();126 mDeviceName = mPacketReader->readString(); 125 127 126 128 // De-Serialize the Base Type of the acknowledged device 127 mDeviceBaseType = reader->readString();129 mDeviceBaseType = mPacketReader->readString(); 128 130 129 131 // De-Serialize the hostname of the acknowledging node 130 mHostname = reader->readString();132 mHostname = mPacketReader->readString(); 131 133 132 134 // De-Serialize the Ack boolean 133 mAck = reader->readBool();135 mAck = mPacketReader->readBool(); 134 136 } 135 137 juggler/trunk/modules/gadgeteer/cluster/Packets/DeviceAck.h
r20118 r20197 96 96 * Parses the data stream into the local member variables. 97 97 */ 98 virtual void parse( vpr::BufferObjectReader* reader);98 virtual void parse(); 99 99 100 100 /** juggler/trunk/modules/gadgeteer/cluster/Packets/EndBlock.cpp
r20118 r20197 93 93 * Parses the data stream into the local member variables. 94 94 */ 95 void EndBlock::parse( vpr::BufferObjectReader* reader)95 void EndBlock::parse() 96 96 { 97 mPacketReader->setCurPos(0); 98 97 99 // De-Serialize the Temp Var 98 mTempVar = reader->readUint16();100 mTempVar = mPacketReader->readUint16(); 99 101 } 100 102 juggler/trunk/modules/gadgeteer/cluster/Packets/EndBlock.h
r20118 r20197 84 84 * Parses the data stream into the local member variables. 85 85 */ 86 virtual void parse( vpr::BufferObjectReader* reader);86 virtual void parse(); 87 87 88 88 /** juggler/trunk/modules/gadgeteer/cluster/Packets/Packet.h
r20118 r20197 86 86 * Return the vpr::PacketReader object used to retrieve data from the packet. 87 87 */ 88 vpr:: ObjectReader* getPacketReader()88 vpr::BufferObjectReader* getPacketReader() 89 89 { 90 90 return mPacketReader; 91 } 92 93 /** 94 * Return the vpr::PacketReader object used to retrieve data from the packet. 95 */ 96 vpr::BufferObjectWriter* getPacketWriter() 97 { 98 return mPacketWriter; 91 99 } 92 100 … … 120 128 } 121 129 122 virtual void parse( vpr::BufferObjectReader* reader) = 0;130 virtual void parse() = 0; 123 131 protected: 124 132 Header* mHeader; /**< Header used to specify the type/size of this packet.*/ juggler/trunk/modules/gadgeteer/gadget/Node.cpp
r20138 r20197 79 79 if (NULL != mSockStream) 80 80 { 81 /*82 81 if(mSockStream->isOpen()) 83 82 { … … 86 85 delete mSockStream; 87 86 mSockStream = NULL; 88 */89 87 } 90 88 } … … 185 183 } 186 184 185 // Early out if we only have a header. 187 186 if(header->getPacketLength() == cluster::Header::RIM_PACKET_HEAD_SIZE) 188 187 { … … 190 189 } 191 190 192 // If we have a data packet we need to also send the raw data 193 if (outPacket->getPacketType() != cluster::Header::RIM_DATA_PACKET) 194 { 195 std::vector<vpr::Uint8>* packet_data = outPacket->getData(); 196 197 try 198 { 199 mSockStream->send(*packet_data, 200 header->getPacketLength() - cluster::Header::RIM_PACKET_HEAD_SIZE); 201 } 202 catch (vpr::IOException&) 203 { 204 // TODO: setCause(ex) 205 throw cluster::ClusterException("Packet::recv() - Sending data packet failed!!"); 206 } 207 } 208 else 209 { 210 std::vector<vpr::Uint8>* packet_data = outPacket->getData(); 211 212 // Since we are sending a DataPacket we are not actually sending all data here. We are only sending 2 GUIDs here 213 int size = 32; 214 215 try 216 { 217 mSockStream->send(*packet_data, size); 218 } 219 catch (vpr::IOException&) 220 { 221 // TODO: setCause(ex) 222 throw cluster::ClusterException("Packet::recv() - Sending packet failed!!"); 223 } 224 225 226 cluster::DataPacketPtr temp_data_packet 227 = boost::dynamic_pointer_cast<cluster::DataPacket>(outPacket); 228 vprASSERT(NULL != temp_data_packet.get() && "Dynamic cast failed!"); 229 230 // Testing GUIDs 231 /*vpr::BufferObjectReader* testing = new vpr::BufferObjectReader(packet_data); 232 vpr::GUID test; 233 test.readObject(testing); 234 vpr::GUID test2; 235 test2.readObject(testing); 236 237 std::cout << "1: " << test.toString() << " 2: " << test2.toString() << std::endl; 238 239 delete testing; 240 241 // Testing ID 242 testing = new vpr::BufferObjectReader(temp_data_packet->getDeviceData()); 243 std::cout << "ID: " << (int)testing->readUint16() << std::endl; 244 245 delete testing; 246 */ 247 248 try 249 { 250 mSockStream->send(*(temp_data_packet->getDeviceData()), 251 temp_data_packet->getDeviceData()->size()); 252 } 253 catch (vpr::IOException&) 254 { 255 // TODO: setCause(ex) 256 throw cluster::ClusterException("Packet::recv() - Sending Packet Data failed!!"); 257 } 258 } 191 try 192 { 193 mSockStream->send(*outPacket->getData(), 194 header->getPacketLength() - cluster::Header::RIM_PACKET_HEAD_SIZE); 195 } 196 catch (vpr::IOException&) 197 { 198 // TODO: setCause(ex) 199 throw cluster::ClusterException("Packet::recv() - Sending data packet failed!!"); 200 } 201 259 202 return true; 260 203 } … … 307 250 // Set the header for the new packet. 308 251 new_packet->setHeader( packet_head ); 309 // Allocate memory for incoming packet.310 std::vector<vpr::Uint8> incoming_data;311 252 312 253 // Make sure that we are connected. … … 332 273 // Get packet data. 333 274 mSockStream->recvn( 334 incoming_data,275 *new_packet->getData(), 335 276 packet_head->getPacketLength() - cluster::Header::RIM_PACKET_HEAD_SIZE 336 277 ); … … 349 290 } 350 291 351 vpr::BufferObjectReader* reader = new vpr::BufferObjectReader( &incoming_data );352 353 292 // Parse Packet with new data 354 new_packet->parse( reader ); 355 356 //NOTE: incoming_data goes out of scope here which means that we are left with only the data that we parsed. 357 //TODO: We could save memory by not parsing the raw DataPacket but just passing the location of the memory that we want to use. 358 359 //parse_data_length = DataPacket::ParsedDataLength 360 //recvn(incoming_parse_data, ...) 361 //reader = new reader(incoming_parse_data); 362 //new_packet->parse(reader); 363 //recvn(incoming_raw_data, ...) 364 //new_packet->setRawData(incoming_raw_data); 293 new_packet->parse(); 365 294 366 295 return new_packet; juggler/trunk/modules/gadgeteer/plugins/ApplicationDataManager/ApplicationDataManager.cpp
r20186 r20197 95 95 if (user_data != NULL) 96 96 { 97 // Create a object reader to parse the object's data with98 vpr::BufferObjectReader* temp_reader =99 new vpr::BufferObjectReader(data_packet->getDeviceData());100 101 97 // Parse the object's data using the temporary ObjectReader 102 user_data->readObject( temp_reader);98 user_data->readObject(data_packet->getPacketReader()); 103 99 } 104 100 else juggler/trunk/modules/gadgeteer/plugins/ApplicationDataManager/ApplicationDataServer.cpp
r20118 r20197 40 40 : mApplicationData(userData) 41 41 , mDataPacket() 42 , mBufferObjectWriter(NULL)43 , mDeviceData(NULL)42 // , mBufferObjectWriter(NULL) 43 // , mDeviceData(NULL) 44 44 { 45 45 // mDataPacket and mBufferObjectWriter both use mDeviceData as their data buffer. 46 mDeviceData = new std::vector<vpr::Uint8>;46 //mDeviceData = new std::vector<vpr::Uint8>; 47 47 48 48 // Create a DataPacket that will be updated and sent continually. 49 mDataPacket = DataPacket::create(pluginGuid, guid , mDeviceData);50 mBufferObjectWriter = new vpr::BufferObjectWriter(mDeviceData);49 mDataPacket = DataPacket::create(pluginGuid, guid); 50 //mBufferObjectWriter = new vpr::BufferObjectWriter(mDeviceData); 51 51 } 52 52 … … 64 64 // to since mDataPacket contains a reference to the ame memory. 65 65 // vpr::BufferObjectWritter does not release mDeviceData 66 delete mBufferObjectWriter;67 mDeviceData = NULL;66 //delete mBufferObjectWriter; 67 //mDeviceData = NULL; 68 68 } 69 69 … … 71 71 { 72 72 // Clear old data and reset the position of mBufferObjectWriter 73 mBufferObjectWriter->getData()->clear(); 74 mBufferObjectWriter->setCurPos(0); 73 //mBufferObjectWriter->getData()->clear(); 74 //mBufferObjectWriter->setCurPos(0); 75 mDataPacket->getData()->clear(); 76 mDataPacket->getPacketWriter()->setCurPos(0); 75 77 76 78 // This updates the mApplicationData which both mBufferedObjectReader and mDevicePacket point to 77 mApplicationData->writeObject(mBufferObjectWriter); 79 //mApplicationData->writeObject(mBufferObjectWriter); 80 81 mDataPacket->serialize(*mApplicationData); 78 82 79 83 // We must update the size of the actual data that we are going to send … … 81 85 + 16 /*Plugin GUID*/ 82 86 + 16 /*Plugin GUID*/ 83 + mDeviceData->size()); 87 + mDataPacket->getData()->size()); 88 // + mDeviceData->size()); 84 89 85 90 // We must serialize the header again so that we can reset the size. juggler/trunk/modules/gadgeteer/plugins/ApplicationDataManager/ApplicationDataServer.h
r20116 r20197 95 95 ApplicationData* mApplicationData; /**< Structure that is being shared across the cluster. */ 96 96 DataPacketPtr mDataPacket; /**< Packet will be sent across the cluster. */ 97 vpr::BufferObjectWriter* mBufferObjectWriter; /**< ObjectWriter used to serialize the ApplicationData. */98 std::vector<vpr::Uint8>* mDeviceData; /**< Vector that conatins the data that will be sent across the node */97 // vpr::BufferObjectWriter* mBufferObjectWriter; /**< ObjectWriter used to serialize the ApplicationData. */ 98 // std::vector<vpr::Uint8>* mDeviceData; /**< Vector that conatins the data that will be sent across the node */ 99 99 }; 100 100 juggler/trunk/modules/gadgeteer/plugins/RIMPlugin/DeviceServer.cpp
r20118 r20197 43 43 , mDevice(device) 44 44 , mDataPacket() 45 , mBufferObjectWriter(NULL)46 , mDeviceData(NULL)47 45 { 48 46 vpr::GUID temp; … … 58 56 while(temp == mId); 59 57 60 mDeviceData = new std::vector<vpr::Uint8>; 61 mDataPacket = cluster::DataPacket::create(pluginGuid, mId, mDeviceData); 62 mBufferObjectWriter = new vpr::BufferObjectWriter(mDeviceData); 58 mDataPacket = cluster::DataPacket::create(pluginGuid, mId); 63 59 } 64 60 … … 71 67 DeviceServer::~DeviceServer() 72 68 { 73 // mDataPacket will clean up the memory that mDeviceData points74 // to since mDataPacket contains a reference to the same memory.75 mDeviceData = NULL;76 delete mBufferObjectWriter;77 mBufferObjectWriter = NULL;78 69 } 79 70 … … 90 81 void DeviceServer::updateLocalData() 91 82 { 92 // -BufferObjectWriter93 mBufferObjectWriter->getData()->clear();94 mBufferObjectWriter->setCurPos(0);95 96 83 vprASSERT(NULL != mDevice.get() && "Can't have a NULL device."); 97 84 98 // This updates the mDeviceData which both mBufferedObjectReader and 99 // mDevicePacket point to. 100 mDevice->writeObject(mBufferObjectWriter); 85 mDataPacket->serialize(*mDevice); 101 86 102 87 // We must update the size of the actual data that we are going to send 103 88 mDataPacket->getHeader()->setPacketLength( 104 89 cluster::Header::RIM_PACKET_HEAD_SIZE 105 + 16 /*Plugin GUID*/ 106 + 16 /*Plugin GUID*/ 107 + mDeviceData->size() 90 + mDataPacket->getData()->size() 108 91 ); 109 92 … … 114 97 void DeviceServer::debugDump(int debugLevel) const 115 98 { 116 117 99 vpr::DebugOutputGuard dbg_output( 118 100 gadgetDBG_RIM, debugLevel, juggler/trunk/modules/gadgeteer/plugins/RIMPlugin/DeviceServer.h
r20115 r20197 110 110 gadget::InputPtr mDevice; 111 111 cluster::DataPacketPtr mDataPacket; 112 vpr::BufferObjectWriter* mBufferObjectWriter;113 std::vector<vpr::Uint8>* mDeviceData;114 112 }; 115 113 juggler/trunk/modules/gadgeteer/plugins/RIMPlugin/RIMPlugin.cpp
r20158 r20197 260 260 case cluster::Header::RIM_DATA_PACKET: 261 261 { 262 cluster::DataPacketPtr temp_data_packet = boost::dynamic_pointer_cast<cluster::DataPacket>(packet);263 vprASSERT(NULL != temp_data_packet.get() && "Dynamic cast failed!");262 cluster::DataPacketPtr data_packet = boost::dynamic_pointer_cast<cluster::DataPacket>(packet); 263 vprASSERT(NULL != data_packet.get() && "Dynamic cast failed!"); 264 264 265 265 //vprDEBUG(gadgetDBG_RIM,vprDBG_CONFIG_LVL) << "RIM::handlePacket()..." << std::endl << vprDEBUG_FLUSH; 266 // temp_data_packet->printData(1);267 268 gadget::InputPtr virtual_device = getVirtualDevice( temp_data_packet->getObjectId());266 //data_packet->printData(1); 267 268 gadget::InputPtr virtual_device = getVirtualDevice(data_packet->getObjectId()); 269 269 if ( NULL != virtual_device.get() ) 270 270 { 271 vpr::BufferObjectReader* temp_reader = new vpr::BufferObjectReader(temp_data_packet->getDeviceData()); 272 273 temp_reader->setAttrib("rim.timestamp.delta", node->getDelta()); 274 virtual_device->readObject(temp_reader); 271 vpr::BufferObjectReader* reader = data_packet->getPacketReader(); 272 reader->setAttrib("rim.timestamp.delta", node->getDelta()); 273 virtual_device->readObject(reader); 275 274 } 276 275 break;
