From f671c31dc5d3e0041eaf3739ac0b165010448ab6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tim=20=C3=9Cbelh=C3=B6r?= <Tim.Uebelhoer@outlook.de>
Date: Thu, 29 Jun 2017 14:49:20 +0200
Subject: [PATCH] Reverted to all values at once.

---
 ModeliProtocol.fbs               |  38 +--
 ModeliProtocol_generated.h       | 477 +++++++------------------------
 Network/Protocol/BoolValues.cs   |  59 ----
 Network/Protocol/CommandEnum.cs  |   7 +-
 Network/Protocol/DataUnion.cs    |   9 +-
 Network/Protocol/IntValues.cs    |  59 ----
 Network/Protocol/RealValues.cs   |  59 ----
 Network/Protocol/StringValues.cs |  58 ----
 Network/Protocol/Values.cs       |  91 ++++++
 9 files changed, 204 insertions(+), 653 deletions(-)
 delete mode 100644 Network/Protocol/BoolValues.cs
 delete mode 100644 Network/Protocol/IntValues.cs
 delete mode 100644 Network/Protocol/RealValues.cs
 delete mode 100644 Network/Protocol/StringValues.cs
 create mode 100644 Network/Protocol/Values.cs

diff --git a/ModeliProtocol.fbs b/ModeliProtocol.fbs
index 3ba20dd..3b06ebf 100644
--- a/ModeliProtocol.fbs
+++ b/ModeliProtocol.fbs
@@ -14,17 +14,13 @@ enum CommandEnum : int {
   AddChannelLinks,	// Add ChannelLinks
   RemoveChannelLinks,	// Remove ChannelLinks
   Feedback,	// Send a fmi2Status & msg (optional 0 as size) to the frontend
-  IntValues,	// Integer values, to backend: set values in fmu, to frontend: latest values from simulation
-  RealValues,	// Real values, to backend: set values in fmu, to frontend: latest values from simulation
-  BoolValues,	// Boolean values, to backend: set values in fmu, to frontend: latest values from simulation
-  StringValues,	// String, to backend: set values in fmu, to frontend: latest values from simulation
+  Values,	// Backend->Frontend: Latest simulation data. Frontend->Backen: Set values
   Log		// Send a log message to the frontend
 }	
 
 // Contains the information to execute the command
 union DataUnion { 
-  Time, FmuFile, ValueRefs, ChannelLink, 
-  IntValues, RealValues, BoolValues, StringValues, Feedback, Log 
+  Time, FmuFile, ValueRefs, ChannelLink, Values, Feedback, Log 
 }
 
 // For message management
@@ -60,33 +56,17 @@ table ChannelLink {
   Shift:double;
 }
 
