Author Topic: sending a list of vector3-like objects, is my logic correct?  (Read 18660 times)

djTomServo

  • Not-a-newbie
  • *
  • Posts: 5
  • Karma: 0
    • View Profile
sending a list of vector3-like objects, is my logic correct?
« on: October 16, 2014, 12:47:51 PM »
Greetings all!  Just picked up RakNet this past weekend for a project and so far it's been a smooth ride; Really great library with tons of useful functionality.  I was hoping someone could double check my logic on this before I dive in, I know this is probably a very simple process, just want to be sure before I go too far down the wrong rabbit hole.

I have a chunk of data that lives as a vector of 3-component type objects and I want to send and receive them via Bitstreams using WriteVector/ReadVector; Going off of a few forum threads and the manual, I think I have a good handle on it, but again if someone could check my logic, I'd certainly appreciate it!

Reference:
http://www.jenkinssoftware.com/forum/index.php?topic=4822.0 (Sending an std::vector?)
http://www.jenkinssoftware.com/forum/index.php?topic=1713.0 (Sending classes)
http://www.jenkinssoftware.com/raknet/manual/bitstreams.html (Bitstream Overview)
http://www.jenkinssoftware.com/raknet/manual/creatingpackets.html (Creating Packets)

Server side code:
Code: [Select]
void writeBitstream()
{
  BitStream pointData;
  pointData.Write((unsigned char)ID_POINT_CLOUD_FRAME); // Message ID

  //mPoints is an std::vector<Vec3f>
  size_t numElements = mPoints.size();
  pointData.write((unsigned char)numElements);

  for (const Vec3f &cV : mPoints)
  {
    pointData.WriteVector<float>(cV.x, cV.y, cV.z);
  }

  SystemAddress destAddr;
  destAddr.FromString("10.10.9.57|12345");
  mServer->Send(&pointData, HIGH_PRIORITY, RELIABLE, 0, destAddr, false);
}

Client side code:
Code: [Select]
void readBitstream()
{
  //mPacket is a RakNet::Packet *, data[0] is ID_POINT_CLOUD_FRAME, data[1](?) is numElements from above
  Bitstream pointStream(mPacket->data, mPacket->length, false);
 
  pointStream.IgnoreBits(8);
  size_t numElements;
  pointStream.Read(numElements);
 
  std::vector<Vec3f> pointData;
 
  for(size_t i=0;i<numElements;++i)
  {
    float cX,cY,cZ;
    pointStream.ReadVector(cX,cY,cZ);
    pointData.push_back(Vec3f(cX,cY,cZ));   
  }
}


Again, I THINK this is correct or at least on the right track, but then I could be completely off.  If anyone has any thoughts or suggestions, I'd love to hear 'em.  Thanks all!