]> git.mxchange.org Git - flightgear.git/blobdiff - src/MultiPlayer/mpmessages.hxx
AircraftModel hacking for package support.
[flightgear.git] / src / MultiPlayer / mpmessages.hxx
index 523c555c69304c587522a458f1201382450d91d6..38e7fea58a524e096e262a875b18d176af111ce0 100644 (file)
@@ -18,7 +18,7 @@
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 
 #ifndef MPMESSAGES_H
@@ -37,8 +37,8 @@
 
 #include <vector>
 
-#include <plib/sg.h>
 #include <simgear/compiler.h>
+#include <simgear/props/props.hxx>
 #include <simgear/math/SGMath.hxx>
 #include "tiny_xdr.hxx"
 
@@ -107,25 +107,41 @@ struct T_PositionMsg {
     // angular acceleration wrt the earth centered frame measured in
     // the earth centered frame
     xdr_data_t angularAccel[3];
+    // Padding. The alignment is 8 bytes on x86_64 because there are
+    // 8-byte types in the message, so the size should be explicitly
+    // rounded out to a multiple of 8. Of course, it's a bad idea to
+    // put a C struct directly on the wire, but that's a fight for
+    // another day...
+    xdr_data_t pad;
 };
 
-// Property message
-struct T_PropertyMsg {
-    xdr_data_t id;
-    xdr_data_t value;
-};
-
-struct FGFloatPropertyData {
+struct FGPropertyData {
   unsigned id;
-  float value;
+  
+  // While the type isn't transmitted, it is needed for the destructor
+  simgear::props::Type type;
+  union { 
+    int int_value;
+    float float_value;
+    char* string_value;
+  }; 
+  
+  ~FGPropertyData() {
+    if ((type == simgear::props::STRING) || (type == simgear::props::UNSPECIFIED))
+    {
+      delete [] string_value;
+    }
+  }
 };
 
+
+
 // Position message
 struct FGExternalMotionData {
   // simulation time when this packet was generated
   double time;
   // the artificial lag the client should stay behind the average
-  // simulation time to arrival time diference
+  // simulation time to arrival time difference
   // FIXME: should be some 'per model' instead of 'per packet' property
   double lag;
   
@@ -148,8 +164,22 @@ struct FGExternalMotionData {
   // the earth centered frame
   SGVec3f angularAccel;
   
-  // The set of properties recieved for this timeslot
-  std::vector<FGFloatPropertyData> properties;
+  // The set of properties received for this timeslot
+  std::vector<FGPropertyData*> properties;
+
+  ~FGExternalMotionData()
+  {
+      std::vector<FGPropertyData*>::const_iterator propIt;
+      std::vector<FGPropertyData*>::const_iterator propItEnd;
+      propIt = properties.begin();
+      propItEnd = properties.end();
+
+      while (propIt != propItEnd)
+      {
+        delete *propIt;
+        propIt++;
+      }
+  }
 };
 
 #endif