-table IntValues {
+table Values {
   InstanceName:string;
   Timestamp:double;
-  ValueRefs:[uint];
-  Values:[int];
-}
-
-table RealValues {
-  InstanceName:string;
-  Timestamp:double;
-  ValueRefs:[uint];
-  Values:[double];
-}
-
-table BoolValues {
-  InstanceName:string;
-  Timestamp:double;
-  ValueRefs:[uint];
-  Values:[int];	// fmistandard: stored as 1(true) or 0(false) int
+  IntVrs:[uint];
+  IntValues:[int];
+  RealVrs:[uint];
+  RealValues:[double];
+  BoolVrs:[uint];
+  BoolValues:[int];	// fmistandard: stored as 1(true) or 0(false) int
 }
 
-table StringValues {
-  InstanceName:string;
-  Timestamp:double;
-  ValueRefs:[uint];
-  Values:[string];
-}
 
 table Feedback {
   Result:int;
diff --git a/ModeliProtocol_generated.h b/ModeliProtocol_generated.h
index 4e81120..27eb9db 100644
--- a/ModeliProtocol_generated.h
+++ b/ModeliProtocol_generated.h
@@ -19,13 +19,7 @@ struct ValueRefs;
 
 struct ChannelLink;
 
-struct IntValues;
-
-struct RealValues;
-
-struct BoolValues;
-
-struct StringValues;
+struct Values;
 
 struct Feedback;
 
@@ -43,16 +37,13 @@ enum CommandEnum {
   CommandEnum_AddChannelLinks = 8,
   CommandEnum_RemoveChannelLinks = 9,
   CommandEnum_Feedback = 10,
-  CommandEnum_IntValues = 11,
-  CommandEnum_RealValues = 12,
-  CommandEnum_BoolValues = 13,
-  CommandEnum_StringValues = 14,
-  CommandEnum_Log = 15,
+  CommandEnum_Values = 11,
+  CommandEnum_Log = 12,
   CommandEnum_MIN = CommandEnum_KeepAlive,
   CommandEnum_MAX = CommandEnum_Log
 };
 
-inline CommandEnum (&EnumValuesCommandEnum())[16] {
+inline CommandEnum (&EnumValuesCommandEnum())[13] {
   static CommandEnum values[] = {
     CommandEnum_KeepAlive,
     CommandEnum_Play,
@@ -65,10 +56,7 @@ inline CommandEnum (&EnumValuesCommandEnum())[16] {
     CommandEnum_AddChannelLinks,
     CommandEnum_RemoveChannelLinks,
     CommandEnum_Feedback,
-    CommandEnum_IntValues,
-    CommandEnum_RealValues,
-    CommandEnum_BoolValues,
-    CommandEnum_StringValues,
+    CommandEnum_Values,
     CommandEnum_Log
   };
   return values;
@@ -87,10 +75,7 @@ inline const char **EnumNamesCommandEnum() {
     "AddChannelLinks",
     "RemoveChannelLinks",
     "Feedback",
-    "IntValues",
-    "RealValues",
-    "BoolValues",
-    "StringValues",
+    "Values",
     "Log",
     nullptr
   };
@@ -108,27 +93,21 @@ enum DataUnion {
   DataUnion_FmuFile = 2,
   DataUnion_ValueRefs = 3,
   DataUnion_ChannelLink = 4,
-  DataUnion_IntValues = 5,
-  DataUnion_RealValues = 6,
-  DataUnion_BoolValues = 7,
-  DataUnion_StringValues = 8,
-  DataUnion_Feedback = 9,
-  DataUnion_Log = 10,
+  DataUnion_Values = 5,
+  DataUnion_Feedback = 6,
+  DataUnion_Log = 7,
   DataUnion_MIN = DataUnion_NONE,
   DataUnion_MAX = DataUnion_Log
 };
 
-inline DataUnion (&EnumValuesDataUnion())[11] {
+inline DataUnion (&EnumValuesDataUnion())[8] {
   static DataUnion values[] = {
     DataUnion_NONE,
     DataUnion_Time,
     DataUnion_FmuFile,
     DataUnion_ValueRefs,
     DataUnion_ChannelLink,
-    DataUnion_IntValues,
-    DataUnion_RealValues,
-    DataUnion_BoolValues,
-    DataUnion_StringValues,
+    DataUnion_Values,
     DataUnion_Feedback,
     DataUnion_Log
   };
@@ -142,10 +121,7 @@ inline const char **EnumNamesDataUnion() {
     "FmuFile",
     "ValueRefs",
     "ChannelLink",
-    "IntValues",
-    "RealValues",
-    "BoolValues",
-    "StringValues",
+    "Values",
     "Feedback",
     "Log",
     nullptr
@@ -178,20 +154,8 @@ template<> struct DataUnionTraits<ChannelLink> {
   static const DataUnion enum_value = DataUnion_ChannelLink;
 };
 
-template<> struct DataUnionTraits<IntValues> {
-  static const DataUnion enum_value = DataUnion_IntValues;
-};
-
-template<> struct DataUnionTraits<RealValues> {
-  static const DataUnion enum_value = DataUnion_RealValues;
-};
-
-template<> struct DataUnionTraits<BoolValues> {
-  static const DataUnion enum_value = DataUnion_BoolValues;
-};
-
-template<> struct DataUnionTraits<StringValues> {
-  static const DataUnion enum_value = DataUnion_StringValues;
+template<> struct DataUnionTraits<Values> {
+  static const DataUnion enum_value = DataUnion_Values;
 };
 
 template<> struct DataUnionTraits<Feedback> {
@@ -237,17 +201,8 @@ struct ModeliMessage FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
   const ChannelLink *Data_as_ChannelLink() const {
     return Data_type() == DataUnion_ChannelLink ? static_cast<const ChannelLink *>(Data()) : nullptr;
   }
-  const IntValues *Data_as_IntValues() const {
-    return Data_type() == DataUnion_IntValues ? static_cast<const IntValues *>(Data()) : nullptr;
-  }
-  const RealValues *Data_as_RealValues() const {
-    return Data_type() == DataUnion_RealValues ? static_cast<const RealValues *>(Data()) : nullptr;
-  }
-  const BoolValues *Data_as_BoolValues() const {
-    return Data_type() == DataUnion_BoolValues ? static_cast<const BoolValues *>(Data()) : nullptr;
-  }
-  const StringValues *Data_as_StringValues() const {
-    return Data_type() == DataUnion_StringValues ? static_cast<const StringValues *>(Data()) : nullptr;
+  const Values *Data_as_Values() const {
+    return Data_type() == DataUnion_Values ? static_cast<const Values *>(Data()) : nullptr;
   }
   const Feedback *Data_as_Feedback() const {
     return Data_type() == DataUnion_Feedback ? static_cast<const Feedback *>(Data()) : nullptr;
@@ -282,20 +237,8 @@ template<> inline const ChannelLink *ModeliMessage::Data_as<ChannelLink>() const
   return Data_as_ChannelLink();
 }
 
-template<> inline const IntValues *ModeliMessage::Data_as<IntValues>() const {
-  return Data_as_IntValues();
-}
-
-template<> inline const RealValues *ModeliMessage::Data_as<RealValues>() const {
-  return Data_as_RealValues();
-}
-
-template<> inline const BoolValues *ModeliMessage::Data_as<BoolValues>() const {
-  return Data_as_BoolValues();
-}
-
-template<> inline const StringValues *ModeliMessage::Data_as<StringValues>() const {
-  return Data_as_StringValues();
+template<> inline const Values *ModeliMessage::Data_as<Values>() const {
+  return Data_as_Values();
 }
 
 template<> inline const Feedback *ModeliMessage::Data_as<Feedback>() const {
@@ -659,99 +602,16 @@ inline flatbuffers::Offset<ChannelLink> CreateChannelLinkDirect(
       Shift);
 }
 
-struct IntValues FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_TIMESTAMP = 6,
-    VT_VALUEREFS = 8,
-    VT_VALUES = 10
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
-  }
-  double Timestamp() const {
-    return GetField<double>(VT_TIMESTAMP, 0.0);
-  }
-  const flatbuffers::Vector<uint32_t> *ValueRefs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_VALUEREFS);
-  }
-  const flatbuffers::Vector<int32_t> *Values() const {
-    return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_VALUES);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyField<double>(verifier, VT_TIMESTAMP) &&
-           VerifyOffset(verifier, VT_VALUEREFS) &&
-           verifier.Verify(ValueRefs()) &&
-           VerifyOffset(verifier, VT_VALUES) &&
-           verifier.Verify(Values()) &&
-           verifier.EndTable();
-  }
-};
-
-struct IntValuesBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(IntValues::VT_INSTANCENAME, InstanceName);
-  }
-  void add_Timestamp(double Timestamp) {
-    fbb_.AddElement<double>(IntValues::VT_TIMESTAMP, Timestamp, 0.0);
-  }
-  void add_ValueRefs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs) {
-    fbb_.AddOffset(IntValues::VT_VALUEREFS, ValueRefs);
-  }
-  void add_Values(flatbuffers::Offset<flatbuffers::Vector<int32_t>> Values) {
-    fbb_.AddOffset(IntValues::VT_VALUES, Values);
-  }
-  IntValuesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  IntValuesBuilder &operator=(const IntValuesBuilder &);
-  flatbuffers::Offset<IntValues> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<IntValues>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<IntValues> CreateIntValues(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    double Timestamp = 0.0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<int32_t>> Values = 0) {
-  IntValuesBuilder builder_(_fbb);
-  builder_.add_Timestamp(Timestamp);
-  builder_.add_Values(Values);
-  builder_.add_ValueRefs(ValueRefs);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<IntValues> CreateIntValuesDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    double Timestamp = 0.0,
-    const std::vector<uint32_t> *ValueRefs = nullptr,
-    const std::vector<int32_t> *Values = nullptr) {
-  return Network::Protocol::CreateIntValues(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      Timestamp,
-      ValueRefs ? _fbb.CreateVector<uint32_t>(*ValueRefs) : 0,
-      Values ? _fbb.CreateVector<int32_t>(*Values) : 0);
-}
-
-struct RealValues FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
+struct Values FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
   enum {
     VT_INSTANCENAME = 4,
     VT_TIMESTAMP = 6,
-    VT_VALUEREFS = 8,
-    VT_VALUES = 10
+    VT_INTVRS = 8,
+    VT_INTVALUES = 10,
+    VT_REALVRS = 12,
+    VT_REALVALUES = 14,
+    VT_BOOLVRS = 16,
+    VT_BOOLVALUES = 18
   };
   const flatbuffers::String *InstanceName() const {
     return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
@@ -759,253 +619,126 @@ struct RealValues FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
   double Timestamp() const {
     return GetField<double>(VT_TIMESTAMP, 0.0);
   }
-  const flatbuffers::Vector<uint32_t> *ValueRefs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_VALUEREFS);
-  }
-  const flatbuffers::Vector<double> *Values() const {
-    return GetPointer<const flatbuffers::Vector<double> *>(VT_VALUES);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyField<double>(verifier, VT_TIMESTAMP) &&
-           VerifyOffset(verifier, VT_VALUEREFS) &&
-           verifier.Verify(ValueRefs()) &&
-           VerifyOffset(verifier, VT_VALUES) &&
-           verifier.Verify(Values()) &&
-           verifier.EndTable();
-  }
-};
-
-struct RealValuesBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(RealValues::VT_INSTANCENAME, InstanceName);
-  }
-  void add_Timestamp(double Timestamp) {
-    fbb_.AddElement<double>(RealValues::VT_TIMESTAMP, Timestamp, 0.0);
-  }
-  void add_ValueRefs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs) {
-    fbb_.AddOffset(RealValues::VT_VALUEREFS, ValueRefs);
-  }
-  void add_Values(flatbuffers::Offset<flatbuffers::Vector<double>> Values) {
-    fbb_.AddOffset(RealValues::VT_VALUES, Values);
-  }
-  RealValuesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
+  const flatbuffers::Vector<uint32_t> *IntVrs() const {
+    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_INTVRS);
   }
-  RealValuesBuilder &operator=(const RealValuesBuilder &);
-  flatbuffers::Offset<RealValues> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<RealValues>(end);
-    return o;
+  const flatbuffers::Vector<int32_t> *IntValues() const {
+    return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_INTVALUES);
   }
-};
-
-inline flatbuffers::Offset<RealValues> CreateRealValues(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    double Timestamp = 0.0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<double>> Values = 0) {
-  RealValuesBuilder builder_(_fbb);
-  builder_.add_Timestamp(Timestamp);
-  builder_.add_Values(Values);
-  builder_.add_ValueRefs(ValueRefs);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<RealValues> CreateRealValuesDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    double Timestamp = 0.0,
-    const std::vector<uint32_t> *ValueRefs = nullptr,
-    const std::vector<double> *Values = nullptr) {
-  return Network::Protocol::CreateRealValues(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      Timestamp,
-      ValueRefs ? _fbb.CreateVector<uint32_t>(*ValueRefs) : 0,
-      Values ? _fbb.CreateVector<double>(*Values) : 0);
-}
-
-struct BoolValues FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_TIMESTAMP = 6,
-    VT_VALUEREFS = 8,
-    VT_VALUES = 10
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
+  const flatbuffers::Vector<uint32_t> *RealVrs() const {
+    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_REALVRS);
   }
-  double Timestamp() const {
-    return GetField<double>(VT_TIMESTAMP, 0.0);
+  const flatbuffers::Vector<double> *RealValues() const {
+    return GetPointer<const flatbuffers::Vector<double> *>(VT_REALVALUES);
   }
-  const flatbuffers::Vector<uint32_t> *ValueRefs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_VALUEREFS);
+  const flatbuffers::Vector<uint32_t> *BoolVrs() const {
+    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_BOOLVRS);
   }
-  const flatbuffers::Vector<int32_t> *Values() const {
-    return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_VALUES);
+  const flatbuffers::Vector<int32_t> *BoolValues() const {
+    return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_BOOLVALUES);
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
            VerifyOffset(verifier, VT_INSTANCENAME) &&
            verifier.Verify(InstanceName()) &&
            VerifyField<double>(verifier, VT_TIMESTAMP) &&
-           VerifyOffset(verifier, VT_VALUEREFS) &&
-           verifier.Verify(ValueRefs()) &&
-           VerifyOffset(verifier, VT_VALUES) &&
-           verifier.Verify(Values()) &&
+           VerifyOffset(verifier, VT_INTVRS) &&
+           verifier.Verify(IntVrs()) &&
+           VerifyOffset(verifier, VT_INTVALUES) &&
+           verifier.Verify(IntValues()) &&
+           VerifyOffset(verifier, VT_REALVRS) &&
+           verifier.Verify(RealVrs()) &&
+           VerifyOffset(verifier, VT_REALVALUES) &&
+           verifier.Verify(RealValues()) &&
+           VerifyOffset(verifier, VT_BOOLVRS) &&
+           verifier.Verify(BoolVrs()) &&
+           VerifyOffset(verifier, VT_BOOLVALUES) &&
+           verifier.Verify(BoolValues()) &&
            verifier.EndTable();
   }
 };
 
-struct BoolValuesBuilder {
+struct ValuesBuilder {
   flatbuffers::FlatBufferBuilder &fbb_;
   flatbuffers::uoffset_t start_;
   void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(BoolValues::VT_INSTANCENAME, InstanceName);
+    fbb_.AddOffset(Values::VT_INSTANCENAME, InstanceName);
   }
   void add_Timestamp(double Timestamp) {
-    fbb_.AddElement<double>(BoolValues::VT_TIMESTAMP, Timestamp, 0.0);
+    fbb_.AddElement<double>(Values::VT_TIMESTAMP, Timestamp, 0.0);
   }
-  void add_ValueRefs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs) {
-    fbb_.AddOffset(BoolValues::VT_VALUEREFS, ValueRefs);
-  }
-  void add_Values(flatbuffers::Offset<flatbuffers::Vector<int32_t>> Values) {
-    fbb_.AddOffset(BoolValues::VT_VALUES, Values);
-  }
-  BoolValuesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  BoolValuesBuilder &operator=(const BoolValuesBuilder &);
-  flatbuffers::Offset<BoolValues> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<BoolValues>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<BoolValues> CreateBoolValues(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    double Timestamp = 0.0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<int32_t>> Values = 0) {
-  BoolValuesBuilder builder_(_fbb);
-  builder_.add_Timestamp(Timestamp);
-  builder_.add_Values(Values);
-  builder_.add_ValueRefs(ValueRefs);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<BoolValues> CreateBoolValuesDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    double Timestamp = 0.0,
-    const std::vector<uint32_t> *ValueRefs = nullptr,
-    const std::vector<int32_t> *Values = nullptr) {
-  return Network::Protocol::CreateBoolValues(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      Timestamp,
-      ValueRefs ? _fbb.CreateVector<uint32_t>(*ValueRefs) : 0,
-      Values ? _fbb.CreateVector<int32_t>(*Values) : 0);
-}
-
-struct StringValues FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_TIMESTAMP = 6,
-    VT_VALUEREFS = 8,
-    VT_VALUES = 10
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
-  }
-  double Timestamp() const {
-    return GetField<double>(VT_TIMESTAMP, 0.0);
-  }
-  const flatbuffers::Vector<uint32_t> *ValueRefs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_VALUEREFS);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *Values() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_VALUES);
+  void add_IntVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> IntVrs) {
+    fbb_.AddOffset(Values::VT_INTVRS, IntVrs);
   }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyField<double>(verifier, VT_TIMESTAMP) &&
-           VerifyOffset(verifier, VT_VALUEREFS) &&
-           verifier.Verify(ValueRefs()) &&
-           VerifyOffset(verifier, VT_VALUES) &&
-           verifier.Verify(Values()) &&
-           verifier.VerifyVectorOfStrings(Values()) &&
-           verifier.EndTable();
+  void add_IntValues(flatbuffers::Offset<flatbuffers::Vector<int32_t>> IntValues) {
+    fbb_.AddOffset(Values::VT_INTVALUES, IntValues);
   }
-};
-
-struct StringValuesBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(StringValues::VT_INSTANCENAME, InstanceName);
+  void add_RealVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> RealVrs) {
+    fbb_.AddOffset(Values::VT_REALVRS, RealVrs);
   }
-  void add_Timestamp(double Timestamp) {
-    fbb_.AddElement<double>(StringValues::VT_TIMESTAMP, Timestamp, 0.0);
+  void add_RealValues(flatbuffers::Offset<flatbuffers::Vector<double>> RealValues) {
+    fbb_.AddOffset(Values::VT_REALVALUES, RealValues);
   }
-  void add_ValueRefs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs) {
-    fbb_.AddOffset(StringValues::VT_VALUEREFS, ValueRefs);
+  void add_BoolVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> BoolVrs) {
+    fbb_.AddOffset(Values::VT_BOOLVRS, BoolVrs);
   }
-  void add_Values(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> Values) {
-    fbb_.AddOffset(StringValues::VT_VALUES, Values);
+  void add_BoolValues(flatbuffers::Offset<flatbuffers::Vector<int32_t>> BoolValues) {
+    fbb_.AddOffset(Values::VT_BOOLVALUES, BoolValues);
   }
-  StringValuesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  ValuesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
-  StringValuesBuilder &operator=(const StringValuesBuilder &);
-  flatbuffers::Offset<StringValues> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<StringValues>(end);
+  ValuesBuilder &operator=(const ValuesBuilder &);
+  flatbuffers::Offset<Values> Finish() {
+    const auto end = fbb_.EndTable(start_, 8);
+    auto o = flatbuffers::Offset<Values>(end);
     return o;
   }
 };
 
-inline flatbuffers::Offset<StringValues> CreateStringValues(
+inline flatbuffers::Offset<Values> CreateValues(
     flatbuffers::FlatBufferBuilder &_fbb,
     flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
     double Timestamp = 0.0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> ValueRefs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> Values = 0) {
-  StringValuesBuilder builder_(_fbb);
+    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> IntVrs = 0,
+    flatbuffers::Offset<flatbuffers::Vector<int32_t>> IntValues = 0,
+    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> RealVrs = 0,
+    flatbuffers::Offset<flatbuffers::Vector<double>> RealValues = 0,
+    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> BoolVrs = 0,
+    flatbuffers::Offset<flatbuffers::Vector<int32_t>> BoolValues = 0) {
+  ValuesBuilder builder_(_fbb);
   builder_.add_Timestamp(Timestamp);
-  builder_.add_Values(Values);
-  builder_.add_ValueRefs(ValueRefs);
+  builder_.add_BoolValues(BoolValues);
+  builder_.add_BoolVrs(BoolVrs);
+  builder_.add_RealValues(RealValues);
+  builder_.add_RealVrs(RealVrs);
+  builder_.add_IntValues(IntValues);
+  builder_.add_IntVrs(IntVrs);
   builder_.add_InstanceName(InstanceName);
   return builder_.Finish();
 }
 
-inline flatbuffers::Offset<StringValues> CreateStringValuesDirect(
+inline flatbuffers::Offset<Values> CreateValuesDirect(
     flatbuffers::FlatBufferBuilder &_fbb,
     const char *InstanceName = nullptr,
     double Timestamp = 0.0,
-    const std::vector<uint32_t> *ValueRefs = nullptr,
-    const std::vector<flatbuffers::Offset<flatbuffers::String>> *Values = nullptr) {
-  return Network::Protocol::CreateStringValues(
+    const std::vector<uint32_t> *IntVrs = nullptr,
+    const std::vector<int32_t> *IntValues = nullptr,
+    const std::vector<uint32_t> *RealVrs = nullptr,
+    const std::vector<double> *RealValues = nullptr,
+    const std::vector<uint32_t> *BoolVrs = nullptr,
+    const std::vector<int32_t> *BoolValues = nullptr) {
+  return Network::Protocol::CreateValues(
       _fbb,
       InstanceName ? _fbb.CreateString(InstanceName) : 0,
       Timestamp,
-      ValueRefs ? _fbb.CreateVector<uint32_t>(*ValueRefs) : 0,
-      Values ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*Values) : 0);
+      IntVrs ? _fbb.CreateVector<uint32_t>(*IntVrs) : 0,
+      IntValues ? _fbb.CreateVector<int32_t>(*IntValues) : 0,
+      RealVrs ? _fbb.CreateVector<uint32_t>(*RealVrs) : 0,
+      RealValues ? _fbb.CreateVector<double>(*RealValues) : 0,
+      BoolVrs ? _fbb.CreateVector<uint32_t>(*BoolVrs) : 0,
+      BoolValues ? _fbb.CreateVector<int32_t>(*BoolValues) : 0);
 }
 
 struct Feedback FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
@@ -1152,20 +885,8 @@ inline bool VerifyDataUnion(flatbuffers::Verifier &verifier, const void *obj, Da
       auto ptr = reinterpret_cast<const ChannelLink *>(obj);
       return verifier.VerifyTable(ptr);
     }
-    case DataUnion_IntValues: {
-      auto ptr = reinterpret_cast<const IntValues *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_RealValues: {
-      auto ptr = reinterpret_cast<const RealValues *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_BoolValues: {
-      auto ptr = reinterpret_cast<const BoolValues *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_StringValues: {
-      auto ptr = reinterpret_cast<const StringValues *>(obj);
+    case DataUnion_Values: {
+      auto ptr = reinterpret_cast<const Values *>(obj);
       return verifier.VerifyTable(ptr);
     }
     case DataUnion_Feedback: {
diff --git a/Network/Protocol/BoolValues.cs b/Network/Protocol/BoolValues.cs
deleted file mode 100644
index ee9fb2d..0000000
--- a/Network/Protocol/BoolValues.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct BoolValues : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static BoolValues GetRootAsBoolValues(ByteBuffer _bb) { return GetRootAsBoolValues(_bb, new BoolValues()); }
-  public static BoolValues GetRootAsBoolValues(ByteBuffer _bb, BoolValues obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public BoolValues __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public double Timestamp { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-  public uint ValueRefs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int ValueRefsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValueRefsBytes() { return __p.__vector_as_arraysegment(8); }
-  public int Values(int j) { int o = __p.__offset(10); return o != 0 ? __p.bb.GetInt(__p.__vector(o) + j * 4) : (int)0; }
-  public int ValuesLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValuesBytes() { return __p.__vector_as_arraysegment(10); }
-
-  public static Offset<BoolValues> CreateBoolValues(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      double Timestamp = 0.0,
-      VectorOffset ValueRefsOffset = default(VectorOffset),
-      VectorOffset ValuesOffset = default(VectorOffset)) {
-    builder.StartObject(4);
-    BoolValues.AddTimestamp(builder, Timestamp);
-    BoolValues.AddValues(builder, ValuesOffset);
-    BoolValues.AddValueRefs(builder, ValueRefsOffset);
-    BoolValues.AddInstanceName(builder, InstanceNameOffset);
-    return BoolValues.EndBoolValues(builder);
-  }
-
-  public static void StartBoolValues(FlatBufferBuilder builder) { builder.StartObject(4); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddTimestamp(FlatBufferBuilder builder, double Timestamp) { builder.AddDouble(1, Timestamp, 0.0); }
-  public static void AddValueRefs(FlatBufferBuilder builder, VectorOffset ValueRefsOffset) { builder.AddOffset(2, ValueRefsOffset.Value, 0); }
-  public static VectorOffset CreateValueRefsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartValueRefsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddValues(FlatBufferBuilder builder, VectorOffset ValuesOffset) { builder.AddOffset(3, ValuesOffset.Value, 0); }
-  public static VectorOffset CreateValuesVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); }
-  public static void StartValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static Offset<BoolValues> EndBoolValues(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<BoolValues>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/CommandEnum.cs b/Network/Protocol/CommandEnum.cs
index a54eb84..0589f62 100644
--- a/Network/Protocol/CommandEnum.cs
+++ b/Network/Protocol/CommandEnum.cs
@@ -18,11 +18,8 @@ public enum CommandEnum : int
  AddChannelLinks = 8,
  RemoveChannelLinks = 9,
  Feedback = 10,
- IntValues = 11,
- RealValues = 12,
- BoolValues = 13,
- StringValues = 14,
- Log = 15,
+ Values = 11,
+ Log = 12,
 };
 
 
diff --git a/Network/Protocol/DataUnion.cs b/Network/Protocol/DataUnion.cs
index 9b0ecd2..521e059 100644
--- a/Network/Protocol/DataUnion.cs
+++ b/Network/Protocol/DataUnion.cs
@@ -12,12 +12,9 @@ public enum DataUnion : byte
  FmuFile = 2,
  ValueRefs = 3,
  ChannelLink = 4,
- IntValues = 5,
- RealValues = 6,
- BoolValues = 7,
- StringValues = 8,
- Feedback = 9,
- Log = 10,
+ Values = 5,
+ Feedback = 6,
+ Log = 7,
 };
 
 
diff --git a/Network/Protocol/IntValues.cs b/Network/Protocol/IntValues.cs
deleted file mode 100644
index c63129c..0000000
--- a/Network/Protocol/IntValues.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct IntValues : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static IntValues GetRootAsIntValues(ByteBuffer _bb) { return GetRootAsIntValues(_bb, new IntValues()); }
-  public static IntValues GetRootAsIntValues(ByteBuffer _bb, IntValues obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public IntValues __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public double Timestamp { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-  public uint ValueRefs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int ValueRefsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValueRefsBytes() { return __p.__vector_as_arraysegment(8); }
-  public int Values(int j) { int o = __p.__offset(10); return o != 0 ? __p.bb.GetInt(__p.__vector(o) + j * 4) : (int)0; }
-  public int ValuesLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValuesBytes() { return __p.__vector_as_arraysegment(10); }
-
-  public static Offset<IntValues> CreateIntValues(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      double Timestamp = 0.0,
-      VectorOffset ValueRefsOffset = default(VectorOffset),
-      VectorOffset ValuesOffset = default(VectorOffset)) {
-    builder.StartObject(4);
-    IntValues.AddTimestamp(builder, Timestamp);
-    IntValues.AddValues(builder, ValuesOffset);
-    IntValues.AddValueRefs(builder, ValueRefsOffset);
-    IntValues.AddInstanceName(builder, InstanceNameOffset);
-    return IntValues.EndIntValues(builder);
-  }
-
-  public static void StartIntValues(FlatBufferBuilder builder) { builder.StartObject(4); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddTimestamp(FlatBufferBuilder builder, double Timestamp) { builder.AddDouble(1, Timestamp, 0.0); }
-  public static void AddValueRefs(FlatBufferBuilder builder, VectorOffset ValueRefsOffset) { builder.AddOffset(2, ValueRefsOffset.Value, 0); }
-  public static VectorOffset CreateValueRefsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartValueRefsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddValues(FlatBufferBuilder builder, VectorOffset ValuesOffset) { builder.AddOffset(3, ValuesOffset.Value, 0); }
-  public static VectorOffset CreateValuesVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); }
-  public static void StartValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static Offset<IntValues> EndIntValues(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<IntValues>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/RealValues.cs b/Network/Protocol/RealValues.cs
deleted file mode 100644
index d78493f..0000000
--- a/Network/Protocol/RealValues.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct RealValues : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static RealValues GetRootAsRealValues(ByteBuffer _bb) { return GetRootAsRealValues(_bb, new RealValues()); }
-  public static RealValues GetRootAsRealValues(ByteBuffer _bb, RealValues obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public RealValues __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public double Timestamp { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-  public uint ValueRefs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int ValueRefsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValueRefsBytes() { return __p.__vector_as_arraysegment(8); }
-  public double Values(int j) { int o = __p.__offset(10); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; }
-  public int ValuesLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValuesBytes() { return __p.__vector_as_arraysegment(10); }
-
-  public static Offset<RealValues> CreateRealValues(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      double Timestamp = 0.0,
-      VectorOffset ValueRefsOffset = default(VectorOffset),
-      VectorOffset ValuesOffset = default(VectorOffset)) {
-    builder.StartObject(4);
-    RealValues.AddTimestamp(builder, Timestamp);
-    RealValues.AddValues(builder, ValuesOffset);
-    RealValues.AddValueRefs(builder, ValueRefsOffset);
-    RealValues.AddInstanceName(builder, InstanceNameOffset);
-    return RealValues.EndRealValues(builder);
-  }
-
-  public static void StartRealValues(FlatBufferBuilder builder) { builder.StartObject(4); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddTimestamp(FlatBufferBuilder builder, double Timestamp) { builder.AddDouble(1, Timestamp, 0.0); }
-  public static void AddValueRefs(FlatBufferBuilder builder, VectorOffset ValueRefsOffset) { builder.AddOffset(2, ValueRefsOffset.Value, 0); }
-  public static VectorOffset CreateValueRefsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartValueRefsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddValues(FlatBufferBuilder builder, VectorOffset ValuesOffset) { builder.AddOffset(3, ValuesOffset.Value, 0); }
-  public static VectorOffset CreateValuesVector(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddDouble(data[i]); return builder.EndVector(); }
-  public static void StartValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); }
-  public static Offset<RealValues> EndRealValues(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<RealValues>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/StringValues.cs b/Network/Protocol/StringValues.cs
deleted file mode 100644
index 995df51..0000000
--- a/Network/Protocol/StringValues.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct StringValues : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static StringValues GetRootAsStringValues(ByteBuffer _bb) { return GetRootAsStringValues(_bb, new StringValues()); }
-  public static StringValues GetRootAsStringValues(ByteBuffer _bb, StringValues obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public StringValues __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public double Timestamp { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-  public uint ValueRefs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int ValueRefsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetValueRefsBytes() { return __p.__vector_as_arraysegment(8); }
-  public string Values(int j) { int o = __p.__offset(10); return o != 0 ? __p.__string(__p.__vector(o) + j * 4) : null; }
-  public int ValuesLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
-
-  public static Offset<StringValues> CreateStringValues(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      double Timestamp = 0.0,
-      VectorOffset ValueRefsOffset = default(VectorOffset),
-      VectorOffset ValuesOffset = default(VectorOffset)) {
-    builder.StartObject(4);
-    StringValues.AddTimestamp(builder, Timestamp);
-    StringValues.AddValues(builder, ValuesOffset);
-    StringValues.AddValueRefs(builder, ValueRefsOffset);
-    StringValues.AddInstanceName(builder, InstanceNameOffset);
-    return StringValues.EndStringValues(builder);
-  }
-
-  public static void StartStringValues(FlatBufferBuilder builder) { builder.StartObject(4); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddTimestamp(FlatBufferBuilder builder, double Timestamp) { builder.AddDouble(1, Timestamp, 0.0); }
-  public static void AddValueRefs(FlatBufferBuilder builder, VectorOffset ValueRefsOffset) { builder.AddOffset(2, ValueRefsOffset.Value, 0); }
-  public static VectorOffset CreateValueRefsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartValueRefsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddValues(FlatBufferBuilder builder, VectorOffset ValuesOffset) { builder.AddOffset(3, ValuesOffset.Value, 0); }
-  public static VectorOffset CreateValuesVector(FlatBufferBuilder builder, StringOffset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); }
-  public static void StartValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static Offset<StringValues> EndStringValues(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<StringValues>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/Values.cs b/Network/Protocol/Values.cs
new file mode 100644
index 0000000..65d68dc
--- /dev/null
+++ b/Network/Protocol/Values.cs
@@ -0,0 +1,91 @@
+// <auto-generated>
+//  automatically generated by the FlatBuffers compiler, do not modify
+// </auto-generated>
+
+namespace Network.Protocol
+{
+
+using global::System;
+using global::FlatBuffers;
+
+public struct Values : IFlatbufferObject
+{
+  private Table __p;
+  public ByteBuffer ByteBuffer { get { return __p.bb; } }
+  public static Values GetRootAsValues(ByteBuffer _bb) { return GetRootAsValues(_bb, new Values()); }
+  public static Values GetRootAsValues(ByteBuffer _bb, Values obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
+  public Values __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
+  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
+  public double Timestamp { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
+  public uint IntVrs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
+  public int IntVrsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
+  public ArraySegment<byte>? GetIntVrsBytes() { return __p.__vector_as_arraysegment(8); }
+  public int IntValues(int j) { int o = __p.__offset(10); return o != 0 ? __p.bb.GetInt(__p.__vector(o) + j * 4) : (int)0; }
+  public int IntValuesLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
+  public ArraySegment<byte>? GetIntValuesBytes() { return __p.__vector_as_arraysegment(10); }
+  public uint RealVrs(int j) { int o = __p.__offset(12); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
+  public int RealVrsLength { get { int o = __p.__offset(12); return o != 0 ? __p.__vector_len(o) : 0; } }
+  public ArraySegment<byte>? GetRealVrsBytes() { return __p.__vector_as_arraysegment(12); }
+  public double RealValues(int j) { int o = __p.__offset(14); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; }
+  public int RealValuesLength { get { int o = __p.__offset(14); return o != 0 ? __p.__vector_len(o) : 0; } }
+  public ArraySegment<byte>? GetRealValuesBytes() { return __p.__vector_as_arraysegment(14); }
+  public uint BoolVrs(int j) { int o = __p.__offset(16); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
+  public int BoolVrsLength { get { int o = __p.__offset(16); return o != 0 ? __p.__vector_len(o) : 0; } }
+  public ArraySegment<byte>? GetBoolVrsBytes() { return __p.__vector_as_arraysegment(16); }
+  public int BoolValues(int j) { int o = __p.__offset(18); return o != 0 ? __p.bb.GetInt(__p.__vector(o) + j * 4) : (int)0; }
+  public int BoolValuesLength { get { int o = __p.__offset(18); return o != 0 ? __p.__vector_len(o) : 0; } }
+  public ArraySegment<byte>? GetBoolValuesBytes() { return __p.__vector_as_arraysegment(18); }
+
+  public static Offset<Values> CreateValues(FlatBufferBuilder builder,
+      StringOffset InstanceNameOffset = default(StringOffset),
+      double Timestamp = 0.0,
+      VectorOffset IntVrsOffset = default(VectorOffset),
+      VectorOffset IntValuesOffset = default(VectorOffset),
+      VectorOffset RealVrsOffset = default(VectorOffset),
+      VectorOffset RealValuesOffset = default(VectorOffset),
+      VectorOffset BoolVrsOffset = default(VectorOffset),
+      VectorOffset BoolValuesOffset = default(VectorOffset)) {
+    builder.StartObject(8);
+    Values.AddTimestamp(builder, Timestamp);
+    Values.AddBoolValues(builder, BoolValuesOffset);
+    Values.AddBoolVrs(builder, BoolVrsOffset);
+    Values.AddRealValues(builder, RealValuesOffset);
+    Values.AddRealVrs(builder, RealVrsOffset);
+    Values.AddIntValues(builder, IntValuesOffset);
+    Values.AddIntVrs(builder, IntVrsOffset);
+    Values.AddInstanceName(builder, InstanceNameOffset);
+    return Values.EndValues(builder);
+  }
+
+  public static void StartValues(FlatBufferBuilder builder) { builder.StartObject(8); }
+  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
+  public static void AddTimestamp(FlatBufferBuilder builder, double Timestamp) { builder.AddDouble(1, Timestamp, 0.0); }
+  public static void AddIntVrs(FlatBufferBuilder builder, VectorOffset IntVrsOffset) { builder.AddOffset(2, IntVrsOffset.Value, 0); }
+  public static VectorOffset CreateIntVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
+  public static void StartIntVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
+  public static void AddIntValues(FlatBufferBuilder builder, VectorOffset IntValuesOffset) { builder.AddOffset(3, IntValuesOffset.Value, 0); }
+  public static VectorOffset CreateIntValuesVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); }
+  public static void StartIntValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
+  public static void AddRealVrs(FlatBufferBuilder builder, VectorOffset RealVrsOffset) { builder.AddOffset(4, RealVrsOffset.Value, 0); }
+  public static VectorOffset CreateRealVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
+  public static void StartRealVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
+  public static void AddRealValues(FlatBufferBuilder builder, VectorOffset RealValuesOffset) { builder.AddOffset(5, RealValuesOffset.Value, 0); }
+  public static VectorOffset CreateRealValuesVector(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddDouble(data[i]); return builder.EndVector(); }
+  public static void StartRealValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); }
+  public static void AddBoolVrs(FlatBufferBuilder builder, VectorOffset BoolVrsOffset) { builder.AddOffset(6, BoolVrsOffset.Value, 0); }
+  public static VectorOffset CreateBoolVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
+  public static void StartBoolVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
+  public static void AddBoolValues(FlatBufferBuilder builder, VectorOffset BoolValuesOffset) { builder.AddOffset(7, BoolValuesOffset.Value, 0); }
+  public static VectorOffset CreateBoolValuesVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); }
+  public static void StartBoolValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
+  public static Offset<Values> EndValues(FlatBufferBuilder builder) {
+    int o = builder.EndObject();
+    return new Offset<Values>(o);
+  }
+};
+
+
+}
-- 
GitLab