From 0f7159dc3dc1a619d6ffd3bf2a01f73413c62413 Mon Sep 17 00:00:00 2001 From: Eike Date: Mon, 24 Mar 2025 17:01:24 +0100 Subject: [PATCH 1/2] Giant WIP refactor --- .clang-format | 9 + .gitignore | 14 +- cosima_core/messages/message_pb2.py | 270 +- .../scenarios/communication_scenario.py | 138 +- .../simulators/communication_simulator.py | 2 +- cosima_core/simulators/omnetpp_connection.py | 2 +- cosima_omnetpp_project/.cproject | 238 - cosima_omnetpp_project/makefrag | 9 - cosima_omnetpp_project/messages/message.pb.cc | 4000 ----------------- cosima_omnetpp_project/messages/message.pb.h | 2866 ------------ cosima_omnetpp_project/modules/AgentAppTcp.cc | 614 --- cosima_omnetpp_project/modules/AgentAppUdp.cc | 193 - .../modules/CosimaScheduler.cc | 1030 ----- omnetpp/.cproject | 125 + omnetpp/.nedexclusions | 0 omnetpp/.nedfolders | 1 + omnetpp/.oppbuildspec | 4 + omnetpp/.oppfeaturestate | 2 + {cosima_omnetpp_project => omnetpp}/.project | 6 +- omnetpp/.qtenvrc | 15 + {cosima_omnetpp_project => omnetpp}/colors.h | 0 .../cosima.ini | 1 - omnetpp/makefrag | 14 + .../makemakefiles | 0 .../messages/AttackEvent.msg | 0 .../messages/AttackType.msg | 0 .../messages/ControlType.msg | 0 .../messages/CosimaApplicationChunk.msg | 0 .../messages/CosimaCtrlEvent.msg | 0 .../messages/CosimaSchedulerMessage.msg | 0 .../messages/Timer.msg | 0 .../messages/TimerType.msg | 0 .../messages/TimerType_m.cc | 71 +- .../messages/TimerType_m.h | 21 +- .../messages/Timer_m.cc | 342 +- .../messages/Timer_m.h | 26 +- omnetpp/messages/message.pb.cc | 3246 +++++++++++++ omnetpp/messages/message.pb.h | 3535 +++++++++++++++ omnetpp/modules/AgentAppTcp.cc | 742 +++ .../modules/AgentAppTcp.h | 6 + .../modules/AgentAppTcp.ned | 0 omnetpp/modules/AgentAppUdp.cc | 207 + .../modules/AgentAppUdp.h | 7 +- .../modules/AgentAppUdp.ned | 0 .../modules/CosimaScenarioManager.cc | 2 +- .../modules/CosimaScenarioManager.h | 0 .../modules/CosimaScenarioManager.ned | 0 omnetpp/modules/CosimaScheduler.cc | 1187 +++++ .../modules/CosimaScheduler.h | 54 +- .../modules/CosimaSchedulerModule.cc | 52 +- .../modules/CosimaSchedulerModule.h | 1 + .../modules/CosimaSchedulerModule.ned | 0 .../modules/attacks/Attacked_Ue.ned | 0 .../attacks/network_layer/AttackIpv4.cc | 2 +- .../attacks/network_layer/AttackIpv4.h | 0 .../attacks/network_layer/AttackIpv4.ned | 0 .../network_layer/Attack_Ipv4NetworkLayer.ned | 0 .../networks/AdHocNetwork.ned | 0 .../networks/AttackNetwork.ned | 0 .../networks/CloudNetwork.ned | 0 .../networks/DERNetwork.ned | 0 .../networks/LTE450Network.ned | 0 .../networks/LargeLTENetwork.ned | 0 .../networks/RingTopologyNetwork.ned | 0 .../networks/SimpleNetwork.ned | 34 +- .../networks/SingleCellLTE.ned | 0 .../networks/StarTopologyNetwork.ned | 0 .../networks/TrafficNetwork.ned | 0 .../networks/WifiNetwork.ned | 0 .../networks/basement.xml | 0 .../networks/demo.xml | 0 .../networks/internetCloud.xml | 0 .../networks/lte450.xml | 0 .../networks/lte450_environment.xml | 0 .../tests/gtest/AgentAppTcpTest.cc | 0 .../tests/gtest/AgentAppUdpTest.cc | 0 .../tests/gtest/MosaikScenarioManagerTest.cc | 0 .../tests/gtest/MosaikSchedulerModuleTest.cc | 0 .../tests/gtest/MosaikSchedulerTest.cc | 0 .../tests/gtest/main_test.cc | 0 .../tests/gtest/main_test.h | 0 omnetpp/util.h | 10 + .../messages => protobuf}/message.proto | 0 requirements.txt | 2 - setup.py | 2 +- tests/integration_tests/snapshot.txt | 2 +- 86 files changed, 9652 insertions(+), 9452 deletions(-) create mode 100644 .clang-format delete mode 100644 cosima_omnetpp_project/.cproject delete mode 100644 cosima_omnetpp_project/makefrag delete mode 100644 cosima_omnetpp_project/messages/message.pb.cc delete mode 100644 cosima_omnetpp_project/messages/message.pb.h delete mode 100644 cosima_omnetpp_project/modules/AgentAppTcp.cc delete mode 100644 cosima_omnetpp_project/modules/AgentAppUdp.cc delete mode 100644 cosima_omnetpp_project/modules/CosimaScheduler.cc create mode 100644 omnetpp/.cproject create mode 100644 omnetpp/.nedexclusions create mode 100644 omnetpp/.nedfolders create mode 100644 omnetpp/.oppbuildspec create mode 100644 omnetpp/.oppfeaturestate rename {cosima_omnetpp_project => omnetpp}/.project (92%) create mode 100644 omnetpp/.qtenvrc rename {cosima_omnetpp_project => omnetpp}/colors.h (100%) rename {cosima_omnetpp_project => omnetpp}/cosima.ini (99%) create mode 100644 omnetpp/makefrag rename {cosima_omnetpp_project => omnetpp}/makemakefiles (100%) rename {cosima_omnetpp_project => omnetpp}/messages/AttackEvent.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/AttackType.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/ControlType.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/CosimaApplicationChunk.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/CosimaCtrlEvent.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/CosimaSchedulerMessage.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/Timer.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/TimerType.msg (100%) rename {cosima_omnetpp_project => omnetpp}/messages/TimerType_m.cc (68%) rename {cosima_omnetpp_project => omnetpp}/messages/TimerType_m.h (52%) rename {cosima_omnetpp_project => omnetpp}/messages/Timer_m.cc (53%) rename {cosima_omnetpp_project => omnetpp}/messages/Timer_m.h (78%) create mode 100644 omnetpp/messages/message.pb.cc create mode 100644 omnetpp/messages/message.pb.h create mode 100644 omnetpp/modules/AgentAppTcp.cc rename {cosima_omnetpp_project => omnetpp}/modules/AgentAppTcp.h (95%) rename {cosima_omnetpp_project => omnetpp}/modules/AgentAppTcp.ned (100%) create mode 100644 omnetpp/modules/AgentAppUdp.cc rename {cosima_omnetpp_project => omnetpp}/modules/AgentAppUdp.h (90%) rename {cosima_omnetpp_project => omnetpp}/modules/AgentAppUdp.ned (100%) rename {cosima_omnetpp_project => omnetpp}/modules/CosimaScenarioManager.cc (99%) rename {cosima_omnetpp_project => omnetpp}/modules/CosimaScenarioManager.h (100%) rename {cosima_omnetpp_project => omnetpp}/modules/CosimaScenarioManager.ned (100%) create mode 100644 omnetpp/modules/CosimaScheduler.cc rename {cosima_omnetpp_project => omnetpp}/modules/CosimaScheduler.h (71%) rename {cosima_omnetpp_project => omnetpp}/modules/CosimaSchedulerModule.cc (59%) rename {cosima_omnetpp_project => omnetpp}/modules/CosimaSchedulerModule.h (98%) rename {cosima_omnetpp_project => omnetpp}/modules/CosimaSchedulerModule.ned (100%) rename {cosima_omnetpp_project => omnetpp}/modules/attacks/Attacked_Ue.ned (100%) rename {cosima_omnetpp_project => omnetpp}/modules/attacks/network_layer/AttackIpv4.cc (99%) rename {cosima_omnetpp_project => omnetpp}/modules/attacks/network_layer/AttackIpv4.h (100%) rename {cosima_omnetpp_project => omnetpp}/modules/attacks/network_layer/AttackIpv4.ned (100%) rename {cosima_omnetpp_project => omnetpp}/modules/attacks/network_layer/Attack_Ipv4NetworkLayer.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/AdHocNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/AttackNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/CloudNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/DERNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/LTE450Network.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/LargeLTENetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/RingTopologyNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/SimpleNetwork.ned (93%) rename {cosima_omnetpp_project => omnetpp}/networks/SingleCellLTE.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/StarTopologyNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/TrafficNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/WifiNetwork.ned (100%) rename {cosima_omnetpp_project => omnetpp}/networks/basement.xml (100%) rename {cosima_omnetpp_project => omnetpp}/networks/demo.xml (100%) rename {cosima_omnetpp_project => omnetpp}/networks/internetCloud.xml (100%) rename {cosima_omnetpp_project => omnetpp}/networks/lte450.xml (100%) rename {cosima_omnetpp_project => omnetpp}/networks/lte450_environment.xml (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/AgentAppTcpTest.cc (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/AgentAppUdpTest.cc (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/MosaikScenarioManagerTest.cc (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/MosaikSchedulerModuleTest.cc (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/MosaikSchedulerTest.cc (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/main_test.cc (100%) rename {cosima_omnetpp_project => omnetpp}/tests/gtest/main_test.h (100%) create mode 100644 omnetpp/util.h rename {cosima_core/messages => protobuf}/message.proto (100%) diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..a59f9f8 --- /dev/null +++ b/.clang-format @@ -0,0 +1,9 @@ +--- +BasedOnStyle: Mozilla +IndentWidth: 4 +--- +Language: Cpp +# Force pointers to the type for C++. +DerivePointerAlignment: false +PointerAlignment: Left +--- diff --git a/.gitignore b/.gitignore index 91a2046..773998a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ mosaik_omnetpp_files/src/results/** /cosima_omnetpp_project/out/clang-release/MosaikMessage_m.h.d /cosima_omnetpp_project/out/clang-release/MosaikMessage_m.o /cosima_omnetpp_project/.qtenvrc -/cosima_omnetpp_project/.cproject +/cosima_omnetpp_project/.cproject /cosima_omnetpp_project/.oppbuildspec *.o.d *.o @@ -32,3 +32,15 @@ mosaik_omnetpp_files/src/results/** /tests/unit_tests/simulators/.pytest_cache /tests/integration_tests/snapshot.txt /scenario_config.py + +omnetpp/out/** +omnetpp/cosima +omnetpp/cosima_dbg +omnetpp/Makefile +omnetpp/.settings/** +**/.clangd + +log.txt +omnetpp/results/** +**/*_m.h +**/*_m.cc diff --git a/cosima_core/messages/message_pb2.py b/cosima_core/messages/message_pb2.py index f620789..0e947bf 100644 --- a/cosima_core/messages/message_pb2.py +++ b/cosima_core/messages/message_pb2.py @@ -1,8 +1,7 @@ +# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: cosima_core/messages/message.proto +# source: message.proto -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -15,11 +14,12 @@ DESCRIPTOR = _descriptor.FileDescriptor( - name='cosima_core/messages/message.proto', + name='message.proto', package='', syntax='proto3', serialized_options=None, - serialized_pb=_b('\n\"cosima_core/messages/message.proto\"\x93\x01\n\x0eInitialMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\r\n\x05until\x18\x03 \x01(\x05\x12\x11\n\tstep_size\x18\x04 \x01(\x05\x12\x15\n\rlogging_level\x18\x05 \x01(\t\x12#\n\x1bmax_byte_size_per_msg_group\x18\x06 \x01(\x05\"\xb2\x01\n\x0bInfoMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x0e\n\x06sender\x18\x04 \x01(\t\x12\x10\n\x08receiver\x18\x05 \x01(\t\x12\x0c\n\x04size\x18\x06 \x01(\x05\x12\x0f\n\x07\x63ontent\x18\x07 \x01(\t\x12\x15\n\rcreation_time\x18\x08 \x01(\x05\x12\x14\n\x0cis_falsified\x18\t \x01(\x08\"\xec\x01\n\x16SynchronisationMessage\x12\x31\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1f.SynchronisationMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x13\n\x0bmax_advance\x18\x04 \x01(\x05\x12\x0f\n\x07timeout\x18\x05 \x01(\x08\x12\x16\n\x0etimeout_msg_id\x18\x06 \x01(\t\"?\n\x07MsgType\x12\x0f\n\x0bMAX_ADVANCE\x10\x00\x12\x0b\n\x07WAITING\x10\x01\x12\x16\n\x12TRANSMISSION_ERROR\x10\x02\"\xd2\x01\n\x15InfrastructureMessage\x12\x30\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1e.InfrastructureMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x15\n\rchange_module\x18\x04 \x01(\t\x12$\n\x1c\x63onnection_change_successful\x18\x05 \x01(\x08\"(\n\x07MsgType\x12\x0e\n\nDISCONNECT\x10\x00\x12\r\n\tRECONNECT\x10\x01\"\x9d\x01\n\x0eTrafficMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x10\n\x08sim_time\x18\x02 \x01(\x05\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x10\n\x08interval\x18\x07 \x01(\x05\x12\x15\n\rpacket_length\x18\x08 \x01(\x05\"\xf5\x01\n\rAttackMessage\x12(\n\x08msg_type\x18\x01 \x01(\x0e\x32\x16.AttackMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x17\n\x0f\x61ttacked_module\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x1a\n\x12\x61ttack_probability\x18\x07 \x01(\x05\"F\n\x07MsgType\x12\x0f\n\x0bPACKET_DROP\x10\x00\x12\x18\n\x14PACKET_FALSIFICATION\x10\x01\x12\x10\n\x0cPACKET_DELAY\x10\x02\"\x81\x03\n\x0e\x43osimaMsgGroup\x12)\n\x10initial_messages\x18\x01 \x03(\x0b\x32\x0f.InitialMessage\x12#\n\rinfo_messages\x18\x02 \x03(\x0b\x32\x0c.InfoMessage\x12\x39\n\x18synchronisation_messages\x18\x03 \x03(\x0b\x32\x17.SynchronisationMessage\x12\x37\n\x17infrastructure_messages\x18\x04 \x03(\x0b\x32\x16.InfrastructureMessage\x12)\n\x10traffic_messages\x18\x05 \x03(\x0b\x32\x0f.TrafficMessage\x12\'\n\x0f\x61ttack_messages\x18\x06 \x03(\x0b\x32\x0e.AttackMessage\x12\x19\n\x11\x63urrent_time_step\x18\x07 \x01(\x05\x12 \n\x18number_of_message_groups\x18\x08 \x01(\x05\x12\x1a\n\x12number_of_messages\x18\t \x01(\x05\x62\x06proto3') + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\rmessage.proto\"\x93\x01\n\x0eInitialMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\r\n\x05until\x18\x03 \x01(\x05\x12\x11\n\tstep_size\x18\x04 \x01(\x05\x12\x15\n\rlogging_level\x18\x05 \x01(\t\x12#\n\x1bmax_byte_size_per_msg_group\x18\x06 \x01(\x05\"\xb2\x01\n\x0bInfoMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x0e\n\x06sender\x18\x04 \x01(\t\x12\x10\n\x08receiver\x18\x05 \x01(\t\x12\x0c\n\x04size\x18\x06 \x01(\x05\x12\x0f\n\x07\x63ontent\x18\x07 \x01(\t\x12\x15\n\rcreation_time\x18\x08 \x01(\x05\x12\x14\n\x0cis_falsified\x18\t \x01(\x08\"\xec\x01\n\x16SynchronisationMessage\x12\x31\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1f.SynchronisationMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x13\n\x0bmax_advance\x18\x04 \x01(\x05\x12\x0f\n\x07timeout\x18\x05 \x01(\x08\x12\x16\n\x0etimeout_msg_id\x18\x06 \x01(\t\"?\n\x07MsgType\x12\x0f\n\x0bMAX_ADVANCE\x10\x00\x12\x0b\n\x07WAITING\x10\x01\x12\x16\n\x12TRANSMISSION_ERROR\x10\x02\"\xd2\x01\n\x15InfrastructureMessage\x12\x30\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1e.InfrastructureMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x15\n\rchange_module\x18\x04 \x01(\t\x12$\n\x1c\x63onnection_change_successful\x18\x05 \x01(\x08\"(\n\x07MsgType\x12\x0e\n\nDISCONNECT\x10\x00\x12\r\n\tRECONNECT\x10\x01\"\x9d\x01\n\x0eTrafficMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x10\n\x08sim_time\x18\x02 \x01(\x05\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x10\n\x08interval\x18\x07 \x01(\x05\x12\x15\n\rpacket_length\x18\x08 \x01(\x05\"\xf5\x01\n\rAttackMessage\x12(\n\x08msg_type\x18\x01 \x01(\x0e\x32\x16.AttackMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x17\n\x0f\x61ttacked_module\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x1a\n\x12\x61ttack_probability\x18\x07 \x01(\x05\"F\n\x07MsgType\x12\x0f\n\x0bPACKET_DROP\x10\x00\x12\x18\n\x14PACKET_FALSIFICATION\x10\x01\x12\x10\n\x0cPACKET_DELAY\x10\x02\"\x81\x03\n\x0e\x43osimaMsgGroup\x12)\n\x10initial_messages\x18\x01 \x03(\x0b\x32\x0f.InitialMessage\x12#\n\rinfo_messages\x18\x02 \x03(\x0b\x32\x0c.InfoMessage\x12\x39\n\x18synchronisation_messages\x18\x03 \x03(\x0b\x32\x17.SynchronisationMessage\x12\x37\n\x17infrastructure_messages\x18\x04 \x03(\x0b\x32\x16.InfrastructureMessage\x12)\n\x10traffic_messages\x18\x05 \x03(\x0b\x32\x0f.TrafficMessage\x12\'\n\x0f\x61ttack_messages\x18\x06 \x03(\x0b\x32\x0e.AttackMessage\x12\x19\n\x11\x63urrent_time_step\x18\x07 \x01(\x05\x12 \n\x18number_of_message_groups\x18\x08 \x01(\x05\x12\x1a\n\x12number_of_messages\x18\t \x01(\x05\x62\x06proto3' ) @@ -29,24 +29,28 @@ full_name='SynchronisationMessage.MsgType', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='MAX_ADVANCE', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='WAITING', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='TRANSMISSION_ERROR', index=2, number=2, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, - serialized_start=543, - serialized_end=606, + serialized_start=522, + serialized_end=585, ) _sym_db.RegisterEnumDescriptor(_SYNCHRONISATIONMESSAGE_MSGTYPE) @@ -55,20 +59,23 @@ full_name='InfrastructureMessage.MsgType', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='DISCONNECT', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='RECONNECT', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, - serialized_start=779, - serialized_end=819, + serialized_start=758, + serialized_end=798, ) _sym_db.RegisterEnumDescriptor(_INFRASTRUCTUREMESSAGE_MSGTYPE) @@ -77,24 +84,28 @@ full_name='AttackMessage.MsgType', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='PACKET_DROP', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='PACKET_FALSIFICATION', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='PACKET_DELAY', index=2, number=2, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, - serialized_start=1157, - serialized_end=1227, + serialized_start=1136, + serialized_end=1206, ) _sym_db.RegisterEnumDescriptor(_ATTACKMESSAGE_MSGTYPE) @@ -105,49 +116,50 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg_id', full_name='InitialMessage.msg_id', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='max_advance', full_name='InitialMessage.max_advance', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='until', full_name='InitialMessage.until', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='step_size', full_name='InitialMessage.step_size', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='logging_level', full_name='InitialMessage.logging_level', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='max_byte_size_per_msg_group', full_name='InitialMessage.max_byte_size_per_msg_group', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -160,8 +172,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=39, - serialized_end=186, + serialized_start=18, + serialized_end=165, ) @@ -171,70 +183,71 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg_id', full_name='InfoMessage.msg_id', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='max_advance', full_name='InfoMessage.max_advance', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sim_time', full_name='InfoMessage.sim_time', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sender', full_name='InfoMessage.sender', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='receiver', full_name='InfoMessage.receiver', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='size', full_name='InfoMessage.size', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='content', full_name='InfoMessage.content', index=6, number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='creation_time', full_name='InfoMessage.creation_time', index=7, number=8, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='is_falsified', full_name='InfoMessage.is_falsified', index=8, number=9, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -247,8 +260,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=189, - serialized_end=367, + serialized_start=168, + serialized_end=346, ) @@ -258,6 +271,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg_type', full_name='SynchronisationMessage.msg_type', index=0, @@ -265,42 +279,42 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='msg_id', full_name='SynchronisationMessage.msg_id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sim_time', full_name='SynchronisationMessage.sim_time', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='max_advance', full_name='SynchronisationMessage.max_advance', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='timeout', full_name='SynchronisationMessage.timeout', index=4, number=5, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='timeout_msg_id', full_name='SynchronisationMessage.timeout_msg_id', index=5, number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -314,8 +328,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=370, - serialized_end=606, + serialized_start=349, + serialized_end=585, ) @@ -325,6 +339,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg_type', full_name='InfrastructureMessage.msg_type', index=0, @@ -332,35 +347,35 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='msg_id', full_name='InfrastructureMessage.msg_id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sim_time', full_name='InfrastructureMessage.sim_time', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='change_module', full_name='InfrastructureMessage.change_module', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='connection_change_successful', full_name='InfrastructureMessage.connection_change_successful', index=4, number=5, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -374,8 +389,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=609, - serialized_end=819, + serialized_start=588, + serialized_end=798, ) @@ -385,63 +400,64 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg_id', full_name='TrafficMessage.msg_id', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sim_time', full_name='TrafficMessage.sim_time', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='source', full_name='TrafficMessage.source', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='destination', full_name='TrafficMessage.destination', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='start', full_name='TrafficMessage.start', index=4, number=5, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='stop', full_name='TrafficMessage.stop', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='interval', full_name='TrafficMessage.interval', index=6, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='packet_length', full_name='TrafficMessage.packet_length', index=7, number=8, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -454,8 +470,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=822, - serialized_end=979, + serialized_start=801, + serialized_end=958, ) @@ -465,6 +481,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='msg_type', full_name='AttackMessage.msg_type', index=0, @@ -472,49 +489,49 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='msg_id', full_name='AttackMessage.msg_id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='sim_time', full_name='AttackMessage.sim_time', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='attacked_module', full_name='AttackMessage.attacked_module', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='start', full_name='AttackMessage.start', index=4, number=5, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='stop', full_name='AttackMessage.stop', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='attack_probability', full_name='AttackMessage.attack_probability', index=6, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -528,8 +545,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=982, - serialized_end=1227, + serialized_start=961, + serialized_end=1206, ) @@ -539,6 +556,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='initial_messages', full_name='CosimaMsgGroup.initial_messages', index=0, @@ -546,63 +564,63 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='info_messages', full_name='CosimaMsgGroup.info_messages', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='synchronisation_messages', full_name='CosimaMsgGroup.synchronisation_messages', index=2, number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='infrastructure_messages', full_name='CosimaMsgGroup.infrastructure_messages', index=3, number=4, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='traffic_messages', full_name='CosimaMsgGroup.traffic_messages', index=4, number=5, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='attack_messages', full_name='CosimaMsgGroup.attack_messages', index=5, number=6, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='current_time_step', full_name='CosimaMsgGroup.current_time_step', index=6, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='number_of_message_groups', full_name='CosimaMsgGroup.number_of_message_groups', index=7, number=8, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='number_of_messages', full_name='CosimaMsgGroup.number_of_messages', index=8, number=9, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -615,8 +633,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1230, - serialized_end=1615, + serialized_start=1209, + serialized_end=1594, ) _SYNCHRONISATIONMESSAGE.fields_by_name['msg_type'].enum_type = _SYNCHRONISATIONMESSAGE_MSGTYPE @@ -640,53 +658,53 @@ DESCRIPTOR.message_types_by_name['CosimaMsgGroup'] = _COSIMAMSGGROUP _sym_db.RegisterFileDescriptor(DESCRIPTOR) -InitialMessage = _reflection.GeneratedProtocolMessageType('InitialMessage', (_message.Message,), dict( - DESCRIPTOR = _INITIALMESSAGE, - __module__ = 'cosima_core.messages.message_pb2' +InitialMessage = _reflection.GeneratedProtocolMessageType('InitialMessage', (_message.Message,), { + 'DESCRIPTOR' : _INITIALMESSAGE, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:InitialMessage) - )) + }) _sym_db.RegisterMessage(InitialMessage) -InfoMessage = _reflection.GeneratedProtocolMessageType('InfoMessage', (_message.Message,), dict( - DESCRIPTOR = _INFOMESSAGE, - __module__ = 'cosima_core.messages.message_pb2' +InfoMessage = _reflection.GeneratedProtocolMessageType('InfoMessage', (_message.Message,), { + 'DESCRIPTOR' : _INFOMESSAGE, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:InfoMessage) - )) + }) _sym_db.RegisterMessage(InfoMessage) -SynchronisationMessage = _reflection.GeneratedProtocolMessageType('SynchronisationMessage', (_message.Message,), dict( - DESCRIPTOR = _SYNCHRONISATIONMESSAGE, - __module__ = 'cosima_core.messages.message_pb2' +SynchronisationMessage = _reflection.GeneratedProtocolMessageType('SynchronisationMessage', (_message.Message,), { + 'DESCRIPTOR' : _SYNCHRONISATIONMESSAGE, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:SynchronisationMessage) - )) + }) _sym_db.RegisterMessage(SynchronisationMessage) -InfrastructureMessage = _reflection.GeneratedProtocolMessageType('InfrastructureMessage', (_message.Message,), dict( - DESCRIPTOR = _INFRASTRUCTUREMESSAGE, - __module__ = 'cosima_core.messages.message_pb2' +InfrastructureMessage = _reflection.GeneratedProtocolMessageType('InfrastructureMessage', (_message.Message,), { + 'DESCRIPTOR' : _INFRASTRUCTUREMESSAGE, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:InfrastructureMessage) - )) + }) _sym_db.RegisterMessage(InfrastructureMessage) -TrafficMessage = _reflection.GeneratedProtocolMessageType('TrafficMessage', (_message.Message,), dict( - DESCRIPTOR = _TRAFFICMESSAGE, - __module__ = 'cosima_core.messages.message_pb2' +TrafficMessage = _reflection.GeneratedProtocolMessageType('TrafficMessage', (_message.Message,), { + 'DESCRIPTOR' : _TRAFFICMESSAGE, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:TrafficMessage) - )) + }) _sym_db.RegisterMessage(TrafficMessage) -AttackMessage = _reflection.GeneratedProtocolMessageType('AttackMessage', (_message.Message,), dict( - DESCRIPTOR = _ATTACKMESSAGE, - __module__ = 'cosima_core.messages.message_pb2' +AttackMessage = _reflection.GeneratedProtocolMessageType('AttackMessage', (_message.Message,), { + 'DESCRIPTOR' : _ATTACKMESSAGE, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:AttackMessage) - )) + }) _sym_db.RegisterMessage(AttackMessage) -CosimaMsgGroup = _reflection.GeneratedProtocolMessageType('CosimaMsgGroup', (_message.Message,), dict( - DESCRIPTOR = _COSIMAMSGGROUP, - __module__ = 'cosima_core.messages.message_pb2' +CosimaMsgGroup = _reflection.GeneratedProtocolMessageType('CosimaMsgGroup', (_message.Message,), { + 'DESCRIPTOR' : _COSIMAMSGGROUP, + '__module__' : 'message_pb2' # @@protoc_insertion_point(class_scope:CosimaMsgGroup) - )) + }) _sym_db.RegisterMessage(CosimaMsgGroup) diff --git a/cosima_core/scenarios/communication_scenario.py b/cosima_core/scenarios/communication_scenario.py index a72c541..e508d09 100644 --- a/cosima_core/scenarios/communication_scenario.py +++ b/cosima_core/scenarios/communication_scenario.py @@ -1,105 +1,125 @@ import random import string +from householdsim.mosaik import meta as household_meta + import cosima_core.util.general_config as cfg import scenario_config from cosima_core.util.scenario_setup_util import ScenarioHelper from cosima_core.util.util_functions import get_host_names -from householdsim.mosaik import meta as household_meta # agents send messages parallel with given offset PARALLEL = True OFFSET = 1 # connect pv plant to agent? -AGENTS_WITH_PV_PLANT = ['client0', 'client1'] +AGENTS_WITH_PV_PLANT = ["client0", "client1"] # connect household to agent -AGENTS_WITH_HOUSEHOLDS = ['client1'] +AGENTS_WITH_HOUSEHOLDS = ["client1"] # configure how long an agent "calculates" (->sleeps) in its get data method # (in seconds), default should be 0 -CALCULATING_TIMES = { - 'client0': 0, - 'client1': 0, - 'client2': 0 -} +CALCULATING_TIMES = {"client0": 0, "client1": 0, "client2": 0} # length of the content string sent by the agents CONTENT_LENGTH = None -CONTENT_PATH = cfg.ROOT_PATH / 'simulators' / 'tic_toc_example' / 'content.csv' +CONTENT_PATH = cfg.ROOT_PATH / "simulators" / "tic_toc_example" / "content.csv" def main(): # Simulation configuration -> tells mosaik where to find the simulators sim_config = { - 'Collector': { - 'python': 'cosima_core.simulators.collector:Collector'}, - 'Agent': { - 'python': 'cosima_core.simulators.tic_toc_example.agent_simulator:Agent'}, - 'ICTController': { - 'python': 'cosima_core.simulators.ict_controller_simulator:ICTController'}, - 'CSV': {'python': 'cosima_core.simulators.tic_toc_example.mosaik_csv:CSV'}, - 'Household': {'python': 'householdsim.mosaik:HouseholdSim'}, + "Collector": {"python": "cosima_core.simulators.collector:Collector"}, + "Agent": { + "python": "cosima_core.simulators.tic_toc_example.agent_simulator:Agent" + }, + "ICTController": { + "python": "cosima_core.simulators.ict_controller_simulator:ICTController" + }, + "CSV": {"python": "cosima_core.simulators.tic_toc_example.mosaik_csv:CSV"}, + "Household": {"python": "householdsim.mosaik:HouseholdSim"}, } scenario_helper = ScenarioHelper() - world, communication_simulator, client_attribute_mapping, sim_config = \ + world, communication_simulator, client_attribute_mapping, sim_config = ( scenario_helper.prepare_scenario(sim_config=sim_config) + ) if CONTENT_LENGTH: - message_content = ''.join(random.choices(string.ascii_lowercase + string.digits, k=CONTENT_LENGTH)) + message_content = "".join( + random.choices(string.ascii_lowercase + string.digits, k=CONTENT_LENGTH) + ) else: message_content = None - use_ict_simulator = (len(scenario_config.INFRASTRUCTURE_CHANGES) > 0 - or len(scenario_config.TRAFFIC_CONFIGURATION) > 0 - or len(scenario_config.ATTACK_CONFIGURATION) > 0) and \ - scenario_config.USE_COMMUNICATION_SIMULATION + use_ict_simulator = ( + len(scenario_config.INFRASTRUCTURE_CHANGES) > 0 + or len(scenario_config.TRAFFIC_CONFIGURATION) > 0 + or len(scenario_config.ATTACK_CONFIGURATION) > 0 + ) and scenario_config.USE_COMMUNICATION_SIMULATION agents = {} - collector = world.start('Collector').Monitor() - agent_prefix = 'client' + collector = world.start("Collector").Monitor() + agent_prefix = "client" if use_ict_simulator: - ict_controller = world.start('ICTController', - infrastructure_changes=scenario_config.INFRASTRUCTURE_CHANGES, - traffic_configuration=scenario_config.TRAFFIC_CONFIGURATION).ICT() + ict_controller = world.start( + "ICTController", + infrastructure_changes=scenario_config.INFRASTRUCTURE_CHANGES, + traffic_configuration=scenario_config.TRAFFIC_CONFIGURATION, + ).ICT() for idx in range(scenario_config.NUMBER_OF_AGENTS): current_agent_name = agent_prefix + str(idx) - agents[current_agent_name] = world.start('Agent', - agent_name=current_agent_name, - content_path=CONTENT_PATH, - agent_names= - get_host_names( - num_hosts=scenario_config.NUMBER_OF_AGENTS), - parallel=PARALLEL, - offset=OFFSET, - message_content=message_content).A() + agents[current_agent_name] = world.start( + "Agent", + agent_name=current_agent_name, + content_path=CONTENT_PATH, + agent_names=get_host_names(num_hosts=scenario_config.NUMBER_OF_AGENTS), + parallel=PARALLEL, + offset=OFFSET, + message_content=message_content, + ).A() if len(AGENTS_WITH_PV_PLANT) > 0: - pv_sim = world.start('CSV', sim_start=cfg.START, datafile=cfg.PV_DATA, - delimiter=',', mosaik_attrs=['ACK', 'P']) + pv_sim = world.start( + "CSV", + sim_start=cfg.START, + datafile=cfg.PV_DATA, + delimiter=",", + mosaik_attrs=["ACK", "P"], + ) pv_models = pv_sim.PV.create(len(AGENTS_WITH_PV_PLANT)) if len(AGENTS_WITH_HOUSEHOLDS) > 0: - household_meta['models']['ResidentialLoads']['attrs'].append('LOAD_ACK') - household_meta['type'] = 'event-based' + household_meta["models"]["ResidentialLoads"]["attrs"].append("LOAD_ACK") + household_meta["type"] = "event-based" - household_sim = world.start('Household') - houses = household_sim.ResidentialLoads.create(1, sim_start=cfg.START, - profile_file=cfg.HOUSEHOLD_DATA, - grid_name="medium grid")[0] + household_sim = world.start("Household") + houses = household_sim.ResidentialLoads.create( + 1, + sim_start=cfg.START, + profile_file=cfg.HOUSEHOLD_DATA, + grid_name="medium grid", + )[0] for idx, agent in enumerate(agents.values()): if agent.eid in AGENTS_WITH_PV_PLANT: - world.connect(pv_models[idx], agents[agent.eid], 'P', time_shifted=True, initial_data={'P': 0}) - world.connect(agents[agent.eid], pv_models[idx], 'ACK') + world.connect( + pv_models[idx], + agents[agent.eid], + "P", + time_shifted=True, + initial_data={"P": 0}, + ) + world.connect(agents[agent.eid], pv_models[idx], "ACK") world.set_initial_event(pv_models[idx].sid) if agent.eid in AGENTS_WITH_HOUSEHOLDS: - world.connect(houses.children[idx], agents[agent.eid], ('P_out', 'P'), weak=True) - world.connect(agents[agent.eid], houses, 'LOAD_ACK') + world.connect( + houses.children[idx], agents[agent.eid], ("P_out", "P"), weak=True + ) + world.connect(agents[agent.eid], houses, "LOAD_ACK") world.set_initial_event(houses.sid) else: world.set_initial_event(agent.sid, time=0) @@ -108,29 +128,29 @@ def main(): world.set_initial_event(ict_controller.sid) if PARALLEL: - world.set_initial_event(agents['client1'].sid, time=OFFSET) + world.set_initial_event(agents["client1"].sid, time=OFFSET) for agent_name, agent in agents.items(): # connect agents with communication_models - world.connect(agent, communication_simulator, f'message', weak=True) + world.connect(agent, communication_simulator, f"message", weak=True) if use_ict_simulator: # connect ict controller to collector - world.connect(ict_controller, collector, f'ict_message') + world.connect(ict_controller, collector, f"ict_message") # connect ict controller with communication_simulator - world.connect(ict_controller, communication_simulator, f'ict_message', weak=True) - world.connect(communication_simulator, ict_controller, f'ctrl_message') + world.connect( + ict_controller, communication_simulator, f"ict_message", weak=True + ) + world.connect(communication_simulator, ict_controller, f"ctrl_message") for client_name, attr in client_attribute_mapping.items(): # connect communication_models with agents - world.connect(communication_simulator, agents[client_name], - attr) - world.connect(communication_simulator, collector, - attr) + world.connect(communication_simulator, agents[client_name], attr) + world.connect(communication_simulator, collector, attr) scenario_helper.run_simulation() scenario_helper.shutdown_simulation() -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/cosima_core/simulators/communication_simulator.py b/cosima_core/simulators/communication_simulator.py index 45e9025..06e0a08 100644 --- a/cosima_core/simulators/communication_simulator.py +++ b/cosima_core/simulators/communication_simulator.py @@ -230,7 +230,7 @@ def send_message_to_omnetpp(self, messages): """ proto_messages, message_count, msg_ids = create_protobuf_messages(messages, self._current_time) equal_entries = [entry for entry in msg_ids if entry in self._sent_msgs_ids] - if len(equal_entries) != 0: + if equal_entries: raise Exception(f'Message ID {equal_entries} has already been sent! Please use unique ids.') self._sent_msgs_ids.extend(msg_ids) serialized_messages = list() diff --git a/cosima_core/simulators/omnetpp_connection.py b/cosima_core/simulators/omnetpp_connection.py index 52e0be2..d792db8 100644 --- a/cosima_core/simulators/omnetpp_connection.py +++ b/cosima_core/simulators/omnetpp_connection.py @@ -57,7 +57,7 @@ def close_connection(self): os.system('fuser -k 4243/tcp') def send_messages(self, messages): - sender_threads = list() + sender_threads = [] for message in messages: sender_thread = threading.Thread(target=self.sender, args=(message,), daemon=True) sender_threads.append(sender_thread) diff --git a/cosima_omnetpp_project/.cproject b/cosima_omnetpp_project/.cproject deleted file mode 100644 index 9a01187..0000000 --- a/cosima_omnetpp_project/.cproject +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cosima_omnetpp_project/makefrag b/cosima_omnetpp_project/makefrag deleted file mode 100644 index 0abc76c..0000000 --- a/cosima_omnetpp_project/makefrag +++ /dev/null @@ -1,9 +0,0 @@ -# -# Customize Makefile to link with winsoc on windows -# but without the user interface libs (oppenvir, oppcmdenv, opptkenv) -# - -ifeq ($(PLATFORM),win32.x86_64) -OMNETPP_LIBS += -lwsock32 -endif -MSGC:=$(MSGC) --msg6 \ No newline at end of file diff --git a/cosima_omnetpp_project/messages/message.pb.cc b/cosima_omnetpp_project/messages/message.pb.cc deleted file mode 100644 index 2066464..0000000 --- a/cosima_omnetpp_project/messages/message.pb.cc +++ /dev/null @@ -1,4000 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: cosima_core/messages/message.proto - -#include "message.pb.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -// This is a temporary google only hack -#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS -#include "third_party/protobuf/version.h" -#endif -// @@protoc_insertion_point(includes) - -namespace protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto { -extern PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_AttackMessage; -extern PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_InfoMessage; -extern PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_InfrastructureMessage; -extern PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_InitialMessage; -extern PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_SynchronisationMessage; -extern PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TrafficMessage; -} // namespace protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto -class InitialMessageDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _InitialMessage_default_instance_; -class InfoMessageDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _InfoMessage_default_instance_; -class SynchronisationMessageDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _SynchronisationMessage_default_instance_; -class InfrastructureMessageDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _InfrastructureMessage_default_instance_; -class TrafficMessageDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _TrafficMessage_default_instance_; -class AttackMessageDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _AttackMessage_default_instance_; -class CosimaMsgGroupDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed - _instance; -} _CosimaMsgGroup_default_instance_; -namespace protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto { -static void InitDefaultsInitialMessage() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_InitialMessage_default_instance_; - new (ptr) ::InitialMessage(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::InitialMessage::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_InitialMessage = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsInitialMessage}, {}}; - -static void InitDefaultsInfoMessage() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_InfoMessage_default_instance_; - new (ptr) ::InfoMessage(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::InfoMessage::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_InfoMessage = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsInfoMessage}, {}}; - -static void InitDefaultsSynchronisationMessage() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_SynchronisationMessage_default_instance_; - new (ptr) ::SynchronisationMessage(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::SynchronisationMessage::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_SynchronisationMessage = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsSynchronisationMessage}, {}}; - -static void InitDefaultsInfrastructureMessage() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_InfrastructureMessage_default_instance_; - new (ptr) ::InfrastructureMessage(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::InfrastructureMessage::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_InfrastructureMessage = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsInfrastructureMessage}, {}}; - -static void InitDefaultsTrafficMessage() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_TrafficMessage_default_instance_; - new (ptr) ::TrafficMessage(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::TrafficMessage::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_TrafficMessage = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTrafficMessage}, {}}; - -static void InitDefaultsAttackMessage() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_AttackMessage_default_instance_; - new (ptr) ::AttackMessage(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::AttackMessage::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_AttackMessage = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsAttackMessage}, {}}; - -static void InitDefaultsCosimaMsgGroup() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::_CosimaMsgGroup_default_instance_; - new (ptr) ::CosimaMsgGroup(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::CosimaMsgGroup::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<6> scc_info_CosimaMsgGroup = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 6, InitDefaultsCosimaMsgGroup}, { - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InitialMessage.base, - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InfoMessage.base, - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_SynchronisationMessage.base, - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InfrastructureMessage.base, - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_TrafficMessage.base, - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_AttackMessage.base,}}; - -void InitDefaults() { - ::google::protobuf::internal::InitSCC(&scc_info_InitialMessage.base); - ::google::protobuf::internal::InitSCC(&scc_info_InfoMessage.base); - ::google::protobuf::internal::InitSCC(&scc_info_SynchronisationMessage.base); - ::google::protobuf::internal::InitSCC(&scc_info_InfrastructureMessage.base); - ::google::protobuf::internal::InitSCC(&scc_info_TrafficMessage.base); - ::google::protobuf::internal::InitSCC(&scc_info_AttackMessage.base); - ::google::protobuf::internal::InitSCC(&scc_info_CosimaMsgGroup.base); -} - -::google::protobuf::Metadata file_level_metadata[7]; -const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[3]; - -const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, msg_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, max_advance_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, until_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, step_size_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, logging_level_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InitialMessage, max_byte_size_per_msg_group_), - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, msg_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, max_advance_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, sim_time_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, sender_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, receiver_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, size_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, content_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, creation_time_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfoMessage, is_falsified_), - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, msg_type_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, msg_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, sim_time_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, max_advance_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, timeout_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::SynchronisationMessage, timeout_msg_id_), - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfrastructureMessage, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfrastructureMessage, msg_type_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfrastructureMessage, msg_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfrastructureMessage, sim_time_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfrastructureMessage, change_module_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::InfrastructureMessage, connection_change_successful_), - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, msg_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, sim_time_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, source_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, destination_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, start_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, stop_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, interval_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::TrafficMessage, packet_length_), - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, msg_type_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, msg_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, sim_time_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, attacked_module_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, start_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, stop_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::AttackMessage, attack_probability_), - ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, initial_messages_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, info_messages_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, synchronisation_messages_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, infrastructure_messages_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, traffic_messages_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, attack_messages_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, current_time_step_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, number_of_message_groups_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::CosimaMsgGroup, number_of_messages_), -}; -static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, sizeof(::InitialMessage)}, - { 11, -1, sizeof(::InfoMessage)}, - { 25, -1, sizeof(::SynchronisationMessage)}, - { 36, -1, sizeof(::InfrastructureMessage)}, - { 46, -1, sizeof(::TrafficMessage)}, - { 59, -1, sizeof(::AttackMessage)}, - { 71, -1, sizeof(::CosimaMsgGroup)}, -}; - -static ::google::protobuf::Message const * const file_default_instances[] = { - reinterpret_cast(&::_InitialMessage_default_instance_), - reinterpret_cast(&::_InfoMessage_default_instance_), - reinterpret_cast(&::_SynchronisationMessage_default_instance_), - reinterpret_cast(&::_InfrastructureMessage_default_instance_), - reinterpret_cast(&::_TrafficMessage_default_instance_), - reinterpret_cast(&::_AttackMessage_default_instance_), - reinterpret_cast(&::_CosimaMsgGroup_default_instance_), -}; - -void protobuf_AssignDescriptors() { - AddDescriptors(); - AssignDescriptors( - "cosima_core/messages/message.proto", schemas, file_default_instances, TableStruct::offsets, - file_level_metadata, file_level_enum_descriptors, NULL); -} - -void protobuf_AssignDescriptorsOnce() { - static ::google::protobuf::internal::once_flag once; - ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors); -} - -void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD; -void protobuf_RegisterTypes(const ::std::string&) { - protobuf_AssignDescriptorsOnce(); - ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 7); -} - -void AddDescriptorsImpl() { - InitDefaults(); - static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { - "\n\"cosima_core/messages/message.proto\"\223\001\n" - "\016InitialMessage\022\016\n\006msg_id\030\001 \001(\t\022\023\n\013max_a" - "dvance\030\002 \001(\005\022\r\n\005until\030\003 \001(\005\022\021\n\tstep_size" - "\030\004 \001(\005\022\025\n\rlogging_level\030\005 \001(\t\022#\n\033max_byt" - "e_size_per_msg_group\030\006 \001(\005\"\262\001\n\013InfoMessa" - "ge\022\016\n\006msg_id\030\001 \001(\t\022\023\n\013max_advance\030\002 \001(\005\022" - "\020\n\010sim_time\030\003 \001(\005\022\016\n\006sender\030\004 \001(\t\022\020\n\010rec" - "eiver\030\005 \001(\t\022\014\n\004size\030\006 \001(\005\022\017\n\007content\030\007 \001" - "(\t\022\025\n\rcreation_time\030\010 \001(\005\022\024\n\014is_falsifie" - "d\030\t \001(\010\"\354\001\n\026SynchronisationMessage\0221\n\010ms" - "g_type\030\001 \001(\0162\037.SynchronisationMessage.Ms" - "gType\022\016\n\006msg_id\030\002 \001(\t\022\020\n\010sim_time\030\003 \001(\005\022" - "\023\n\013max_advance\030\004 \001(\005\022\017\n\007timeout\030\005 \001(\010\022\026\n" - "\016timeout_msg_id\030\006 \001(\t\"\?\n\007MsgType\022\017\n\013MAX_" - "ADVANCE\020\000\022\013\n\007WAITING\020\001\022\026\n\022TRANSMISSION_E" - "RROR\020\002\"\322\001\n\025InfrastructureMessage\0220\n\010msg_" - "type\030\001 \001(\0162\036.InfrastructureMessage.MsgTy" - "pe\022\016\n\006msg_id\030\002 \001(\t\022\020\n\010sim_time\030\003 \001(\005\022\025\n\r" - "change_module\030\004 \001(\t\022$\n\034connection_change" - "_successful\030\005 \001(\010\"(\n\007MsgType\022\016\n\nDISCONNE" - "CT\020\000\022\r\n\tRECONNECT\020\001\"\235\001\n\016TrafficMessage\022\016" - "\n\006msg_id\030\001 \001(\t\022\020\n\010sim_time\030\002 \001(\005\022\016\n\006sour" - "ce\030\003 \001(\t\022\023\n\013destination\030\004 \001(\t\022\r\n\005start\030\005" - " \001(\005\022\014\n\004stop\030\006 \001(\005\022\020\n\010interval\030\007 \001(\005\022\025\n\r" - "packet_length\030\010 \001(\005\"\365\001\n\rAttackMessage\022(\n" - "\010msg_type\030\001 \001(\0162\026.AttackMessage.MsgType\022" - "\016\n\006msg_id\030\002 \001(\t\022\020\n\010sim_time\030\003 \001(\005\022\027\n\017att" - "acked_module\030\004 \001(\t\022\r\n\005start\030\005 \001(\005\022\014\n\004sto" - "p\030\006 \001(\005\022\032\n\022attack_probability\030\007 \001(\005\"F\n\007M" - "sgType\022\017\n\013PACKET_DROP\020\000\022\030\n\024PACKET_FALSIF" - "ICATION\020\001\022\020\n\014PACKET_DELAY\020\002\"\201\003\n\016CosimaMs" - "gGroup\022)\n\020initial_messages\030\001 \003(\0132\017.Initi" - "alMessage\022#\n\rinfo_messages\030\002 \003(\0132\014.InfoM" - "essage\0229\n\030synchronisation_messages\030\003 \003(\013" - "2\027.SynchronisationMessage\0227\n\027infrastruct" - "ure_messages\030\004 \003(\0132\026.InfrastructureMessa" - "ge\022)\n\020traffic_messages\030\005 \003(\0132\017.TrafficMe" - "ssage\022\'\n\017attack_messages\030\006 \003(\0132\016.AttackM" - "essage\022\031\n\021current_time_step\030\007 \001(\005\022 \n\030num" - "ber_of_message_groups\030\010 \001(\005\022\032\n\022number_of" - "_messages\030\t \001(\005b\006proto3" - }; - ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - descriptor, 1623); - ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( - "cosima_core/messages/message.proto", &protobuf_RegisterTypes); -} - -void AddDescriptors() { - static ::google::protobuf::internal::once_flag once; - ::google::protobuf::internal::call_once(once, AddDescriptorsImpl); -} -// Force AddDescriptors() to be called at dynamic initialization time. -struct StaticDescriptorInitializer { - StaticDescriptorInitializer() { - AddDescriptors(); - } -} static_descriptor_initializer; -} // namespace protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto -const ::google::protobuf::EnumDescriptor* SynchronisationMessage_MsgType_descriptor() { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_enum_descriptors[0]; -} -bool SynchronisationMessage_MsgType_IsValid(int value) { - switch (value) { - case 0: - case 1: - case 2: - return true; - default: - return false; - } -} - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const SynchronisationMessage_MsgType SynchronisationMessage::MAX_ADVANCE; -const SynchronisationMessage_MsgType SynchronisationMessage::WAITING; -const SynchronisationMessage_MsgType SynchronisationMessage::TRANSMISSION_ERROR; -const SynchronisationMessage_MsgType SynchronisationMessage::MsgType_MIN; -const SynchronisationMessage_MsgType SynchronisationMessage::MsgType_MAX; -const int SynchronisationMessage::MsgType_ARRAYSIZE; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 -const ::google::protobuf::EnumDescriptor* InfrastructureMessage_MsgType_descriptor() { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_enum_descriptors[1]; -} -bool InfrastructureMessage_MsgType_IsValid(int value) { - switch (value) { - case 0: - case 1: - return true; - default: - return false; - } -} - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const InfrastructureMessage_MsgType InfrastructureMessage::DISCONNECT; -const InfrastructureMessage_MsgType InfrastructureMessage::RECONNECT; -const InfrastructureMessage_MsgType InfrastructureMessage::MsgType_MIN; -const InfrastructureMessage_MsgType InfrastructureMessage::MsgType_MAX; -const int InfrastructureMessage::MsgType_ARRAYSIZE; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 -const ::google::protobuf::EnumDescriptor* AttackMessage_MsgType_descriptor() { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_enum_descriptors[2]; -} -bool AttackMessage_MsgType_IsValid(int value) { - switch (value) { - case 0: - case 1: - case 2: - return true; - default: - return false; - } -} - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const AttackMessage_MsgType AttackMessage::PACKET_DROP; -const AttackMessage_MsgType AttackMessage::PACKET_FALSIFICATION; -const AttackMessage_MsgType AttackMessage::PACKET_DELAY; -const AttackMessage_MsgType AttackMessage::MsgType_MIN; -const AttackMessage_MsgType AttackMessage::MsgType_MAX; -const int AttackMessage::MsgType_ARRAYSIZE; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -// =================================================================== - -void InitialMessage::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int InitialMessage::kMsgIdFieldNumber; -const int InitialMessage::kMaxAdvanceFieldNumber; -const int InitialMessage::kUntilFieldNumber; -const int InitialMessage::kStepSizeFieldNumber; -const int InitialMessage::kLoggingLevelFieldNumber; -const int InitialMessage::kMaxByteSizePerMsgGroupFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -InitialMessage::InitialMessage() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InitialMessage.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:InitialMessage) -} -InitialMessage::InitialMessage(const InitialMessage& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.msg_id().size() > 0) { - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - logging_level_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.logging_level().size() > 0) { - logging_level_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.logging_level_); - } - ::memcpy(&max_advance_, &from.max_advance_, - static_cast(reinterpret_cast(&max_byte_size_per_msg_group_) - - reinterpret_cast(&max_advance_)) + sizeof(max_byte_size_per_msg_group_)); - // @@protoc_insertion_point(copy_constructor:InitialMessage) -} - -void InitialMessage::SharedCtor() { - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - logging_level_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&max_advance_, 0, static_cast( - reinterpret_cast(&max_byte_size_per_msg_group_) - - reinterpret_cast(&max_advance_)) + sizeof(max_byte_size_per_msg_group_)); -} - -InitialMessage::~InitialMessage() { - // @@protoc_insertion_point(destructor:InitialMessage) - SharedDtor(); -} - -void InitialMessage::SharedDtor() { - msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - logging_level_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void InitialMessage::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* InitialMessage::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const InitialMessage& InitialMessage::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InitialMessage.base); - return *internal_default_instance(); -} - - -void InitialMessage::Clear() { -// @@protoc_insertion_point(message_clear_start:InitialMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - logging_level_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&max_advance_, 0, static_cast( - reinterpret_cast(&max_byte_size_per_msg_group_) - - reinterpret_cast(&max_advance_)) + sizeof(max_byte_size_per_msg_group_)); - _internal_metadata_.Clear(); -} - -bool InitialMessage::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:InitialMessage) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // string msg_id = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InitialMessage.msg_id")); - } else { - goto handle_unusual; - } - break; - } - - // int32 max_advance = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &max_advance_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 until = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &until_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 step_size = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &step_size_))); - } else { - goto handle_unusual; - } - break; - } - - // string logging_level = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_logging_level())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->logging_level().data(), static_cast(this->logging_level().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InitialMessage.logging_level")); - } else { - goto handle_unusual; - } - break; - } - - // int32 max_byte_size_per_msg_group = 6; - case 6: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &max_byte_size_per_msg_group_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:InitialMessage) - return true; -failure: - // @@protoc_insertion_point(parse_failure:InitialMessage) - return false; -#undef DO_ -} - -void InitialMessage::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:InitialMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string msg_id = 1; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InitialMessage.msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->msg_id(), output); - } - - // int32 max_advance = 2; - if (this->max_advance() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->max_advance(), output); - } - - // int32 until = 3; - if (this->until() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->until(), output); - } - - // int32 step_size = 4; - if (this->step_size() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->step_size(), output); - } - - // string logging_level = 5; - if (this->logging_level().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->logging_level().data(), static_cast(this->logging_level().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InitialMessage.logging_level"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 5, this->logging_level(), output); - } - - // int32 max_byte_size_per_msg_group = 6; - if (this->max_byte_size_per_msg_group() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->max_byte_size_per_msg_group(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:InitialMessage) -} - -::google::protobuf::uint8* InitialMessage::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:InitialMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string msg_id = 1; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InitialMessage.msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->msg_id(), target); - } - - // int32 max_advance = 2; - if (this->max_advance() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->max_advance(), target); - } - - // int32 until = 3; - if (this->until() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->until(), target); - } - - // int32 step_size = 4; - if (this->step_size() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(4, this->step_size(), target); - } - - // string logging_level = 5; - if (this->logging_level().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->logging_level().data(), static_cast(this->logging_level().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InitialMessage.logging_level"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 5, this->logging_level(), target); - } - - // int32 max_byte_size_per_msg_group = 6; - if (this->max_byte_size_per_msg_group() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(6, this->max_byte_size_per_msg_group(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:InitialMessage) - return target; -} - -size_t InitialMessage::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:InitialMessage) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // string msg_id = 1; - if (this->msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->msg_id()); - } - - // string logging_level = 5; - if (this->logging_level().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->logging_level()); - } - - // int32 max_advance = 2; - if (this->max_advance() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->max_advance()); - } - - // int32 until = 3; - if (this->until() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->until()); - } - - // int32 step_size = 4; - if (this->step_size() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->step_size()); - } - - // int32 max_byte_size_per_msg_group = 6; - if (this->max_byte_size_per_msg_group() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->max_byte_size_per_msg_group()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void InitialMessage::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:InitialMessage) - GOOGLE_DCHECK_NE(&from, this); - const InitialMessage* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:InitialMessage) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:InitialMessage) - MergeFrom(*source); - } -} - -void InitialMessage::MergeFrom(const InitialMessage& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:InitialMessage) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg_id().size() > 0) { - - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - if (from.logging_level().size() > 0) { - - logging_level_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.logging_level_); - } - if (from.max_advance() != 0) { - set_max_advance(from.max_advance()); - } - if (from.until() != 0) { - set_until(from.until()); - } - if (from.step_size() != 0) { - set_step_size(from.step_size()); - } - if (from.max_byte_size_per_msg_group() != 0) { - set_max_byte_size_per_msg_group(from.max_byte_size_per_msg_group()); - } -} - -void InitialMessage::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:InitialMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void InitialMessage::CopyFrom(const InitialMessage& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:InitialMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool InitialMessage::IsInitialized() const { - return true; -} - -void InitialMessage::Swap(InitialMessage* other) { - if (other == this) return; - InternalSwap(other); -} -void InitialMessage::InternalSwap(InitialMessage* other) { - using std::swap; - msg_id_.Swap(&other->msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - logging_level_.Swap(&other->logging_level_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(max_advance_, other->max_advance_); - swap(until_, other->until_); - swap(step_size_, other->step_size_); - swap(max_byte_size_per_msg_group_, other->max_byte_size_per_msg_group_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata InitialMessage::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// =================================================================== - -void InfoMessage::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int InfoMessage::kMsgIdFieldNumber; -const int InfoMessage::kMaxAdvanceFieldNumber; -const int InfoMessage::kSimTimeFieldNumber; -const int InfoMessage::kSenderFieldNumber; -const int InfoMessage::kReceiverFieldNumber; -const int InfoMessage::kSizeFieldNumber; -const int InfoMessage::kContentFieldNumber; -const int InfoMessage::kCreationTimeFieldNumber; -const int InfoMessage::kIsFalsifiedFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -InfoMessage::InfoMessage() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InfoMessage.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:InfoMessage) -} -InfoMessage::InfoMessage(const InfoMessage& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.msg_id().size() > 0) { - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - sender_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.sender().size() > 0) { - sender_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.sender_); - } - receiver_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.receiver().size() > 0) { - receiver_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.receiver_); - } - content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.content().size() > 0) { - content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_); - } - ::memcpy(&max_advance_, &from.max_advance_, - static_cast(reinterpret_cast(&is_falsified_) - - reinterpret_cast(&max_advance_)) + sizeof(is_falsified_)); - // @@protoc_insertion_point(copy_constructor:InfoMessage) -} - -void InfoMessage::SharedCtor() { - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - sender_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - receiver_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&max_advance_, 0, static_cast( - reinterpret_cast(&is_falsified_) - - reinterpret_cast(&max_advance_)) + sizeof(is_falsified_)); -} - -InfoMessage::~InfoMessage() { - // @@protoc_insertion_point(destructor:InfoMessage) - SharedDtor(); -} - -void InfoMessage::SharedDtor() { - msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - sender_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - receiver_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - content_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void InfoMessage::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* InfoMessage::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const InfoMessage& InfoMessage::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InfoMessage.base); - return *internal_default_instance(); -} - - -void InfoMessage::Clear() { -// @@protoc_insertion_point(message_clear_start:InfoMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - sender_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - receiver_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&max_advance_, 0, static_cast( - reinterpret_cast(&is_falsified_) - - reinterpret_cast(&max_advance_)) + sizeof(is_falsified_)); - _internal_metadata_.Clear(); -} - -bool InfoMessage::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:InfoMessage) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // string msg_id = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InfoMessage.msg_id")); - } else { - goto handle_unusual; - } - break; - } - - // int32 max_advance = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &max_advance_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 sim_time = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &sim_time_))); - } else { - goto handle_unusual; - } - break; - } - - // string sender = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_sender())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->sender().data(), static_cast(this->sender().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InfoMessage.sender")); - } else { - goto handle_unusual; - } - break; - } - - // string receiver = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_receiver())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->receiver().data(), static_cast(this->receiver().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InfoMessage.receiver")); - } else { - goto handle_unusual; - } - break; - } - - // int32 size = 6; - case 6: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &size_))); - } else { - goto handle_unusual; - } - break; - } - - // string content = 7; - case 7: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_content())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->content().data(), static_cast(this->content().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InfoMessage.content")); - } else { - goto handle_unusual; - } - break; - } - - // int32 creation_time = 8; - case 8: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(64u /* 64 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &creation_time_))); - } else { - goto handle_unusual; - } - break; - } - - // bool is_falsified = 9; - case 9: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(72u /* 72 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( - input, &is_falsified_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:InfoMessage) - return true; -failure: - // @@protoc_insertion_point(parse_failure:InfoMessage) - return false; -#undef DO_ -} - -void InfoMessage::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:InfoMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string msg_id = 1; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->msg_id(), output); - } - - // int32 max_advance = 2; - if (this->max_advance() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->max_advance(), output); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->sim_time(), output); - } - - // string sender = 4; - if (this->sender().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->sender().data(), static_cast(this->sender().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.sender"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 4, this->sender(), output); - } - - // string receiver = 5; - if (this->receiver().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->receiver().data(), static_cast(this->receiver().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.receiver"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 5, this->receiver(), output); - } - - // int32 size = 6; - if (this->size() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->size(), output); - } - - // string content = 7; - if (this->content().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->content().data(), static_cast(this->content().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.content"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 7, this->content(), output); - } - - // int32 creation_time = 8; - if (this->creation_time() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->creation_time(), output); - } - - // bool is_falsified = 9; - if (this->is_falsified() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteBool(9, this->is_falsified(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:InfoMessage) -} - -::google::protobuf::uint8* InfoMessage::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:InfoMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string msg_id = 1; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->msg_id(), target); - } - - // int32 max_advance = 2; - if (this->max_advance() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->max_advance(), target); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->sim_time(), target); - } - - // string sender = 4; - if (this->sender().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->sender().data(), static_cast(this->sender().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.sender"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 4, this->sender(), target); - } - - // string receiver = 5; - if (this->receiver().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->receiver().data(), static_cast(this->receiver().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.receiver"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 5, this->receiver(), target); - } - - // int32 size = 6; - if (this->size() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(6, this->size(), target); - } - - // string content = 7; - if (this->content().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->content().data(), static_cast(this->content().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfoMessage.content"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 7, this->content(), target); - } - - // int32 creation_time = 8; - if (this->creation_time() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(8, this->creation_time(), target); - } - - // bool is_falsified = 9; - if (this->is_falsified() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(9, this->is_falsified(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:InfoMessage) - return target; -} - -size_t InfoMessage::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:InfoMessage) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // string msg_id = 1; - if (this->msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->msg_id()); - } - - // string sender = 4; - if (this->sender().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->sender()); - } - - // string receiver = 5; - if (this->receiver().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->receiver()); - } - - // string content = 7; - if (this->content().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->content()); - } - - // int32 max_advance = 2; - if (this->max_advance() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->max_advance()); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->sim_time()); - } - - // int32 size = 6; - if (this->size() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->size()); - } - - // int32 creation_time = 8; - if (this->creation_time() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->creation_time()); - } - - // bool is_falsified = 9; - if (this->is_falsified() != 0) { - total_size += 1 + 1; - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void InfoMessage::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:InfoMessage) - GOOGLE_DCHECK_NE(&from, this); - const InfoMessage* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:InfoMessage) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:InfoMessage) - MergeFrom(*source); - } -} - -void InfoMessage::MergeFrom(const InfoMessage& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:InfoMessage) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg_id().size() > 0) { - - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - if (from.sender().size() > 0) { - - sender_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.sender_); - } - if (from.receiver().size() > 0) { - - receiver_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.receiver_); - } - if (from.content().size() > 0) { - - content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_); - } - if (from.max_advance() != 0) { - set_max_advance(from.max_advance()); - } - if (from.sim_time() != 0) { - set_sim_time(from.sim_time()); - } - if (from.size() != 0) { - set_size(from.size()); - } - if (from.creation_time() != 0) { - set_creation_time(from.creation_time()); - } - if (from.is_falsified() != 0) { - set_is_falsified(from.is_falsified()); - } -} - -void InfoMessage::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:InfoMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void InfoMessage::CopyFrom(const InfoMessage& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:InfoMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool InfoMessage::IsInitialized() const { - return true; -} - -void InfoMessage::Swap(InfoMessage* other) { - if (other == this) return; - InternalSwap(other); -} -void InfoMessage::InternalSwap(InfoMessage* other) { - using std::swap; - msg_id_.Swap(&other->msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - sender_.Swap(&other->sender_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - receiver_.Swap(&other->receiver_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - content_.Swap(&other->content_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(max_advance_, other->max_advance_); - swap(sim_time_, other->sim_time_); - swap(size_, other->size_); - swap(creation_time_, other->creation_time_); - swap(is_falsified_, other->is_falsified_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata InfoMessage::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// =================================================================== - -void SynchronisationMessage::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int SynchronisationMessage::kMsgTypeFieldNumber; -const int SynchronisationMessage::kMsgIdFieldNumber; -const int SynchronisationMessage::kSimTimeFieldNumber; -const int SynchronisationMessage::kMaxAdvanceFieldNumber; -const int SynchronisationMessage::kTimeoutFieldNumber; -const int SynchronisationMessage::kTimeoutMsgIdFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -SynchronisationMessage::SynchronisationMessage() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_SynchronisationMessage.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:SynchronisationMessage) -} -SynchronisationMessage::SynchronisationMessage(const SynchronisationMessage& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.msg_id().size() > 0) { - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - timeout_msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.timeout_msg_id().size() > 0) { - timeout_msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.timeout_msg_id_); - } - ::memcpy(&msg_type_, &from.msg_type_, - static_cast(reinterpret_cast(&timeout_) - - reinterpret_cast(&msg_type_)) + sizeof(timeout_)); - // @@protoc_insertion_point(copy_constructor:SynchronisationMessage) -} - -void SynchronisationMessage::SharedCtor() { - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - timeout_msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&msg_type_, 0, static_cast( - reinterpret_cast(&timeout_) - - reinterpret_cast(&msg_type_)) + sizeof(timeout_)); -} - -SynchronisationMessage::~SynchronisationMessage() { - // @@protoc_insertion_point(destructor:SynchronisationMessage) - SharedDtor(); -} - -void SynchronisationMessage::SharedDtor() { - msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - timeout_msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void SynchronisationMessage::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* SynchronisationMessage::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const SynchronisationMessage& SynchronisationMessage::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_SynchronisationMessage.base); - return *internal_default_instance(); -} - - -void SynchronisationMessage::Clear() { -// @@protoc_insertion_point(message_clear_start:SynchronisationMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - timeout_msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&msg_type_, 0, static_cast( - reinterpret_cast(&timeout_) - - reinterpret_cast(&msg_type_)) + sizeof(timeout_)); - _internal_metadata_.Clear(); -} - -bool SynchronisationMessage::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:SynchronisationMessage) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .SynchronisationMessage.MsgType msg_type = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) { - int value; - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( - input, &value))); - set_msg_type(static_cast< ::SynchronisationMessage_MsgType >(value)); - } else { - goto handle_unusual; - } - break; - } - - // string msg_id = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "SynchronisationMessage.msg_id")); - } else { - goto handle_unusual; - } - break; - } - - // int32 sim_time = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &sim_time_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 max_advance = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &max_advance_))); - } else { - goto handle_unusual; - } - break; - } - - // bool timeout = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( - input, &timeout_))); - } else { - goto handle_unusual; - } - break; - } - - // string timeout_msg_id = 6; - case 6: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_timeout_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->timeout_msg_id().data(), static_cast(this->timeout_msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "SynchronisationMessage.timeout_msg_id")); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:SynchronisationMessage) - return true; -failure: - // @@protoc_insertion_point(parse_failure:SynchronisationMessage) - return false; -#undef DO_ -} - -void SynchronisationMessage::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:SynchronisationMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .SynchronisationMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteEnum( - 1, this->msg_type(), output); - } - - // string msg_id = 2; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "SynchronisationMessage.msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->msg_id(), output); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->sim_time(), output); - } - - // int32 max_advance = 4; - if (this->max_advance() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->max_advance(), output); - } - - // bool timeout = 5; - if (this->timeout() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->timeout(), output); - } - - // string timeout_msg_id = 6; - if (this->timeout_msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->timeout_msg_id().data(), static_cast(this->timeout_msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "SynchronisationMessage.timeout_msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 6, this->timeout_msg_id(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:SynchronisationMessage) -} - -::google::protobuf::uint8* SynchronisationMessage::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:SynchronisationMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .SynchronisationMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( - 1, this->msg_type(), target); - } - - // string msg_id = 2; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "SynchronisationMessage.msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 2, this->msg_id(), target); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->sim_time(), target); - } - - // int32 max_advance = 4; - if (this->max_advance() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(4, this->max_advance(), target); - } - - // bool timeout = 5; - if (this->timeout() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->timeout(), target); - } - - // string timeout_msg_id = 6; - if (this->timeout_msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->timeout_msg_id().data(), static_cast(this->timeout_msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "SynchronisationMessage.timeout_msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 6, this->timeout_msg_id(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:SynchronisationMessage) - return target; -} - -size_t SynchronisationMessage::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:SynchronisationMessage) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // string msg_id = 2; - if (this->msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->msg_id()); - } - - // string timeout_msg_id = 6; - if (this->timeout_msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->timeout_msg_id()); - } - - // .SynchronisationMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::EnumSize(this->msg_type()); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->sim_time()); - } - - // int32 max_advance = 4; - if (this->max_advance() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->max_advance()); - } - - // bool timeout = 5; - if (this->timeout() != 0) { - total_size += 1 + 1; - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void SynchronisationMessage::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:SynchronisationMessage) - GOOGLE_DCHECK_NE(&from, this); - const SynchronisationMessage* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:SynchronisationMessage) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:SynchronisationMessage) - MergeFrom(*source); - } -} - -void SynchronisationMessage::MergeFrom(const SynchronisationMessage& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:SynchronisationMessage) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg_id().size() > 0) { - - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - if (from.timeout_msg_id().size() > 0) { - - timeout_msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.timeout_msg_id_); - } - if (from.msg_type() != 0) { - set_msg_type(from.msg_type()); - } - if (from.sim_time() != 0) { - set_sim_time(from.sim_time()); - } - if (from.max_advance() != 0) { - set_max_advance(from.max_advance()); - } - if (from.timeout() != 0) { - set_timeout(from.timeout()); - } -} - -void SynchronisationMessage::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:SynchronisationMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void SynchronisationMessage::CopyFrom(const SynchronisationMessage& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:SynchronisationMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool SynchronisationMessage::IsInitialized() const { - return true; -} - -void SynchronisationMessage::Swap(SynchronisationMessage* other) { - if (other == this) return; - InternalSwap(other); -} -void SynchronisationMessage::InternalSwap(SynchronisationMessage* other) { - using std::swap; - msg_id_.Swap(&other->msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - timeout_msg_id_.Swap(&other->timeout_msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(msg_type_, other->msg_type_); - swap(sim_time_, other->sim_time_); - swap(max_advance_, other->max_advance_); - swap(timeout_, other->timeout_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata SynchronisationMessage::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// =================================================================== - -void InfrastructureMessage::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int InfrastructureMessage::kMsgTypeFieldNumber; -const int InfrastructureMessage::kMsgIdFieldNumber; -const int InfrastructureMessage::kSimTimeFieldNumber; -const int InfrastructureMessage::kChangeModuleFieldNumber; -const int InfrastructureMessage::kConnectionChangeSuccessfulFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -InfrastructureMessage::InfrastructureMessage() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InfrastructureMessage.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:InfrastructureMessage) -} -InfrastructureMessage::InfrastructureMessage(const InfrastructureMessage& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.msg_id().size() > 0) { - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - change_module_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.change_module().size() > 0) { - change_module_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.change_module_); - } - ::memcpy(&msg_type_, &from.msg_type_, - static_cast(reinterpret_cast(&connection_change_successful_) - - reinterpret_cast(&msg_type_)) + sizeof(connection_change_successful_)); - // @@protoc_insertion_point(copy_constructor:InfrastructureMessage) -} - -void InfrastructureMessage::SharedCtor() { - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - change_module_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&msg_type_, 0, static_cast( - reinterpret_cast(&connection_change_successful_) - - reinterpret_cast(&msg_type_)) + sizeof(connection_change_successful_)); -} - -InfrastructureMessage::~InfrastructureMessage() { - // @@protoc_insertion_point(destructor:InfrastructureMessage) - SharedDtor(); -} - -void InfrastructureMessage::SharedDtor() { - msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - change_module_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void InfrastructureMessage::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* InfrastructureMessage::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const InfrastructureMessage& InfrastructureMessage::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_InfrastructureMessage.base); - return *internal_default_instance(); -} - - -void InfrastructureMessage::Clear() { -// @@protoc_insertion_point(message_clear_start:InfrastructureMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - change_module_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&msg_type_, 0, static_cast( - reinterpret_cast(&connection_change_successful_) - - reinterpret_cast(&msg_type_)) + sizeof(connection_change_successful_)); - _internal_metadata_.Clear(); -} - -bool InfrastructureMessage::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:InfrastructureMessage) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .InfrastructureMessage.MsgType msg_type = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) { - int value; - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( - input, &value))); - set_msg_type(static_cast< ::InfrastructureMessage_MsgType >(value)); - } else { - goto handle_unusual; - } - break; - } - - // string msg_id = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InfrastructureMessage.msg_id")); - } else { - goto handle_unusual; - } - break; - } - - // int32 sim_time = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &sim_time_))); - } else { - goto handle_unusual; - } - break; - } - - // string change_module = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_change_module())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->change_module().data(), static_cast(this->change_module().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "InfrastructureMessage.change_module")); - } else { - goto handle_unusual; - } - break; - } - - // bool connection_change_successful = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( - input, &connection_change_successful_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:InfrastructureMessage) - return true; -failure: - // @@protoc_insertion_point(parse_failure:InfrastructureMessage) - return false; -#undef DO_ -} - -void InfrastructureMessage::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:InfrastructureMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .InfrastructureMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteEnum( - 1, this->msg_type(), output); - } - - // string msg_id = 2; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfrastructureMessage.msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->msg_id(), output); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->sim_time(), output); - } - - // string change_module = 4; - if (this->change_module().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->change_module().data(), static_cast(this->change_module().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfrastructureMessage.change_module"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 4, this->change_module(), output); - } - - // bool connection_change_successful = 5; - if (this->connection_change_successful() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->connection_change_successful(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:InfrastructureMessage) -} - -::google::protobuf::uint8* InfrastructureMessage::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:InfrastructureMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .InfrastructureMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( - 1, this->msg_type(), target); - } - - // string msg_id = 2; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfrastructureMessage.msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 2, this->msg_id(), target); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->sim_time(), target); - } - - // string change_module = 4; - if (this->change_module().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->change_module().data(), static_cast(this->change_module().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "InfrastructureMessage.change_module"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 4, this->change_module(), target); - } - - // bool connection_change_successful = 5; - if (this->connection_change_successful() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->connection_change_successful(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:InfrastructureMessage) - return target; -} - -size_t InfrastructureMessage::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:InfrastructureMessage) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // string msg_id = 2; - if (this->msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->msg_id()); - } - - // string change_module = 4; - if (this->change_module().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->change_module()); - } - - // .InfrastructureMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::EnumSize(this->msg_type()); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->sim_time()); - } - - // bool connection_change_successful = 5; - if (this->connection_change_successful() != 0) { - total_size += 1 + 1; - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void InfrastructureMessage::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:InfrastructureMessage) - GOOGLE_DCHECK_NE(&from, this); - const InfrastructureMessage* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:InfrastructureMessage) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:InfrastructureMessage) - MergeFrom(*source); - } -} - -void InfrastructureMessage::MergeFrom(const InfrastructureMessage& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:InfrastructureMessage) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg_id().size() > 0) { - - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - if (from.change_module().size() > 0) { - - change_module_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.change_module_); - } - if (from.msg_type() != 0) { - set_msg_type(from.msg_type()); - } - if (from.sim_time() != 0) { - set_sim_time(from.sim_time()); - } - if (from.connection_change_successful() != 0) { - set_connection_change_successful(from.connection_change_successful()); - } -} - -void InfrastructureMessage::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:InfrastructureMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void InfrastructureMessage::CopyFrom(const InfrastructureMessage& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:InfrastructureMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool InfrastructureMessage::IsInitialized() const { - return true; -} - -void InfrastructureMessage::Swap(InfrastructureMessage* other) { - if (other == this) return; - InternalSwap(other); -} -void InfrastructureMessage::InternalSwap(InfrastructureMessage* other) { - using std::swap; - msg_id_.Swap(&other->msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - change_module_.Swap(&other->change_module_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(msg_type_, other->msg_type_); - swap(sim_time_, other->sim_time_); - swap(connection_change_successful_, other->connection_change_successful_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata InfrastructureMessage::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// =================================================================== - -void TrafficMessage::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int TrafficMessage::kMsgIdFieldNumber; -const int TrafficMessage::kSimTimeFieldNumber; -const int TrafficMessage::kSourceFieldNumber; -const int TrafficMessage::kDestinationFieldNumber; -const int TrafficMessage::kStartFieldNumber; -const int TrafficMessage::kStopFieldNumber; -const int TrafficMessage::kIntervalFieldNumber; -const int TrafficMessage::kPacketLengthFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -TrafficMessage::TrafficMessage() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_TrafficMessage.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:TrafficMessage) -} -TrafficMessage::TrafficMessage(const TrafficMessage& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.msg_id().size() > 0) { - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - source_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.source().size() > 0) { - source_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.source_); - } - destination_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.destination().size() > 0) { - destination_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.destination_); - } - ::memcpy(&sim_time_, &from.sim_time_, - static_cast(reinterpret_cast(&packet_length_) - - reinterpret_cast(&sim_time_)) + sizeof(packet_length_)); - // @@protoc_insertion_point(copy_constructor:TrafficMessage) -} - -void TrafficMessage::SharedCtor() { - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - source_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - destination_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&sim_time_, 0, static_cast( - reinterpret_cast(&packet_length_) - - reinterpret_cast(&sim_time_)) + sizeof(packet_length_)); -} - -TrafficMessage::~TrafficMessage() { - // @@protoc_insertion_point(destructor:TrafficMessage) - SharedDtor(); -} - -void TrafficMessage::SharedDtor() { - msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - source_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - destination_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void TrafficMessage::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* TrafficMessage::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const TrafficMessage& TrafficMessage::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_TrafficMessage.base); - return *internal_default_instance(); -} - - -void TrafficMessage::Clear() { -// @@protoc_insertion_point(message_clear_start:TrafficMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - destination_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&sim_time_, 0, static_cast( - reinterpret_cast(&packet_length_) - - reinterpret_cast(&sim_time_)) + sizeof(packet_length_)); - _internal_metadata_.Clear(); -} - -bool TrafficMessage::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:TrafficMessage) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // string msg_id = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "TrafficMessage.msg_id")); - } else { - goto handle_unusual; - } - break; - } - - // int32 sim_time = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &sim_time_))); - } else { - goto handle_unusual; - } - break; - } - - // string source = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_source())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->source().data(), static_cast(this->source().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "TrafficMessage.source")); - } else { - goto handle_unusual; - } - break; - } - - // string destination = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_destination())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->destination().data(), static_cast(this->destination().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "TrafficMessage.destination")); - } else { - goto handle_unusual; - } - break; - } - - // int32 start = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &start_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 stop = 6; - case 6: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &stop_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 interval = 7; - case 7: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(56u /* 56 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &interval_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 packet_length = 8; - case 8: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(64u /* 64 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &packet_length_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:TrafficMessage) - return true; -failure: - // @@protoc_insertion_point(parse_failure:TrafficMessage) - return false; -#undef DO_ -} - -void TrafficMessage::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:TrafficMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string msg_id = 1; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "TrafficMessage.msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->msg_id(), output); - } - - // int32 sim_time = 2; - if (this->sim_time() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->sim_time(), output); - } - - // string source = 3; - if (this->source().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->source().data(), static_cast(this->source().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "TrafficMessage.source"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 3, this->source(), output); - } - - // string destination = 4; - if (this->destination().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->destination().data(), static_cast(this->destination().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "TrafficMessage.destination"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 4, this->destination(), output); - } - - // int32 start = 5; - if (this->start() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->start(), output); - } - - // int32 stop = 6; - if (this->stop() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->stop(), output); - } - - // int32 interval = 7; - if (this->interval() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->interval(), output); - } - - // int32 packet_length = 8; - if (this->packet_length() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->packet_length(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:TrafficMessage) -} - -::google::protobuf::uint8* TrafficMessage::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:TrafficMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string msg_id = 1; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "TrafficMessage.msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->msg_id(), target); - } - - // int32 sim_time = 2; - if (this->sim_time() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->sim_time(), target); - } - - // string source = 3; - if (this->source().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->source().data(), static_cast(this->source().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "TrafficMessage.source"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 3, this->source(), target); - } - - // string destination = 4; - if (this->destination().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->destination().data(), static_cast(this->destination().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "TrafficMessage.destination"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 4, this->destination(), target); - } - - // int32 start = 5; - if (this->start() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(5, this->start(), target); - } - - // int32 stop = 6; - if (this->stop() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(6, this->stop(), target); - } - - // int32 interval = 7; - if (this->interval() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(7, this->interval(), target); - } - - // int32 packet_length = 8; - if (this->packet_length() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(8, this->packet_length(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:TrafficMessage) - return target; -} - -size_t TrafficMessage::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:TrafficMessage) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // string msg_id = 1; - if (this->msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->msg_id()); - } - - // string source = 3; - if (this->source().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->source()); - } - - // string destination = 4; - if (this->destination().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->destination()); - } - - // int32 sim_time = 2; - if (this->sim_time() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->sim_time()); - } - - // int32 start = 5; - if (this->start() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->start()); - } - - // int32 stop = 6; - if (this->stop() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->stop()); - } - - // int32 interval = 7; - if (this->interval() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->interval()); - } - - // int32 packet_length = 8; - if (this->packet_length() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->packet_length()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void TrafficMessage::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:TrafficMessage) - GOOGLE_DCHECK_NE(&from, this); - const TrafficMessage* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:TrafficMessage) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:TrafficMessage) - MergeFrom(*source); - } -} - -void TrafficMessage::MergeFrom(const TrafficMessage& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:TrafficMessage) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg_id().size() > 0) { - - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - if (from.source().size() > 0) { - - source_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.source_); - } - if (from.destination().size() > 0) { - - destination_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.destination_); - } - if (from.sim_time() != 0) { - set_sim_time(from.sim_time()); - } - if (from.start() != 0) { - set_start(from.start()); - } - if (from.stop() != 0) { - set_stop(from.stop()); - } - if (from.interval() != 0) { - set_interval(from.interval()); - } - if (from.packet_length() != 0) { - set_packet_length(from.packet_length()); - } -} - -void TrafficMessage::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:TrafficMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void TrafficMessage::CopyFrom(const TrafficMessage& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:TrafficMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool TrafficMessage::IsInitialized() const { - return true; -} - -void TrafficMessage::Swap(TrafficMessage* other) { - if (other == this) return; - InternalSwap(other); -} -void TrafficMessage::InternalSwap(TrafficMessage* other) { - using std::swap; - msg_id_.Swap(&other->msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - source_.Swap(&other->source_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - destination_.Swap(&other->destination_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(sim_time_, other->sim_time_); - swap(start_, other->start_); - swap(stop_, other->stop_); - swap(interval_, other->interval_); - swap(packet_length_, other->packet_length_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata TrafficMessage::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// =================================================================== - -void AttackMessage::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int AttackMessage::kMsgTypeFieldNumber; -const int AttackMessage::kMsgIdFieldNumber; -const int AttackMessage::kSimTimeFieldNumber; -const int AttackMessage::kAttackedModuleFieldNumber; -const int AttackMessage::kStartFieldNumber; -const int AttackMessage::kStopFieldNumber; -const int AttackMessage::kAttackProbabilityFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -AttackMessage::AttackMessage() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_AttackMessage.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:AttackMessage) -} -AttackMessage::AttackMessage(const AttackMessage& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.msg_id().size() > 0) { - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - attacked_module_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.attacked_module().size() > 0) { - attacked_module_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.attacked_module_); - } - ::memcpy(&msg_type_, &from.msg_type_, - static_cast(reinterpret_cast(&attack_probability_) - - reinterpret_cast(&msg_type_)) + sizeof(attack_probability_)); - // @@protoc_insertion_point(copy_constructor:AttackMessage) -} - -void AttackMessage::SharedCtor() { - msg_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - attacked_module_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&msg_type_, 0, static_cast( - reinterpret_cast(&attack_probability_) - - reinterpret_cast(&msg_type_)) + sizeof(attack_probability_)); -} - -AttackMessage::~AttackMessage() { - // @@protoc_insertion_point(destructor:AttackMessage) - SharedDtor(); -} - -void AttackMessage::SharedDtor() { - msg_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - attacked_module_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void AttackMessage::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* AttackMessage::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const AttackMessage& AttackMessage::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_AttackMessage.base); - return *internal_default_instance(); -} - - -void AttackMessage::Clear() { -// @@protoc_insertion_point(message_clear_start:AttackMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - attacked_module_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - ::memset(&msg_type_, 0, static_cast( - reinterpret_cast(&attack_probability_) - - reinterpret_cast(&msg_type_)) + sizeof(attack_probability_)); - _internal_metadata_.Clear(); -} - -bool AttackMessage::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:AttackMessage) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // .AttackMessage.MsgType msg_type = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) { - int value; - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( - input, &value))); - set_msg_type(static_cast< ::AttackMessage_MsgType >(value)); - } else { - goto handle_unusual; - } - break; - } - - // string msg_id = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_msg_id())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "AttackMessage.msg_id")); - } else { - goto handle_unusual; - } - break; - } - - // int32 sim_time = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &sim_time_))); - } else { - goto handle_unusual; - } - break; - } - - // string attacked_module = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_attacked_module())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->attacked_module().data(), static_cast(this->attacked_module().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "AttackMessage.attacked_module")); - } else { - goto handle_unusual; - } - break; - } - - // int32 start = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &start_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 stop = 6; - case 6: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &stop_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 attack_probability = 7; - case 7: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(56u /* 56 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &attack_probability_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:AttackMessage) - return true; -failure: - // @@protoc_insertion_point(parse_failure:AttackMessage) - return false; -#undef DO_ -} - -void AttackMessage::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:AttackMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .AttackMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteEnum( - 1, this->msg_type(), output); - } - - // string msg_id = 2; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "AttackMessage.msg_id"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->msg_id(), output); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->sim_time(), output); - } - - // string attacked_module = 4; - if (this->attacked_module().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->attacked_module().data(), static_cast(this->attacked_module().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "AttackMessage.attacked_module"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 4, this->attacked_module(), output); - } - - // int32 start = 5; - if (this->start() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->start(), output); - } - - // int32 stop = 6; - if (this->stop() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->stop(), output); - } - - // int32 attack_probability = 7; - if (this->attack_probability() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->attack_probability(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:AttackMessage) -} - -::google::protobuf::uint8* AttackMessage::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:AttackMessage) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // .AttackMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( - 1, this->msg_type(), target); - } - - // string msg_id = 2; - if (this->msg_id().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->msg_id().data(), static_cast(this->msg_id().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "AttackMessage.msg_id"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 2, this->msg_id(), target); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->sim_time(), target); - } - - // string attacked_module = 4; - if (this->attacked_module().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->attacked_module().data(), static_cast(this->attacked_module().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "AttackMessage.attacked_module"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 4, this->attacked_module(), target); - } - - // int32 start = 5; - if (this->start() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(5, this->start(), target); - } - - // int32 stop = 6; - if (this->stop() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(6, this->stop(), target); - } - - // int32 attack_probability = 7; - if (this->attack_probability() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(7, this->attack_probability(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:AttackMessage) - return target; -} - -size_t AttackMessage::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:AttackMessage) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // string msg_id = 2; - if (this->msg_id().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->msg_id()); - } - - // string attacked_module = 4; - if (this->attacked_module().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->attacked_module()); - } - - // .AttackMessage.MsgType msg_type = 1; - if (this->msg_type() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::EnumSize(this->msg_type()); - } - - // int32 sim_time = 3; - if (this->sim_time() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->sim_time()); - } - - // int32 start = 5; - if (this->start() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->start()); - } - - // int32 stop = 6; - if (this->stop() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->stop()); - } - - // int32 attack_probability = 7; - if (this->attack_probability() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->attack_probability()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void AttackMessage::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:AttackMessage) - GOOGLE_DCHECK_NE(&from, this); - const AttackMessage* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:AttackMessage) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:AttackMessage) - MergeFrom(*source); - } -} - -void AttackMessage::MergeFrom(const AttackMessage& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:AttackMessage) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.msg_id().size() > 0) { - - msg_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.msg_id_); - } - if (from.attacked_module().size() > 0) { - - attacked_module_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.attacked_module_); - } - if (from.msg_type() != 0) { - set_msg_type(from.msg_type()); - } - if (from.sim_time() != 0) { - set_sim_time(from.sim_time()); - } - if (from.start() != 0) { - set_start(from.start()); - } - if (from.stop() != 0) { - set_stop(from.stop()); - } - if (from.attack_probability() != 0) { - set_attack_probability(from.attack_probability()); - } -} - -void AttackMessage::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:AttackMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void AttackMessage::CopyFrom(const AttackMessage& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:AttackMessage) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool AttackMessage::IsInitialized() const { - return true; -} - -void AttackMessage::Swap(AttackMessage* other) { - if (other == this) return; - InternalSwap(other); -} -void AttackMessage::InternalSwap(AttackMessage* other) { - using std::swap; - msg_id_.Swap(&other->msg_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - attacked_module_.Swap(&other->attacked_module_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(msg_type_, other->msg_type_); - swap(sim_time_, other->sim_time_); - swap(start_, other->start_); - swap(stop_, other->stop_); - swap(attack_probability_, other->attack_probability_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata AttackMessage::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// =================================================================== - -void CosimaMsgGroup::InitAsDefaultInstance() { -} -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int CosimaMsgGroup::kInitialMessagesFieldNumber; -const int CosimaMsgGroup::kInfoMessagesFieldNumber; -const int CosimaMsgGroup::kSynchronisationMessagesFieldNumber; -const int CosimaMsgGroup::kInfrastructureMessagesFieldNumber; -const int CosimaMsgGroup::kTrafficMessagesFieldNumber; -const int CosimaMsgGroup::kAttackMessagesFieldNumber; -const int CosimaMsgGroup::kCurrentTimeStepFieldNumber; -const int CosimaMsgGroup::kNumberOfMessageGroupsFieldNumber; -const int CosimaMsgGroup::kNumberOfMessagesFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -CosimaMsgGroup::CosimaMsgGroup() - : ::google::protobuf::Message(), _internal_metadata_(NULL) { - ::google::protobuf::internal::InitSCC( - &protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_CosimaMsgGroup.base); - SharedCtor(); - // @@protoc_insertion_point(constructor:CosimaMsgGroup) -} -CosimaMsgGroup::CosimaMsgGroup(const CosimaMsgGroup& from) - : ::google::protobuf::Message(), - _internal_metadata_(NULL), - initial_messages_(from.initial_messages_), - info_messages_(from.info_messages_), - synchronisation_messages_(from.synchronisation_messages_), - infrastructure_messages_(from.infrastructure_messages_), - traffic_messages_(from.traffic_messages_), - attack_messages_(from.attack_messages_) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::memcpy(¤t_time_step_, &from.current_time_step_, - static_cast(reinterpret_cast(&number_of_messages_) - - reinterpret_cast(¤t_time_step_)) + sizeof(number_of_messages_)); - // @@protoc_insertion_point(copy_constructor:CosimaMsgGroup) -} - -void CosimaMsgGroup::SharedCtor() { - ::memset(¤t_time_step_, 0, static_cast( - reinterpret_cast(&number_of_messages_) - - reinterpret_cast(¤t_time_step_)) + sizeof(number_of_messages_)); -} - -CosimaMsgGroup::~CosimaMsgGroup() { - // @@protoc_insertion_point(destructor:CosimaMsgGroup) - SharedDtor(); -} - -void CosimaMsgGroup::SharedDtor() { -} - -void CosimaMsgGroup::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const ::google::protobuf::Descriptor* CosimaMsgGroup::descriptor() { - ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; -} - -const CosimaMsgGroup& CosimaMsgGroup::default_instance() { - ::google::protobuf::internal::InitSCC(&protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::scc_info_CosimaMsgGroup.base); - return *internal_default_instance(); -} - - -void CosimaMsgGroup::Clear() { -// @@protoc_insertion_point(message_clear_start:CosimaMsgGroup) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - initial_messages_.Clear(); - info_messages_.Clear(); - synchronisation_messages_.Clear(); - infrastructure_messages_.Clear(); - traffic_messages_.Clear(); - attack_messages_.Clear(); - ::memset(¤t_time_step_, 0, static_cast( - reinterpret_cast(&number_of_messages_) - - reinterpret_cast(¤t_time_step_)) + sizeof(number_of_messages_)); - _internal_metadata_.Clear(); -} - -bool CosimaMsgGroup::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:CosimaMsgGroup) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // repeated .InitialMessage initial_messages = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_initial_messages())); - } else { - goto handle_unusual; - } - break; - } - - // repeated .InfoMessage info_messages = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_info_messages())); - } else { - goto handle_unusual; - } - break; - } - - // repeated .SynchronisationMessage synchronisation_messages = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_synchronisation_messages())); - } else { - goto handle_unusual; - } - break; - } - - // repeated .InfrastructureMessage infrastructure_messages = 4; - case 4: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_infrastructure_messages())); - } else { - goto handle_unusual; - } - break; - } - - // repeated .TrafficMessage traffic_messages = 5; - case 5: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_traffic_messages())); - } else { - goto handle_unusual; - } - break; - } - - // repeated .AttackMessage attack_messages = 6; - case 6: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( - input, add_attack_messages())); - } else { - goto handle_unusual; - } - break; - } - - // int32 current_time_step = 7; - case 7: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(56u /* 56 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, ¤t_time_step_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 number_of_message_groups = 8; - case 8: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(64u /* 64 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &number_of_message_groups_))); - } else { - goto handle_unusual; - } - break; - } - - // int32 number_of_messages = 9; - case 9: { - if (static_cast< ::google::protobuf::uint8>(tag) == - static_cast< ::google::protobuf::uint8>(72u /* 72 & 0xFF */)) { - - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>( - input, &number_of_messages_))); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } -success: - // @@protoc_insertion_point(parse_success:CosimaMsgGroup) - return true; -failure: - // @@protoc_insertion_point(parse_failure:CosimaMsgGroup) - return false; -#undef DO_ -} - -void CosimaMsgGroup::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:CosimaMsgGroup) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // repeated .InitialMessage initial_messages = 1; - for (unsigned int i = 0, - n = static_cast(this->initial_messages_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 1, - this->initial_messages(static_cast(i)), - output); - } - - // repeated .InfoMessage info_messages = 2; - for (unsigned int i = 0, - n = static_cast(this->info_messages_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 2, - this->info_messages(static_cast(i)), - output); - } - - // repeated .SynchronisationMessage synchronisation_messages = 3; - for (unsigned int i = 0, - n = static_cast(this->synchronisation_messages_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 3, - this->synchronisation_messages(static_cast(i)), - output); - } - - // repeated .InfrastructureMessage infrastructure_messages = 4; - for (unsigned int i = 0, - n = static_cast(this->infrastructure_messages_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 4, - this->infrastructure_messages(static_cast(i)), - output); - } - - // repeated .TrafficMessage traffic_messages = 5; - for (unsigned int i = 0, - n = static_cast(this->traffic_messages_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 5, - this->traffic_messages(static_cast(i)), - output); - } - - // repeated .AttackMessage attack_messages = 6; - for (unsigned int i = 0, - n = static_cast(this->attack_messages_size()); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 6, - this->attack_messages(static_cast(i)), - output); - } - - // int32 current_time_step = 7; - if (this->current_time_step() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->current_time_step(), output); - } - - // int32 number_of_message_groups = 8; - if (this->number_of_message_groups() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->number_of_message_groups(), output); - } - - // int32 number_of_messages = 9; - if (this->number_of_messages() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteInt32(9, this->number_of_messages(), output); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); - } - // @@protoc_insertion_point(serialize_end:CosimaMsgGroup) -} - -::google::protobuf::uint8* CosimaMsgGroup::InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:CosimaMsgGroup) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // repeated .InitialMessage initial_messages = 1; - for (unsigned int i = 0, - n = static_cast(this->initial_messages_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 1, this->initial_messages(static_cast(i)), deterministic, target); - } - - // repeated .InfoMessage info_messages = 2; - for (unsigned int i = 0, - n = static_cast(this->info_messages_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 2, this->info_messages(static_cast(i)), deterministic, target); - } - - // repeated .SynchronisationMessage synchronisation_messages = 3; - for (unsigned int i = 0, - n = static_cast(this->synchronisation_messages_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 3, this->synchronisation_messages(static_cast(i)), deterministic, target); - } - - // repeated .InfrastructureMessage infrastructure_messages = 4; - for (unsigned int i = 0, - n = static_cast(this->infrastructure_messages_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 4, this->infrastructure_messages(static_cast(i)), deterministic, target); - } - - // repeated .TrafficMessage traffic_messages = 5; - for (unsigned int i = 0, - n = static_cast(this->traffic_messages_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 5, this->traffic_messages(static_cast(i)), deterministic, target); - } - - // repeated .AttackMessage attack_messages = 6; - for (unsigned int i = 0, - n = static_cast(this->attack_messages_size()); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - InternalWriteMessageToArray( - 6, this->attack_messages(static_cast(i)), deterministic, target); - } - - // int32 current_time_step = 7; - if (this->current_time_step() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(7, this->current_time_step(), target); - } - - // int32 number_of_message_groups = 8; - if (this->number_of_message_groups() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(8, this->number_of_message_groups(), target); - } - - // int32 number_of_messages = 9; - if (this->number_of_messages() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(9, this->number_of_messages(), target); - } - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); - } - // @@protoc_insertion_point(serialize_to_array_end:CosimaMsgGroup) - return target; -} - -size_t CosimaMsgGroup::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:CosimaMsgGroup) - size_t total_size = 0; - - if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); - } - // repeated .InitialMessage initial_messages = 1; - { - unsigned int count = static_cast(this->initial_messages_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->initial_messages(static_cast(i))); - } - } - - // repeated .InfoMessage info_messages = 2; - { - unsigned int count = static_cast(this->info_messages_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->info_messages(static_cast(i))); - } - } - - // repeated .SynchronisationMessage synchronisation_messages = 3; - { - unsigned int count = static_cast(this->synchronisation_messages_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->synchronisation_messages(static_cast(i))); - } - } - - // repeated .InfrastructureMessage infrastructure_messages = 4; - { - unsigned int count = static_cast(this->infrastructure_messages_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->infrastructure_messages(static_cast(i))); - } - } - - // repeated .TrafficMessage traffic_messages = 5; - { - unsigned int count = static_cast(this->traffic_messages_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->traffic_messages(static_cast(i))); - } - } - - // repeated .AttackMessage attack_messages = 6; - { - unsigned int count = static_cast(this->attack_messages_size()); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSize( - this->attack_messages(static_cast(i))); - } - } - - // int32 current_time_step = 7; - if (this->current_time_step() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->current_time_step()); - } - - // int32 number_of_message_groups = 8; - if (this->number_of_message_groups() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->number_of_message_groups()); - } - - // int32 number_of_messages = 9; - if (this->number_of_messages() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - this->number_of_messages()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void CosimaMsgGroup::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:CosimaMsgGroup) - GOOGLE_DCHECK_NE(&from, this); - const CosimaMsgGroup* source = - ::google::protobuf::internal::DynamicCastToGenerated( - &from); - if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:CosimaMsgGroup) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:CosimaMsgGroup) - MergeFrom(*source); - } -} - -void CosimaMsgGroup::MergeFrom(const CosimaMsgGroup& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:CosimaMsgGroup) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - initial_messages_.MergeFrom(from.initial_messages_); - info_messages_.MergeFrom(from.info_messages_); - synchronisation_messages_.MergeFrom(from.synchronisation_messages_); - infrastructure_messages_.MergeFrom(from.infrastructure_messages_); - traffic_messages_.MergeFrom(from.traffic_messages_); - attack_messages_.MergeFrom(from.attack_messages_); - if (from.current_time_step() != 0) { - set_current_time_step(from.current_time_step()); - } - if (from.number_of_message_groups() != 0) { - set_number_of_message_groups(from.number_of_message_groups()); - } - if (from.number_of_messages() != 0) { - set_number_of_messages(from.number_of_messages()); - } -} - -void CosimaMsgGroup::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:CosimaMsgGroup) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void CosimaMsgGroup::CopyFrom(const CosimaMsgGroup& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:CosimaMsgGroup) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool CosimaMsgGroup::IsInitialized() const { - return true; -} - -void CosimaMsgGroup::Swap(CosimaMsgGroup* other) { - if (other == this) return; - InternalSwap(other); -} -void CosimaMsgGroup::InternalSwap(CosimaMsgGroup* other) { - using std::swap; - CastToBase(&initial_messages_)->InternalSwap(CastToBase(&other->initial_messages_)); - CastToBase(&info_messages_)->InternalSwap(CastToBase(&other->info_messages_)); - CastToBase(&synchronisation_messages_)->InternalSwap(CastToBase(&other->synchronisation_messages_)); - CastToBase(&infrastructure_messages_)->InternalSwap(CastToBase(&other->infrastructure_messages_)); - CastToBase(&traffic_messages_)->InternalSwap(CastToBase(&other->traffic_messages_)); - CastToBase(&attack_messages_)->InternalSwap(CastToBase(&other->attack_messages_)); - swap(current_time_step_, other->current_time_step_); - swap(number_of_message_groups_, other->number_of_message_groups_); - swap(number_of_messages_, other->number_of_messages_); - _internal_metadata_.Swap(&other->_internal_metadata_); -} - -::google::protobuf::Metadata CosimaMsgGroup::GetMetadata() const { - protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::protobuf_AssignDescriptorsOnce(); - return ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::file_level_metadata[kIndexInFileMessages]; -} - - -// @@protoc_insertion_point(namespace_scope) -namespace google { -namespace protobuf { -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::InitialMessage* Arena::CreateMaybeMessage< ::InitialMessage >(Arena* arena) { - return Arena::CreateInternal< ::InitialMessage >(arena); -} -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::InfoMessage* Arena::CreateMaybeMessage< ::InfoMessage >(Arena* arena) { - return Arena::CreateInternal< ::InfoMessage >(arena); -} -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::SynchronisationMessage* Arena::CreateMaybeMessage< ::SynchronisationMessage >(Arena* arena) { - return Arena::CreateInternal< ::SynchronisationMessage >(arena); -} -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::InfrastructureMessage* Arena::CreateMaybeMessage< ::InfrastructureMessage >(Arena* arena) { - return Arena::CreateInternal< ::InfrastructureMessage >(arena); -} -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::TrafficMessage* Arena::CreateMaybeMessage< ::TrafficMessage >(Arena* arena) { - return Arena::CreateInternal< ::TrafficMessage >(arena); -} -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::AttackMessage* Arena::CreateMaybeMessage< ::AttackMessage >(Arena* arena) { - return Arena::CreateInternal< ::AttackMessage >(arena); -} -template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::CosimaMsgGroup* Arena::CreateMaybeMessage< ::CosimaMsgGroup >(Arena* arena) { - return Arena::CreateInternal< ::CosimaMsgGroup >(arena); -} -} // namespace protobuf -} // namespace google - -// @@protoc_insertion_point(global_scope) diff --git a/cosima_omnetpp_project/messages/message.pb.h b/cosima_omnetpp_project/messages/message.pb.h deleted file mode 100644 index 772c81f..0000000 --- a/cosima_omnetpp_project/messages/message.pb.h +++ /dev/null @@ -1,2866 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: cosima_core/messages/message.proto - -#ifndef PROTOBUF_INCLUDED_cosima_5fcore_2fmessages_2fmessage_2eproto -#define PROTOBUF_INCLUDED_cosima_5fcore_2fmessages_2fmessage_2eproto - -#include - -#include - -#if GOOGLE_PROTOBUF_VERSION < 3006001 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include // IWYU pragma: export -#include // IWYU pragma: export -#include -#include -// @@protoc_insertion_point(includes) -#define PROTOBUF_INTERNAL_EXPORT_protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto - -namespace protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto { -// Internal implementation detail -- do not use these members. -struct TableStruct { - static const ::google::protobuf::internal::ParseTableField entries[]; - static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; - static const ::google::protobuf::internal::ParseTable schema[7]; - static const ::google::protobuf::internal::FieldMetadata field_metadata[]; - static const ::google::protobuf::internal::SerializationTable serialization_table[]; - static const ::google::protobuf::uint32 offsets[]; -}; -void AddDescriptors(); -} // namespace protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto -class AttackMessage; -class AttackMessageDefaultTypeInternal; -extern AttackMessageDefaultTypeInternal _AttackMessage_default_instance_; -class CosimaMsgGroup; -class CosimaMsgGroupDefaultTypeInternal; -extern CosimaMsgGroupDefaultTypeInternal _CosimaMsgGroup_default_instance_; -class InfoMessage; -class InfoMessageDefaultTypeInternal; -extern InfoMessageDefaultTypeInternal _InfoMessage_default_instance_; -class InfrastructureMessage; -class InfrastructureMessageDefaultTypeInternal; -extern InfrastructureMessageDefaultTypeInternal _InfrastructureMessage_default_instance_; -class InitialMessage; -class InitialMessageDefaultTypeInternal; -extern InitialMessageDefaultTypeInternal _InitialMessage_default_instance_; -class SynchronisationMessage; -class SynchronisationMessageDefaultTypeInternal; -extern SynchronisationMessageDefaultTypeInternal _SynchronisationMessage_default_instance_; -class TrafficMessage; -class TrafficMessageDefaultTypeInternal; -extern TrafficMessageDefaultTypeInternal _TrafficMessage_default_instance_; -namespace google { -namespace protobuf { -template<> ::AttackMessage* Arena::CreateMaybeMessage<::AttackMessage>(Arena*); -template<> ::CosimaMsgGroup* Arena::CreateMaybeMessage<::CosimaMsgGroup>(Arena*); -template<> ::InfoMessage* Arena::CreateMaybeMessage<::InfoMessage>(Arena*); -template<> ::InfrastructureMessage* Arena::CreateMaybeMessage<::InfrastructureMessage>(Arena*); -template<> ::InitialMessage* Arena::CreateMaybeMessage<::InitialMessage>(Arena*); -template<> ::SynchronisationMessage* Arena::CreateMaybeMessage<::SynchronisationMessage>(Arena*); -template<> ::TrafficMessage* Arena::CreateMaybeMessage<::TrafficMessage>(Arena*); -} // namespace protobuf -} // namespace google - -enum SynchronisationMessage_MsgType { - SynchronisationMessage_MsgType_MAX_ADVANCE = 0, - SynchronisationMessage_MsgType_WAITING = 1, - SynchronisationMessage_MsgType_TRANSMISSION_ERROR = 2, - SynchronisationMessage_MsgType_SynchronisationMessage_MsgType_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min, - SynchronisationMessage_MsgType_SynchronisationMessage_MsgType_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max -}; -bool SynchronisationMessage_MsgType_IsValid(int value); -const SynchronisationMessage_MsgType SynchronisationMessage_MsgType_MsgType_MIN = SynchronisationMessage_MsgType_MAX_ADVANCE; -const SynchronisationMessage_MsgType SynchronisationMessage_MsgType_MsgType_MAX = SynchronisationMessage_MsgType_TRANSMISSION_ERROR; -const int SynchronisationMessage_MsgType_MsgType_ARRAYSIZE = SynchronisationMessage_MsgType_MsgType_MAX + 1; - -const ::google::protobuf::EnumDescriptor* SynchronisationMessage_MsgType_descriptor(); -inline const ::std::string& SynchronisationMessage_MsgType_Name(SynchronisationMessage_MsgType value) { - return ::google::protobuf::internal::NameOfEnum( - SynchronisationMessage_MsgType_descriptor(), value); -} -inline bool SynchronisationMessage_MsgType_Parse( - const ::std::string& name, SynchronisationMessage_MsgType* value) { - return ::google::protobuf::internal::ParseNamedEnum( - SynchronisationMessage_MsgType_descriptor(), name, value); -} -enum InfrastructureMessage_MsgType { - InfrastructureMessage_MsgType_DISCONNECT = 0, - InfrastructureMessage_MsgType_RECONNECT = 1, - InfrastructureMessage_MsgType_InfrastructureMessage_MsgType_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min, - InfrastructureMessage_MsgType_InfrastructureMessage_MsgType_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max -}; -bool InfrastructureMessage_MsgType_IsValid(int value); -const InfrastructureMessage_MsgType InfrastructureMessage_MsgType_MsgType_MIN = InfrastructureMessage_MsgType_DISCONNECT; -const InfrastructureMessage_MsgType InfrastructureMessage_MsgType_MsgType_MAX = InfrastructureMessage_MsgType_RECONNECT; -const int InfrastructureMessage_MsgType_MsgType_ARRAYSIZE = InfrastructureMessage_MsgType_MsgType_MAX + 1; - -const ::google::protobuf::EnumDescriptor* InfrastructureMessage_MsgType_descriptor(); -inline const ::std::string& InfrastructureMessage_MsgType_Name(InfrastructureMessage_MsgType value) { - return ::google::protobuf::internal::NameOfEnum( - InfrastructureMessage_MsgType_descriptor(), value); -} -inline bool InfrastructureMessage_MsgType_Parse( - const ::std::string& name, InfrastructureMessage_MsgType* value) { - return ::google::protobuf::internal::ParseNamedEnum( - InfrastructureMessage_MsgType_descriptor(), name, value); -} -enum AttackMessage_MsgType { - AttackMessage_MsgType_PACKET_DROP = 0, - AttackMessage_MsgType_PACKET_FALSIFICATION = 1, - AttackMessage_MsgType_PACKET_DELAY = 2, - AttackMessage_MsgType_AttackMessage_MsgType_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min, - AttackMessage_MsgType_AttackMessage_MsgType_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max -}; -bool AttackMessage_MsgType_IsValid(int value); -const AttackMessage_MsgType AttackMessage_MsgType_MsgType_MIN = AttackMessage_MsgType_PACKET_DROP; -const AttackMessage_MsgType AttackMessage_MsgType_MsgType_MAX = AttackMessage_MsgType_PACKET_DELAY; -const int AttackMessage_MsgType_MsgType_ARRAYSIZE = AttackMessage_MsgType_MsgType_MAX + 1; - -const ::google::protobuf::EnumDescriptor* AttackMessage_MsgType_descriptor(); -inline const ::std::string& AttackMessage_MsgType_Name(AttackMessage_MsgType value) { - return ::google::protobuf::internal::NameOfEnum( - AttackMessage_MsgType_descriptor(), value); -} -inline bool AttackMessage_MsgType_Parse( - const ::std::string& name, AttackMessage_MsgType* value) { - return ::google::protobuf::internal::ParseNamedEnum( - AttackMessage_MsgType_descriptor(), name, value); -} -// =================================================================== - -class InitialMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:InitialMessage) */ { - public: - InitialMessage(); - virtual ~InitialMessage(); - - InitialMessage(const InitialMessage& from); - - inline InitialMessage& operator=(const InitialMessage& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - InitialMessage(InitialMessage&& from) noexcept - : InitialMessage() { - *this = ::std::move(from); - } - - inline InitialMessage& operator=(InitialMessage&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const InitialMessage& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const InitialMessage* internal_default_instance() { - return reinterpret_cast( - &_InitialMessage_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - void Swap(InitialMessage* other); - friend void swap(InitialMessage& a, InitialMessage& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline InitialMessage* New() const final { - return CreateMaybeMessage(NULL); - } - - InitialMessage* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const InitialMessage& from); - void MergeFrom(const InitialMessage& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(InitialMessage* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // string msg_id = 1; - void clear_msg_id(); - static const int kMsgIdFieldNumber = 1; - const ::std::string& msg_id() const; - void set_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_msg_id(::std::string&& value); - #endif - void set_msg_id(const char* value); - void set_msg_id(const char* value, size_t size); - ::std::string* mutable_msg_id(); - ::std::string* release_msg_id(); - void set_allocated_msg_id(::std::string* msg_id); - - // string logging_level = 5; - void clear_logging_level(); - static const int kLoggingLevelFieldNumber = 5; - const ::std::string& logging_level() const; - void set_logging_level(const ::std::string& value); - #if LANG_CXX11 - void set_logging_level(::std::string&& value); - #endif - void set_logging_level(const char* value); - void set_logging_level(const char* value, size_t size); - ::std::string* mutable_logging_level(); - ::std::string* release_logging_level(); - void set_allocated_logging_level(::std::string* logging_level); - - // int32 max_advance = 2; - void clear_max_advance(); - static const int kMaxAdvanceFieldNumber = 2; - ::google::protobuf::int32 max_advance() const; - void set_max_advance(::google::protobuf::int32 value); - - // int32 until = 3; - void clear_until(); - static const int kUntilFieldNumber = 3; - ::google::protobuf::int32 until() const; - void set_until(::google::protobuf::int32 value); - - // int32 step_size = 4; - void clear_step_size(); - static const int kStepSizeFieldNumber = 4; - ::google::protobuf::int32 step_size() const; - void set_step_size(::google::protobuf::int32 value); - - // int32 max_byte_size_per_msg_group = 6; - void clear_max_byte_size_per_msg_group(); - static const int kMaxByteSizePerMsgGroupFieldNumber = 6; - ::google::protobuf::int32 max_byte_size_per_msg_group() const; - void set_max_byte_size_per_msg_group(::google::protobuf::int32 value); - - // @@protoc_insertion_point(class_scope:InitialMessage) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr msg_id_; - ::google::protobuf::internal::ArenaStringPtr logging_level_; - ::google::protobuf::int32 max_advance_; - ::google::protobuf::int32 until_; - ::google::protobuf::int32 step_size_; - ::google::protobuf::int32 max_byte_size_per_msg_group_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// ------------------------------------------------------------------- - -class InfoMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:InfoMessage) */ { - public: - InfoMessage(); - virtual ~InfoMessage(); - - InfoMessage(const InfoMessage& from); - - inline InfoMessage& operator=(const InfoMessage& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - InfoMessage(InfoMessage&& from) noexcept - : InfoMessage() { - *this = ::std::move(from); - } - - inline InfoMessage& operator=(InfoMessage&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const InfoMessage& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const InfoMessage* internal_default_instance() { - return reinterpret_cast( - &_InfoMessage_default_instance_); - } - static constexpr int kIndexInFileMessages = - 1; - - void Swap(InfoMessage* other); - friend void swap(InfoMessage& a, InfoMessage& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline InfoMessage* New() const final { - return CreateMaybeMessage(NULL); - } - - InfoMessage* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const InfoMessage& from); - void MergeFrom(const InfoMessage& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(InfoMessage* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // string msg_id = 1; - void clear_msg_id(); - static const int kMsgIdFieldNumber = 1; - const ::std::string& msg_id() const; - void set_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_msg_id(::std::string&& value); - #endif - void set_msg_id(const char* value); - void set_msg_id(const char* value, size_t size); - ::std::string* mutable_msg_id(); - ::std::string* release_msg_id(); - void set_allocated_msg_id(::std::string* msg_id); - - // string sender = 4; - void clear_sender(); - static const int kSenderFieldNumber = 4; - const ::std::string& sender() const; - void set_sender(const ::std::string& value); - #if LANG_CXX11 - void set_sender(::std::string&& value); - #endif - void set_sender(const char* value); - void set_sender(const char* value, size_t size); - ::std::string* mutable_sender(); - ::std::string* release_sender(); - void set_allocated_sender(::std::string* sender); - - // string receiver = 5; - void clear_receiver(); - static const int kReceiverFieldNumber = 5; - const ::std::string& receiver() const; - void set_receiver(const ::std::string& value); - #if LANG_CXX11 - void set_receiver(::std::string&& value); - #endif - void set_receiver(const char* value); - void set_receiver(const char* value, size_t size); - ::std::string* mutable_receiver(); - ::std::string* release_receiver(); - void set_allocated_receiver(::std::string* receiver); - - // string content = 7; - void clear_content(); - static const int kContentFieldNumber = 7; - const ::std::string& content() const; - void set_content(const ::std::string& value); - #if LANG_CXX11 - void set_content(::std::string&& value); - #endif - void set_content(const char* value); - void set_content(const char* value, size_t size); - ::std::string* mutable_content(); - ::std::string* release_content(); - void set_allocated_content(::std::string* content); - - // int32 max_advance = 2; - void clear_max_advance(); - static const int kMaxAdvanceFieldNumber = 2; - ::google::protobuf::int32 max_advance() const; - void set_max_advance(::google::protobuf::int32 value); - - // int32 sim_time = 3; - void clear_sim_time(); - static const int kSimTimeFieldNumber = 3; - ::google::protobuf::int32 sim_time() const; - void set_sim_time(::google::protobuf::int32 value); - - // int32 size = 6; - void clear_size(); - static const int kSizeFieldNumber = 6; - ::google::protobuf::int32 size() const; - void set_size(::google::protobuf::int32 value); - - // int32 creation_time = 8; - void clear_creation_time(); - static const int kCreationTimeFieldNumber = 8; - ::google::protobuf::int32 creation_time() const; - void set_creation_time(::google::protobuf::int32 value); - - // bool is_falsified = 9; - void clear_is_falsified(); - static const int kIsFalsifiedFieldNumber = 9; - bool is_falsified() const; - void set_is_falsified(bool value); - - // @@protoc_insertion_point(class_scope:InfoMessage) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr msg_id_; - ::google::protobuf::internal::ArenaStringPtr sender_; - ::google::protobuf::internal::ArenaStringPtr receiver_; - ::google::protobuf::internal::ArenaStringPtr content_; - ::google::protobuf::int32 max_advance_; - ::google::protobuf::int32 sim_time_; - ::google::protobuf::int32 size_; - ::google::protobuf::int32 creation_time_; - bool is_falsified_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// ------------------------------------------------------------------- - -class SynchronisationMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:SynchronisationMessage) */ { - public: - SynchronisationMessage(); - virtual ~SynchronisationMessage(); - - SynchronisationMessage(const SynchronisationMessage& from); - - inline SynchronisationMessage& operator=(const SynchronisationMessage& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - SynchronisationMessage(SynchronisationMessage&& from) noexcept - : SynchronisationMessage() { - *this = ::std::move(from); - } - - inline SynchronisationMessage& operator=(SynchronisationMessage&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const SynchronisationMessage& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const SynchronisationMessage* internal_default_instance() { - return reinterpret_cast( - &_SynchronisationMessage_default_instance_); - } - static constexpr int kIndexInFileMessages = - 2; - - void Swap(SynchronisationMessage* other); - friend void swap(SynchronisationMessage& a, SynchronisationMessage& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline SynchronisationMessage* New() const final { - return CreateMaybeMessage(NULL); - } - - SynchronisationMessage* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const SynchronisationMessage& from); - void MergeFrom(const SynchronisationMessage& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(SynchronisationMessage* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef SynchronisationMessage_MsgType MsgType; - static const MsgType MAX_ADVANCE = - SynchronisationMessage_MsgType_MAX_ADVANCE; - static const MsgType WAITING = - SynchronisationMessage_MsgType_WAITING; - static const MsgType TRANSMISSION_ERROR = - SynchronisationMessage_MsgType_TRANSMISSION_ERROR; - static inline bool MsgType_IsValid(int value) { - return SynchronisationMessage_MsgType_IsValid(value); - } - static const MsgType MsgType_MIN = - SynchronisationMessage_MsgType_MsgType_MIN; - static const MsgType MsgType_MAX = - SynchronisationMessage_MsgType_MsgType_MAX; - static const int MsgType_ARRAYSIZE = - SynchronisationMessage_MsgType_MsgType_ARRAYSIZE; - static inline const ::google::protobuf::EnumDescriptor* - MsgType_descriptor() { - return SynchronisationMessage_MsgType_descriptor(); - } - static inline const ::std::string& MsgType_Name(MsgType value) { - return SynchronisationMessage_MsgType_Name(value); - } - static inline bool MsgType_Parse(const ::std::string& name, - MsgType* value) { - return SynchronisationMessage_MsgType_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - // string msg_id = 2; - void clear_msg_id(); - static const int kMsgIdFieldNumber = 2; - const ::std::string& msg_id() const; - void set_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_msg_id(::std::string&& value); - #endif - void set_msg_id(const char* value); - void set_msg_id(const char* value, size_t size); - ::std::string* mutable_msg_id(); - ::std::string* release_msg_id(); - void set_allocated_msg_id(::std::string* msg_id); - - // string timeout_msg_id = 6; - void clear_timeout_msg_id(); - static const int kTimeoutMsgIdFieldNumber = 6; - const ::std::string& timeout_msg_id() const; - void set_timeout_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_timeout_msg_id(::std::string&& value); - #endif - void set_timeout_msg_id(const char* value); - void set_timeout_msg_id(const char* value, size_t size); - ::std::string* mutable_timeout_msg_id(); - ::std::string* release_timeout_msg_id(); - void set_allocated_timeout_msg_id(::std::string* timeout_msg_id); - - // .SynchronisationMessage.MsgType msg_type = 1; - void clear_msg_type(); - static const int kMsgTypeFieldNumber = 1; - ::SynchronisationMessage_MsgType msg_type() const; - void set_msg_type(::SynchronisationMessage_MsgType value); - - // int32 sim_time = 3; - void clear_sim_time(); - static const int kSimTimeFieldNumber = 3; - ::google::protobuf::int32 sim_time() const; - void set_sim_time(::google::protobuf::int32 value); - - // int32 max_advance = 4; - void clear_max_advance(); - static const int kMaxAdvanceFieldNumber = 4; - ::google::protobuf::int32 max_advance() const; - void set_max_advance(::google::protobuf::int32 value); - - // bool timeout = 5; - void clear_timeout(); - static const int kTimeoutFieldNumber = 5; - bool timeout() const; - void set_timeout(bool value); - - // @@protoc_insertion_point(class_scope:SynchronisationMessage) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr msg_id_; - ::google::protobuf::internal::ArenaStringPtr timeout_msg_id_; - int msg_type_; - ::google::protobuf::int32 sim_time_; - ::google::protobuf::int32 max_advance_; - bool timeout_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// ------------------------------------------------------------------- - -class InfrastructureMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:InfrastructureMessage) */ { - public: - InfrastructureMessage(); - virtual ~InfrastructureMessage(); - - InfrastructureMessage(const InfrastructureMessage& from); - - inline InfrastructureMessage& operator=(const InfrastructureMessage& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - InfrastructureMessage(InfrastructureMessage&& from) noexcept - : InfrastructureMessage() { - *this = ::std::move(from); - } - - inline InfrastructureMessage& operator=(InfrastructureMessage&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const InfrastructureMessage& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const InfrastructureMessage* internal_default_instance() { - return reinterpret_cast( - &_InfrastructureMessage_default_instance_); - } - static constexpr int kIndexInFileMessages = - 3; - - void Swap(InfrastructureMessage* other); - friend void swap(InfrastructureMessage& a, InfrastructureMessage& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline InfrastructureMessage* New() const final { - return CreateMaybeMessage(NULL); - } - - InfrastructureMessage* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const InfrastructureMessage& from); - void MergeFrom(const InfrastructureMessage& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(InfrastructureMessage* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef InfrastructureMessage_MsgType MsgType; - static const MsgType DISCONNECT = - InfrastructureMessage_MsgType_DISCONNECT; - static const MsgType RECONNECT = - InfrastructureMessage_MsgType_RECONNECT; - static inline bool MsgType_IsValid(int value) { - return InfrastructureMessage_MsgType_IsValid(value); - } - static const MsgType MsgType_MIN = - InfrastructureMessage_MsgType_MsgType_MIN; - static const MsgType MsgType_MAX = - InfrastructureMessage_MsgType_MsgType_MAX; - static const int MsgType_ARRAYSIZE = - InfrastructureMessage_MsgType_MsgType_ARRAYSIZE; - static inline const ::google::protobuf::EnumDescriptor* - MsgType_descriptor() { - return InfrastructureMessage_MsgType_descriptor(); - } - static inline const ::std::string& MsgType_Name(MsgType value) { - return InfrastructureMessage_MsgType_Name(value); - } - static inline bool MsgType_Parse(const ::std::string& name, - MsgType* value) { - return InfrastructureMessage_MsgType_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - // string msg_id = 2; - void clear_msg_id(); - static const int kMsgIdFieldNumber = 2; - const ::std::string& msg_id() const; - void set_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_msg_id(::std::string&& value); - #endif - void set_msg_id(const char* value); - void set_msg_id(const char* value, size_t size); - ::std::string* mutable_msg_id(); - ::std::string* release_msg_id(); - void set_allocated_msg_id(::std::string* msg_id); - - // string change_module = 4; - void clear_change_module(); - static const int kChangeModuleFieldNumber = 4; - const ::std::string& change_module() const; - void set_change_module(const ::std::string& value); - #if LANG_CXX11 - void set_change_module(::std::string&& value); - #endif - void set_change_module(const char* value); - void set_change_module(const char* value, size_t size); - ::std::string* mutable_change_module(); - ::std::string* release_change_module(); - void set_allocated_change_module(::std::string* change_module); - - // .InfrastructureMessage.MsgType msg_type = 1; - void clear_msg_type(); - static const int kMsgTypeFieldNumber = 1; - ::InfrastructureMessage_MsgType msg_type() const; - void set_msg_type(::InfrastructureMessage_MsgType value); - - // int32 sim_time = 3; - void clear_sim_time(); - static const int kSimTimeFieldNumber = 3; - ::google::protobuf::int32 sim_time() const; - void set_sim_time(::google::protobuf::int32 value); - - // bool connection_change_successful = 5; - void clear_connection_change_successful(); - static const int kConnectionChangeSuccessfulFieldNumber = 5; - bool connection_change_successful() const; - void set_connection_change_successful(bool value); - - // @@protoc_insertion_point(class_scope:InfrastructureMessage) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr msg_id_; - ::google::protobuf::internal::ArenaStringPtr change_module_; - int msg_type_; - ::google::protobuf::int32 sim_time_; - bool connection_change_successful_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// ------------------------------------------------------------------- - -class TrafficMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:TrafficMessage) */ { - public: - TrafficMessage(); - virtual ~TrafficMessage(); - - TrafficMessage(const TrafficMessage& from); - - inline TrafficMessage& operator=(const TrafficMessage& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - TrafficMessage(TrafficMessage&& from) noexcept - : TrafficMessage() { - *this = ::std::move(from); - } - - inline TrafficMessage& operator=(TrafficMessage&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const TrafficMessage& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const TrafficMessage* internal_default_instance() { - return reinterpret_cast( - &_TrafficMessage_default_instance_); - } - static constexpr int kIndexInFileMessages = - 4; - - void Swap(TrafficMessage* other); - friend void swap(TrafficMessage& a, TrafficMessage& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline TrafficMessage* New() const final { - return CreateMaybeMessage(NULL); - } - - TrafficMessage* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const TrafficMessage& from); - void MergeFrom(const TrafficMessage& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(TrafficMessage* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // string msg_id = 1; - void clear_msg_id(); - static const int kMsgIdFieldNumber = 1; - const ::std::string& msg_id() const; - void set_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_msg_id(::std::string&& value); - #endif - void set_msg_id(const char* value); - void set_msg_id(const char* value, size_t size); - ::std::string* mutable_msg_id(); - ::std::string* release_msg_id(); - void set_allocated_msg_id(::std::string* msg_id); - - // string source = 3; - void clear_source(); - static const int kSourceFieldNumber = 3; - const ::std::string& source() const; - void set_source(const ::std::string& value); - #if LANG_CXX11 - void set_source(::std::string&& value); - #endif - void set_source(const char* value); - void set_source(const char* value, size_t size); - ::std::string* mutable_source(); - ::std::string* release_source(); - void set_allocated_source(::std::string* source); - - // string destination = 4; - void clear_destination(); - static const int kDestinationFieldNumber = 4; - const ::std::string& destination() const; - void set_destination(const ::std::string& value); - #if LANG_CXX11 - void set_destination(::std::string&& value); - #endif - void set_destination(const char* value); - void set_destination(const char* value, size_t size); - ::std::string* mutable_destination(); - ::std::string* release_destination(); - void set_allocated_destination(::std::string* destination); - - // int32 sim_time = 2; - void clear_sim_time(); - static const int kSimTimeFieldNumber = 2; - ::google::protobuf::int32 sim_time() const; - void set_sim_time(::google::protobuf::int32 value); - - // int32 start = 5; - void clear_start(); - static const int kStartFieldNumber = 5; - ::google::protobuf::int32 start() const; - void set_start(::google::protobuf::int32 value); - - // int32 stop = 6; - void clear_stop(); - static const int kStopFieldNumber = 6; - ::google::protobuf::int32 stop() const; - void set_stop(::google::protobuf::int32 value); - - // int32 interval = 7; - void clear_interval(); - static const int kIntervalFieldNumber = 7; - ::google::protobuf::int32 interval() const; - void set_interval(::google::protobuf::int32 value); - - // int32 packet_length = 8; - void clear_packet_length(); - static const int kPacketLengthFieldNumber = 8; - ::google::protobuf::int32 packet_length() const; - void set_packet_length(::google::protobuf::int32 value); - - // @@protoc_insertion_point(class_scope:TrafficMessage) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr msg_id_; - ::google::protobuf::internal::ArenaStringPtr source_; - ::google::protobuf::internal::ArenaStringPtr destination_; - ::google::protobuf::int32 sim_time_; - ::google::protobuf::int32 start_; - ::google::protobuf::int32 stop_; - ::google::protobuf::int32 interval_; - ::google::protobuf::int32 packet_length_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// ------------------------------------------------------------------- - -class AttackMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:AttackMessage) */ { - public: - AttackMessage(); - virtual ~AttackMessage(); - - AttackMessage(const AttackMessage& from); - - inline AttackMessage& operator=(const AttackMessage& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - AttackMessage(AttackMessage&& from) noexcept - : AttackMessage() { - *this = ::std::move(from); - } - - inline AttackMessage& operator=(AttackMessage&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const AttackMessage& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const AttackMessage* internal_default_instance() { - return reinterpret_cast( - &_AttackMessage_default_instance_); - } - static constexpr int kIndexInFileMessages = - 5; - - void Swap(AttackMessage* other); - friend void swap(AttackMessage& a, AttackMessage& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline AttackMessage* New() const final { - return CreateMaybeMessage(NULL); - } - - AttackMessage* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const AttackMessage& from); - void MergeFrom(const AttackMessage& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(AttackMessage* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - typedef AttackMessage_MsgType MsgType; - static const MsgType PACKET_DROP = - AttackMessage_MsgType_PACKET_DROP; - static const MsgType PACKET_FALSIFICATION = - AttackMessage_MsgType_PACKET_FALSIFICATION; - static const MsgType PACKET_DELAY = - AttackMessage_MsgType_PACKET_DELAY; - static inline bool MsgType_IsValid(int value) { - return AttackMessage_MsgType_IsValid(value); - } - static const MsgType MsgType_MIN = - AttackMessage_MsgType_MsgType_MIN; - static const MsgType MsgType_MAX = - AttackMessage_MsgType_MsgType_MAX; - static const int MsgType_ARRAYSIZE = - AttackMessage_MsgType_MsgType_ARRAYSIZE; - static inline const ::google::protobuf::EnumDescriptor* - MsgType_descriptor() { - return AttackMessage_MsgType_descriptor(); - } - static inline const ::std::string& MsgType_Name(MsgType value) { - return AttackMessage_MsgType_Name(value); - } - static inline bool MsgType_Parse(const ::std::string& name, - MsgType* value) { - return AttackMessage_MsgType_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - // string msg_id = 2; - void clear_msg_id(); - static const int kMsgIdFieldNumber = 2; - const ::std::string& msg_id() const; - void set_msg_id(const ::std::string& value); - #if LANG_CXX11 - void set_msg_id(::std::string&& value); - #endif - void set_msg_id(const char* value); - void set_msg_id(const char* value, size_t size); - ::std::string* mutable_msg_id(); - ::std::string* release_msg_id(); - void set_allocated_msg_id(::std::string* msg_id); - - // string attacked_module = 4; - void clear_attacked_module(); - static const int kAttackedModuleFieldNumber = 4; - const ::std::string& attacked_module() const; - void set_attacked_module(const ::std::string& value); - #if LANG_CXX11 - void set_attacked_module(::std::string&& value); - #endif - void set_attacked_module(const char* value); - void set_attacked_module(const char* value, size_t size); - ::std::string* mutable_attacked_module(); - ::std::string* release_attacked_module(); - void set_allocated_attacked_module(::std::string* attacked_module); - - // .AttackMessage.MsgType msg_type = 1; - void clear_msg_type(); - static const int kMsgTypeFieldNumber = 1; - ::AttackMessage_MsgType msg_type() const; - void set_msg_type(::AttackMessage_MsgType value); - - // int32 sim_time = 3; - void clear_sim_time(); - static const int kSimTimeFieldNumber = 3; - ::google::protobuf::int32 sim_time() const; - void set_sim_time(::google::protobuf::int32 value); - - // int32 start = 5; - void clear_start(); - static const int kStartFieldNumber = 5; - ::google::protobuf::int32 start() const; - void set_start(::google::protobuf::int32 value); - - // int32 stop = 6; - void clear_stop(); - static const int kStopFieldNumber = 6; - ::google::protobuf::int32 stop() const; - void set_stop(::google::protobuf::int32 value); - - // int32 attack_probability = 7; - void clear_attack_probability(); - static const int kAttackProbabilityFieldNumber = 7; - ::google::protobuf::int32 attack_probability() const; - void set_attack_probability(::google::protobuf::int32 value); - - // @@protoc_insertion_point(class_scope:AttackMessage) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr msg_id_; - ::google::protobuf::internal::ArenaStringPtr attacked_module_; - int msg_type_; - ::google::protobuf::int32 sim_time_; - ::google::protobuf::int32 start_; - ::google::protobuf::int32 stop_; - ::google::protobuf::int32 attack_probability_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// ------------------------------------------------------------------- - -class CosimaMsgGroup : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:CosimaMsgGroup) */ { - public: - CosimaMsgGroup(); - virtual ~CosimaMsgGroup(); - - CosimaMsgGroup(const CosimaMsgGroup& from); - - inline CosimaMsgGroup& operator=(const CosimaMsgGroup& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - CosimaMsgGroup(CosimaMsgGroup&& from) noexcept - : CosimaMsgGroup() { - *this = ::std::move(from); - } - - inline CosimaMsgGroup& operator=(CosimaMsgGroup&& from) noexcept { - if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { - if (this != &from) InternalSwap(&from); - } else { - CopyFrom(from); - } - return *this; - } - #endif - static const ::google::protobuf::Descriptor* descriptor(); - static const CosimaMsgGroup& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const CosimaMsgGroup* internal_default_instance() { - return reinterpret_cast( - &_CosimaMsgGroup_default_instance_); - } - static constexpr int kIndexInFileMessages = - 6; - - void Swap(CosimaMsgGroup* other); - friend void swap(CosimaMsgGroup& a, CosimaMsgGroup& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline CosimaMsgGroup* New() const final { - return CreateMaybeMessage(NULL); - } - - CosimaMsgGroup* New(::google::protobuf::Arena* arena) const final { - return CreateMaybeMessage(arena); - } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; - void CopyFrom(const CosimaMsgGroup& from); - void MergeFrom(const CosimaMsgGroup& from); - void Clear() final; - bool IsInitialized() const final; - - size_t ByteSizeLong() const final; - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - bool deterministic, ::google::protobuf::uint8* target) const final; - int GetCachedSize() const final { return _cached_size_.Get(); } - - private: - void SharedCtor(); - void SharedDtor(); - void SetCachedSize(int size) const final; - void InternalSwap(CosimaMsgGroup* other); - private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { - return NULL; - } - inline void* MaybeArenaPtr() const { - return NULL; - } - public: - - ::google::protobuf::Metadata GetMetadata() const final; - - // nested types ---------------------------------------------------- - - // accessors ------------------------------------------------------- - - // repeated .InitialMessage initial_messages = 1; - int initial_messages_size() const; - void clear_initial_messages(); - static const int kInitialMessagesFieldNumber = 1; - ::InitialMessage* mutable_initial_messages(int index); - ::google::protobuf::RepeatedPtrField< ::InitialMessage >* - mutable_initial_messages(); - const ::InitialMessage& initial_messages(int index) const; - ::InitialMessage* add_initial_messages(); - const ::google::protobuf::RepeatedPtrField< ::InitialMessage >& - initial_messages() const; - - // repeated .InfoMessage info_messages = 2; - int info_messages_size() const; - void clear_info_messages(); - static const int kInfoMessagesFieldNumber = 2; - ::InfoMessage* mutable_info_messages(int index); - ::google::protobuf::RepeatedPtrField< ::InfoMessage >* - mutable_info_messages(); - const ::InfoMessage& info_messages(int index) const; - ::InfoMessage* add_info_messages(); - const ::google::protobuf::RepeatedPtrField< ::InfoMessage >& - info_messages() const; - - // repeated .SynchronisationMessage synchronisation_messages = 3; - int synchronisation_messages_size() const; - void clear_synchronisation_messages(); - static const int kSynchronisationMessagesFieldNumber = 3; - ::SynchronisationMessage* mutable_synchronisation_messages(int index); - ::google::protobuf::RepeatedPtrField< ::SynchronisationMessage >* - mutable_synchronisation_messages(); - const ::SynchronisationMessage& synchronisation_messages(int index) const; - ::SynchronisationMessage* add_synchronisation_messages(); - const ::google::protobuf::RepeatedPtrField< ::SynchronisationMessage >& - synchronisation_messages() const; - - // repeated .InfrastructureMessage infrastructure_messages = 4; - int infrastructure_messages_size() const; - void clear_infrastructure_messages(); - static const int kInfrastructureMessagesFieldNumber = 4; - ::InfrastructureMessage* mutable_infrastructure_messages(int index); - ::google::protobuf::RepeatedPtrField< ::InfrastructureMessage >* - mutable_infrastructure_messages(); - const ::InfrastructureMessage& infrastructure_messages(int index) const; - ::InfrastructureMessage* add_infrastructure_messages(); - const ::google::protobuf::RepeatedPtrField< ::InfrastructureMessage >& - infrastructure_messages() const; - - // repeated .TrafficMessage traffic_messages = 5; - int traffic_messages_size() const; - void clear_traffic_messages(); - static const int kTrafficMessagesFieldNumber = 5; - ::TrafficMessage* mutable_traffic_messages(int index); - ::google::protobuf::RepeatedPtrField< ::TrafficMessage >* - mutable_traffic_messages(); - const ::TrafficMessage& traffic_messages(int index) const; - ::TrafficMessage* add_traffic_messages(); - const ::google::protobuf::RepeatedPtrField< ::TrafficMessage >& - traffic_messages() const; - - // repeated .AttackMessage attack_messages = 6; - int attack_messages_size() const; - void clear_attack_messages(); - static const int kAttackMessagesFieldNumber = 6; - ::AttackMessage* mutable_attack_messages(int index); - ::google::protobuf::RepeatedPtrField< ::AttackMessage >* - mutable_attack_messages(); - const ::AttackMessage& attack_messages(int index) const; - ::AttackMessage* add_attack_messages(); - const ::google::protobuf::RepeatedPtrField< ::AttackMessage >& - attack_messages() const; - - // int32 current_time_step = 7; - void clear_current_time_step(); - static const int kCurrentTimeStepFieldNumber = 7; - ::google::protobuf::int32 current_time_step() const; - void set_current_time_step(::google::protobuf::int32 value); - - // int32 number_of_message_groups = 8; - void clear_number_of_message_groups(); - static const int kNumberOfMessageGroupsFieldNumber = 8; - ::google::protobuf::int32 number_of_message_groups() const; - void set_number_of_message_groups(::google::protobuf::int32 value); - - // int32 number_of_messages = 9; - void clear_number_of_messages(); - static const int kNumberOfMessagesFieldNumber = 9; - ::google::protobuf::int32 number_of_messages() const; - void set_number_of_messages(::google::protobuf::int32 value); - - // @@protoc_insertion_point(class_scope:CosimaMsgGroup) - private: - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedPtrField< ::InitialMessage > initial_messages_; - ::google::protobuf::RepeatedPtrField< ::InfoMessage > info_messages_; - ::google::protobuf::RepeatedPtrField< ::SynchronisationMessage > synchronisation_messages_; - ::google::protobuf::RepeatedPtrField< ::InfrastructureMessage > infrastructure_messages_; - ::google::protobuf::RepeatedPtrField< ::TrafficMessage > traffic_messages_; - ::google::protobuf::RepeatedPtrField< ::AttackMessage > attack_messages_; - ::google::protobuf::int32 current_time_step_; - ::google::protobuf::int32 number_of_message_groups_; - ::google::protobuf::int32 number_of_messages_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::protobuf_cosima_5fcore_2fmessages_2fmessage_2eproto::TableStruct; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// InitialMessage - -// string msg_id = 1; -inline void InitialMessage::clear_msg_id() { - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InitialMessage::msg_id() const { - // @@protoc_insertion_point(field_get:InitialMessage.msg_id) - return msg_id_.GetNoArena(); -} -inline void InitialMessage::set_msg_id(const ::std::string& value) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InitialMessage.msg_id) -} -#if LANG_CXX11 -inline void InitialMessage::set_msg_id(::std::string&& value) { - - msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InitialMessage.msg_id) -} -#endif -inline void InitialMessage::set_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InitialMessage.msg_id) -} -inline void InitialMessage::set_msg_id(const char* value, size_t size) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InitialMessage.msg_id) -} -inline ::std::string* InitialMessage::mutable_msg_id() { - - // @@protoc_insertion_point(field_mutable:InitialMessage.msg_id) - return msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InitialMessage::release_msg_id() { - // @@protoc_insertion_point(field_release:InitialMessage.msg_id) - - return msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InitialMessage::set_allocated_msg_id(::std::string* msg_id) { - if (msg_id != NULL) { - - } else { - - } - msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), msg_id); - // @@protoc_insertion_point(field_set_allocated:InitialMessage.msg_id) -} - -// int32 max_advance = 2; -inline void InitialMessage::clear_max_advance() { - max_advance_ = 0; -} -inline ::google::protobuf::int32 InitialMessage::max_advance() const { - // @@protoc_insertion_point(field_get:InitialMessage.max_advance) - return max_advance_; -} -inline void InitialMessage::set_max_advance(::google::protobuf::int32 value) { - - max_advance_ = value; - // @@protoc_insertion_point(field_set:InitialMessage.max_advance) -} - -// int32 until = 3; -inline void InitialMessage::clear_until() { - until_ = 0; -} -inline ::google::protobuf::int32 InitialMessage::until() const { - // @@protoc_insertion_point(field_get:InitialMessage.until) - return until_; -} -inline void InitialMessage::set_until(::google::protobuf::int32 value) { - - until_ = value; - // @@protoc_insertion_point(field_set:InitialMessage.until) -} - -// int32 step_size = 4; -inline void InitialMessage::clear_step_size() { - step_size_ = 0; -} -inline ::google::protobuf::int32 InitialMessage::step_size() const { - // @@protoc_insertion_point(field_get:InitialMessage.step_size) - return step_size_; -} -inline void InitialMessage::set_step_size(::google::protobuf::int32 value) { - - step_size_ = value; - // @@protoc_insertion_point(field_set:InitialMessage.step_size) -} - -// string logging_level = 5; -inline void InitialMessage::clear_logging_level() { - logging_level_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InitialMessage::logging_level() const { - // @@protoc_insertion_point(field_get:InitialMessage.logging_level) - return logging_level_.GetNoArena(); -} -inline void InitialMessage::set_logging_level(const ::std::string& value) { - - logging_level_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InitialMessage.logging_level) -} -#if LANG_CXX11 -inline void InitialMessage::set_logging_level(::std::string&& value) { - - logging_level_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InitialMessage.logging_level) -} -#endif -inline void InitialMessage::set_logging_level(const char* value) { - GOOGLE_DCHECK(value != NULL); - - logging_level_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InitialMessage.logging_level) -} -inline void InitialMessage::set_logging_level(const char* value, size_t size) { - - logging_level_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InitialMessage.logging_level) -} -inline ::std::string* InitialMessage::mutable_logging_level() { - - // @@protoc_insertion_point(field_mutable:InitialMessage.logging_level) - return logging_level_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InitialMessage::release_logging_level() { - // @@protoc_insertion_point(field_release:InitialMessage.logging_level) - - return logging_level_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InitialMessage::set_allocated_logging_level(::std::string* logging_level) { - if (logging_level != NULL) { - - } else { - - } - logging_level_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), logging_level); - // @@protoc_insertion_point(field_set_allocated:InitialMessage.logging_level) -} - -// int32 max_byte_size_per_msg_group = 6; -inline void InitialMessage::clear_max_byte_size_per_msg_group() { - max_byte_size_per_msg_group_ = 0; -} -inline ::google::protobuf::int32 InitialMessage::max_byte_size_per_msg_group() const { - // @@protoc_insertion_point(field_get:InitialMessage.max_byte_size_per_msg_group) - return max_byte_size_per_msg_group_; -} -inline void InitialMessage::set_max_byte_size_per_msg_group(::google::protobuf::int32 value) { - - max_byte_size_per_msg_group_ = value; - // @@protoc_insertion_point(field_set:InitialMessage.max_byte_size_per_msg_group) -} - -// ------------------------------------------------------------------- - -// InfoMessage - -// string msg_id = 1; -inline void InfoMessage::clear_msg_id() { - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InfoMessage::msg_id() const { - // @@protoc_insertion_point(field_get:InfoMessage.msg_id) - return msg_id_.GetNoArena(); -} -inline void InfoMessage::set_msg_id(const ::std::string& value) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InfoMessage.msg_id) -} -#if LANG_CXX11 -inline void InfoMessage::set_msg_id(::std::string&& value) { - - msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InfoMessage.msg_id) -} -#endif -inline void InfoMessage::set_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InfoMessage.msg_id) -} -inline void InfoMessage::set_msg_id(const char* value, size_t size) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InfoMessage.msg_id) -} -inline ::std::string* InfoMessage::mutable_msg_id() { - - // @@protoc_insertion_point(field_mutable:InfoMessage.msg_id) - return msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InfoMessage::release_msg_id() { - // @@protoc_insertion_point(field_release:InfoMessage.msg_id) - - return msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InfoMessage::set_allocated_msg_id(::std::string* msg_id) { - if (msg_id != NULL) { - - } else { - - } - msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), msg_id); - // @@protoc_insertion_point(field_set_allocated:InfoMessage.msg_id) -} - -// int32 max_advance = 2; -inline void InfoMessage::clear_max_advance() { - max_advance_ = 0; -} -inline ::google::protobuf::int32 InfoMessage::max_advance() const { - // @@protoc_insertion_point(field_get:InfoMessage.max_advance) - return max_advance_; -} -inline void InfoMessage::set_max_advance(::google::protobuf::int32 value) { - - max_advance_ = value; - // @@protoc_insertion_point(field_set:InfoMessage.max_advance) -} - -// int32 sim_time = 3; -inline void InfoMessage::clear_sim_time() { - sim_time_ = 0; -} -inline ::google::protobuf::int32 InfoMessage::sim_time() const { - // @@protoc_insertion_point(field_get:InfoMessage.sim_time) - return sim_time_; -} -inline void InfoMessage::set_sim_time(::google::protobuf::int32 value) { - - sim_time_ = value; - // @@protoc_insertion_point(field_set:InfoMessage.sim_time) -} - -// string sender = 4; -inline void InfoMessage::clear_sender() { - sender_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InfoMessage::sender() const { - // @@protoc_insertion_point(field_get:InfoMessage.sender) - return sender_.GetNoArena(); -} -inline void InfoMessage::set_sender(const ::std::string& value) { - - sender_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InfoMessage.sender) -} -#if LANG_CXX11 -inline void InfoMessage::set_sender(::std::string&& value) { - - sender_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InfoMessage.sender) -} -#endif -inline void InfoMessage::set_sender(const char* value) { - GOOGLE_DCHECK(value != NULL); - - sender_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InfoMessage.sender) -} -inline void InfoMessage::set_sender(const char* value, size_t size) { - - sender_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InfoMessage.sender) -} -inline ::std::string* InfoMessage::mutable_sender() { - - // @@protoc_insertion_point(field_mutable:InfoMessage.sender) - return sender_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InfoMessage::release_sender() { - // @@protoc_insertion_point(field_release:InfoMessage.sender) - - return sender_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InfoMessage::set_allocated_sender(::std::string* sender) { - if (sender != NULL) { - - } else { - - } - sender_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), sender); - // @@protoc_insertion_point(field_set_allocated:InfoMessage.sender) -} - -// string receiver = 5; -inline void InfoMessage::clear_receiver() { - receiver_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InfoMessage::receiver() const { - // @@protoc_insertion_point(field_get:InfoMessage.receiver) - return receiver_.GetNoArena(); -} -inline void InfoMessage::set_receiver(const ::std::string& value) { - - receiver_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InfoMessage.receiver) -} -#if LANG_CXX11 -inline void InfoMessage::set_receiver(::std::string&& value) { - - receiver_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InfoMessage.receiver) -} -#endif -inline void InfoMessage::set_receiver(const char* value) { - GOOGLE_DCHECK(value != NULL); - - receiver_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InfoMessage.receiver) -} -inline void InfoMessage::set_receiver(const char* value, size_t size) { - - receiver_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InfoMessage.receiver) -} -inline ::std::string* InfoMessage::mutable_receiver() { - - // @@protoc_insertion_point(field_mutable:InfoMessage.receiver) - return receiver_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InfoMessage::release_receiver() { - // @@protoc_insertion_point(field_release:InfoMessage.receiver) - - return receiver_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InfoMessage::set_allocated_receiver(::std::string* receiver) { - if (receiver != NULL) { - - } else { - - } - receiver_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), receiver); - // @@protoc_insertion_point(field_set_allocated:InfoMessage.receiver) -} - -// int32 size = 6; -inline void InfoMessage::clear_size() { - size_ = 0; -} -inline ::google::protobuf::int32 InfoMessage::size() const { - // @@protoc_insertion_point(field_get:InfoMessage.size) - return size_; -} -inline void InfoMessage::set_size(::google::protobuf::int32 value) { - - size_ = value; - // @@protoc_insertion_point(field_set:InfoMessage.size) -} - -// string content = 7; -inline void InfoMessage::clear_content() { - content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InfoMessage::content() const { - // @@protoc_insertion_point(field_get:InfoMessage.content) - return content_.GetNoArena(); -} -inline void InfoMessage::set_content(const ::std::string& value) { - - content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InfoMessage.content) -} -#if LANG_CXX11 -inline void InfoMessage::set_content(::std::string&& value) { - - content_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InfoMessage.content) -} -#endif -inline void InfoMessage::set_content(const char* value) { - GOOGLE_DCHECK(value != NULL); - - content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InfoMessage.content) -} -inline void InfoMessage::set_content(const char* value, size_t size) { - - content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InfoMessage.content) -} -inline ::std::string* InfoMessage::mutable_content() { - - // @@protoc_insertion_point(field_mutable:InfoMessage.content) - return content_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InfoMessage::release_content() { - // @@protoc_insertion_point(field_release:InfoMessage.content) - - return content_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InfoMessage::set_allocated_content(::std::string* content) { - if (content != NULL) { - - } else { - - } - content_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), content); - // @@protoc_insertion_point(field_set_allocated:InfoMessage.content) -} - -// int32 creation_time = 8; -inline void InfoMessage::clear_creation_time() { - creation_time_ = 0; -} -inline ::google::protobuf::int32 InfoMessage::creation_time() const { - // @@protoc_insertion_point(field_get:InfoMessage.creation_time) - return creation_time_; -} -inline void InfoMessage::set_creation_time(::google::protobuf::int32 value) { - - creation_time_ = value; - // @@protoc_insertion_point(field_set:InfoMessage.creation_time) -} - -// bool is_falsified = 9; -inline void InfoMessage::clear_is_falsified() { - is_falsified_ = false; -} -inline bool InfoMessage::is_falsified() const { - // @@protoc_insertion_point(field_get:InfoMessage.is_falsified) - return is_falsified_; -} -inline void InfoMessage::set_is_falsified(bool value) { - - is_falsified_ = value; - // @@protoc_insertion_point(field_set:InfoMessage.is_falsified) -} - -// ------------------------------------------------------------------- - -// SynchronisationMessage - -// .SynchronisationMessage.MsgType msg_type = 1; -inline void SynchronisationMessage::clear_msg_type() { - msg_type_ = 0; -} -inline ::SynchronisationMessage_MsgType SynchronisationMessage::msg_type() const { - // @@protoc_insertion_point(field_get:SynchronisationMessage.msg_type) - return static_cast< ::SynchronisationMessage_MsgType >(msg_type_); -} -inline void SynchronisationMessage::set_msg_type(::SynchronisationMessage_MsgType value) { - - msg_type_ = value; - // @@protoc_insertion_point(field_set:SynchronisationMessage.msg_type) -} - -// string msg_id = 2; -inline void SynchronisationMessage::clear_msg_id() { - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& SynchronisationMessage::msg_id() const { - // @@protoc_insertion_point(field_get:SynchronisationMessage.msg_id) - return msg_id_.GetNoArena(); -} -inline void SynchronisationMessage::set_msg_id(const ::std::string& value) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:SynchronisationMessage.msg_id) -} -#if LANG_CXX11 -inline void SynchronisationMessage::set_msg_id(::std::string&& value) { - - msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:SynchronisationMessage.msg_id) -} -#endif -inline void SynchronisationMessage::set_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:SynchronisationMessage.msg_id) -} -inline void SynchronisationMessage::set_msg_id(const char* value, size_t size) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:SynchronisationMessage.msg_id) -} -inline ::std::string* SynchronisationMessage::mutable_msg_id() { - - // @@protoc_insertion_point(field_mutable:SynchronisationMessage.msg_id) - return msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* SynchronisationMessage::release_msg_id() { - // @@protoc_insertion_point(field_release:SynchronisationMessage.msg_id) - - return msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void SynchronisationMessage::set_allocated_msg_id(::std::string* msg_id) { - if (msg_id != NULL) { - - } else { - - } - msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), msg_id); - // @@protoc_insertion_point(field_set_allocated:SynchronisationMessage.msg_id) -} - -// int32 sim_time = 3; -inline void SynchronisationMessage::clear_sim_time() { - sim_time_ = 0; -} -inline ::google::protobuf::int32 SynchronisationMessage::sim_time() const { - // @@protoc_insertion_point(field_get:SynchronisationMessage.sim_time) - return sim_time_; -} -inline void SynchronisationMessage::set_sim_time(::google::protobuf::int32 value) { - - sim_time_ = value; - // @@protoc_insertion_point(field_set:SynchronisationMessage.sim_time) -} - -// int32 max_advance = 4; -inline void SynchronisationMessage::clear_max_advance() { - max_advance_ = 0; -} -inline ::google::protobuf::int32 SynchronisationMessage::max_advance() const { - // @@protoc_insertion_point(field_get:SynchronisationMessage.max_advance) - return max_advance_; -} -inline void SynchronisationMessage::set_max_advance(::google::protobuf::int32 value) { - - max_advance_ = value; - // @@protoc_insertion_point(field_set:SynchronisationMessage.max_advance) -} - -// bool timeout = 5; -inline void SynchronisationMessage::clear_timeout() { - timeout_ = false; -} -inline bool SynchronisationMessage::timeout() const { - // @@protoc_insertion_point(field_get:SynchronisationMessage.timeout) - return timeout_; -} -inline void SynchronisationMessage::set_timeout(bool value) { - - timeout_ = value; - // @@protoc_insertion_point(field_set:SynchronisationMessage.timeout) -} - -// string timeout_msg_id = 6; -inline void SynchronisationMessage::clear_timeout_msg_id() { - timeout_msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& SynchronisationMessage::timeout_msg_id() const { - // @@protoc_insertion_point(field_get:SynchronisationMessage.timeout_msg_id) - return timeout_msg_id_.GetNoArena(); -} -inline void SynchronisationMessage::set_timeout_msg_id(const ::std::string& value) { - - timeout_msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:SynchronisationMessage.timeout_msg_id) -} -#if LANG_CXX11 -inline void SynchronisationMessage::set_timeout_msg_id(::std::string&& value) { - - timeout_msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:SynchronisationMessage.timeout_msg_id) -} -#endif -inline void SynchronisationMessage::set_timeout_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - timeout_msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:SynchronisationMessage.timeout_msg_id) -} -inline void SynchronisationMessage::set_timeout_msg_id(const char* value, size_t size) { - - timeout_msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:SynchronisationMessage.timeout_msg_id) -} -inline ::std::string* SynchronisationMessage::mutable_timeout_msg_id() { - - // @@protoc_insertion_point(field_mutable:SynchronisationMessage.timeout_msg_id) - return timeout_msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* SynchronisationMessage::release_timeout_msg_id() { - // @@protoc_insertion_point(field_release:SynchronisationMessage.timeout_msg_id) - - return timeout_msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void SynchronisationMessage::set_allocated_timeout_msg_id(::std::string* timeout_msg_id) { - if (timeout_msg_id != NULL) { - - } else { - - } - timeout_msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), timeout_msg_id); - // @@protoc_insertion_point(field_set_allocated:SynchronisationMessage.timeout_msg_id) -} - -// ------------------------------------------------------------------- - -// InfrastructureMessage - -// .InfrastructureMessage.MsgType msg_type = 1; -inline void InfrastructureMessage::clear_msg_type() { - msg_type_ = 0; -} -inline ::InfrastructureMessage_MsgType InfrastructureMessage::msg_type() const { - // @@protoc_insertion_point(field_get:InfrastructureMessage.msg_type) - return static_cast< ::InfrastructureMessage_MsgType >(msg_type_); -} -inline void InfrastructureMessage::set_msg_type(::InfrastructureMessage_MsgType value) { - - msg_type_ = value; - // @@protoc_insertion_point(field_set:InfrastructureMessage.msg_type) -} - -// string msg_id = 2; -inline void InfrastructureMessage::clear_msg_id() { - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InfrastructureMessage::msg_id() const { - // @@protoc_insertion_point(field_get:InfrastructureMessage.msg_id) - return msg_id_.GetNoArena(); -} -inline void InfrastructureMessage::set_msg_id(const ::std::string& value) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InfrastructureMessage.msg_id) -} -#if LANG_CXX11 -inline void InfrastructureMessage::set_msg_id(::std::string&& value) { - - msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InfrastructureMessage.msg_id) -} -#endif -inline void InfrastructureMessage::set_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InfrastructureMessage.msg_id) -} -inline void InfrastructureMessage::set_msg_id(const char* value, size_t size) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InfrastructureMessage.msg_id) -} -inline ::std::string* InfrastructureMessage::mutable_msg_id() { - - // @@protoc_insertion_point(field_mutable:InfrastructureMessage.msg_id) - return msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InfrastructureMessage::release_msg_id() { - // @@protoc_insertion_point(field_release:InfrastructureMessage.msg_id) - - return msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InfrastructureMessage::set_allocated_msg_id(::std::string* msg_id) { - if (msg_id != NULL) { - - } else { - - } - msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), msg_id); - // @@protoc_insertion_point(field_set_allocated:InfrastructureMessage.msg_id) -} - -// int32 sim_time = 3; -inline void InfrastructureMessage::clear_sim_time() { - sim_time_ = 0; -} -inline ::google::protobuf::int32 InfrastructureMessage::sim_time() const { - // @@protoc_insertion_point(field_get:InfrastructureMessage.sim_time) - return sim_time_; -} -inline void InfrastructureMessage::set_sim_time(::google::protobuf::int32 value) { - - sim_time_ = value; - // @@protoc_insertion_point(field_set:InfrastructureMessage.sim_time) -} - -// string change_module = 4; -inline void InfrastructureMessage::clear_change_module() { - change_module_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& InfrastructureMessage::change_module() const { - // @@protoc_insertion_point(field_get:InfrastructureMessage.change_module) - return change_module_.GetNoArena(); -} -inline void InfrastructureMessage::set_change_module(const ::std::string& value) { - - change_module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:InfrastructureMessage.change_module) -} -#if LANG_CXX11 -inline void InfrastructureMessage::set_change_module(::std::string&& value) { - - change_module_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:InfrastructureMessage.change_module) -} -#endif -inline void InfrastructureMessage::set_change_module(const char* value) { - GOOGLE_DCHECK(value != NULL); - - change_module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:InfrastructureMessage.change_module) -} -inline void InfrastructureMessage::set_change_module(const char* value, size_t size) { - - change_module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:InfrastructureMessage.change_module) -} -inline ::std::string* InfrastructureMessage::mutable_change_module() { - - // @@protoc_insertion_point(field_mutable:InfrastructureMessage.change_module) - return change_module_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* InfrastructureMessage::release_change_module() { - // @@protoc_insertion_point(field_release:InfrastructureMessage.change_module) - - return change_module_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void InfrastructureMessage::set_allocated_change_module(::std::string* change_module) { - if (change_module != NULL) { - - } else { - - } - change_module_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), change_module); - // @@protoc_insertion_point(field_set_allocated:InfrastructureMessage.change_module) -} - -// bool connection_change_successful = 5; -inline void InfrastructureMessage::clear_connection_change_successful() { - connection_change_successful_ = false; -} -inline bool InfrastructureMessage::connection_change_successful() const { - // @@protoc_insertion_point(field_get:InfrastructureMessage.connection_change_successful) - return connection_change_successful_; -} -inline void InfrastructureMessage::set_connection_change_successful(bool value) { - - connection_change_successful_ = value; - // @@protoc_insertion_point(field_set:InfrastructureMessage.connection_change_successful) -} - -// ------------------------------------------------------------------- - -// TrafficMessage - -// string msg_id = 1; -inline void TrafficMessage::clear_msg_id() { - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& TrafficMessage::msg_id() const { - // @@protoc_insertion_point(field_get:TrafficMessage.msg_id) - return msg_id_.GetNoArena(); -} -inline void TrafficMessage::set_msg_id(const ::std::string& value) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:TrafficMessage.msg_id) -} -#if LANG_CXX11 -inline void TrafficMessage::set_msg_id(::std::string&& value) { - - msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:TrafficMessage.msg_id) -} -#endif -inline void TrafficMessage::set_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:TrafficMessage.msg_id) -} -inline void TrafficMessage::set_msg_id(const char* value, size_t size) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:TrafficMessage.msg_id) -} -inline ::std::string* TrafficMessage::mutable_msg_id() { - - // @@protoc_insertion_point(field_mutable:TrafficMessage.msg_id) - return msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* TrafficMessage::release_msg_id() { - // @@protoc_insertion_point(field_release:TrafficMessage.msg_id) - - return msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void TrafficMessage::set_allocated_msg_id(::std::string* msg_id) { - if (msg_id != NULL) { - - } else { - - } - msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), msg_id); - // @@protoc_insertion_point(field_set_allocated:TrafficMessage.msg_id) -} - -// int32 sim_time = 2; -inline void TrafficMessage::clear_sim_time() { - sim_time_ = 0; -} -inline ::google::protobuf::int32 TrafficMessage::sim_time() const { - // @@protoc_insertion_point(field_get:TrafficMessage.sim_time) - return sim_time_; -} -inline void TrafficMessage::set_sim_time(::google::protobuf::int32 value) { - - sim_time_ = value; - // @@protoc_insertion_point(field_set:TrafficMessage.sim_time) -} - -// string source = 3; -inline void TrafficMessage::clear_source() { - source_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& TrafficMessage::source() const { - // @@protoc_insertion_point(field_get:TrafficMessage.source) - return source_.GetNoArena(); -} -inline void TrafficMessage::set_source(const ::std::string& value) { - - source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:TrafficMessage.source) -} -#if LANG_CXX11 -inline void TrafficMessage::set_source(::std::string&& value) { - - source_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:TrafficMessage.source) -} -#endif -inline void TrafficMessage::set_source(const char* value) { - GOOGLE_DCHECK(value != NULL); - - source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:TrafficMessage.source) -} -inline void TrafficMessage::set_source(const char* value, size_t size) { - - source_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:TrafficMessage.source) -} -inline ::std::string* TrafficMessage::mutable_source() { - - // @@protoc_insertion_point(field_mutable:TrafficMessage.source) - return source_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* TrafficMessage::release_source() { - // @@protoc_insertion_point(field_release:TrafficMessage.source) - - return source_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void TrafficMessage::set_allocated_source(::std::string* source) { - if (source != NULL) { - - } else { - - } - source_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), source); - // @@protoc_insertion_point(field_set_allocated:TrafficMessage.source) -} - -// string destination = 4; -inline void TrafficMessage::clear_destination() { - destination_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& TrafficMessage::destination() const { - // @@protoc_insertion_point(field_get:TrafficMessage.destination) - return destination_.GetNoArena(); -} -inline void TrafficMessage::set_destination(const ::std::string& value) { - - destination_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:TrafficMessage.destination) -} -#if LANG_CXX11 -inline void TrafficMessage::set_destination(::std::string&& value) { - - destination_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:TrafficMessage.destination) -} -#endif -inline void TrafficMessage::set_destination(const char* value) { - GOOGLE_DCHECK(value != NULL); - - destination_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:TrafficMessage.destination) -} -inline void TrafficMessage::set_destination(const char* value, size_t size) { - - destination_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:TrafficMessage.destination) -} -inline ::std::string* TrafficMessage::mutable_destination() { - - // @@protoc_insertion_point(field_mutable:TrafficMessage.destination) - return destination_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* TrafficMessage::release_destination() { - // @@protoc_insertion_point(field_release:TrafficMessage.destination) - - return destination_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void TrafficMessage::set_allocated_destination(::std::string* destination) { - if (destination != NULL) { - - } else { - - } - destination_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), destination); - // @@protoc_insertion_point(field_set_allocated:TrafficMessage.destination) -} - -// int32 start = 5; -inline void TrafficMessage::clear_start() { - start_ = 0; -} -inline ::google::protobuf::int32 TrafficMessage::start() const { - // @@protoc_insertion_point(field_get:TrafficMessage.start) - return start_; -} -inline void TrafficMessage::set_start(::google::protobuf::int32 value) { - - start_ = value; - // @@protoc_insertion_point(field_set:TrafficMessage.start) -} - -// int32 stop = 6; -inline void TrafficMessage::clear_stop() { - stop_ = 0; -} -inline ::google::protobuf::int32 TrafficMessage::stop() const { - // @@protoc_insertion_point(field_get:TrafficMessage.stop) - return stop_; -} -inline void TrafficMessage::set_stop(::google::protobuf::int32 value) { - - stop_ = value; - // @@protoc_insertion_point(field_set:TrafficMessage.stop) -} - -// int32 interval = 7; -inline void TrafficMessage::clear_interval() { - interval_ = 0; -} -inline ::google::protobuf::int32 TrafficMessage::interval() const { - // @@protoc_insertion_point(field_get:TrafficMessage.interval) - return interval_; -} -inline void TrafficMessage::set_interval(::google::protobuf::int32 value) { - - interval_ = value; - // @@protoc_insertion_point(field_set:TrafficMessage.interval) -} - -// int32 packet_length = 8; -inline void TrafficMessage::clear_packet_length() { - packet_length_ = 0; -} -inline ::google::protobuf::int32 TrafficMessage::packet_length() const { - // @@protoc_insertion_point(field_get:TrafficMessage.packet_length) - return packet_length_; -} -inline void TrafficMessage::set_packet_length(::google::protobuf::int32 value) { - - packet_length_ = value; - // @@protoc_insertion_point(field_set:TrafficMessage.packet_length) -} - -// ------------------------------------------------------------------- - -// AttackMessage - -// .AttackMessage.MsgType msg_type = 1; -inline void AttackMessage::clear_msg_type() { - msg_type_ = 0; -} -inline ::AttackMessage_MsgType AttackMessage::msg_type() const { - // @@protoc_insertion_point(field_get:AttackMessage.msg_type) - return static_cast< ::AttackMessage_MsgType >(msg_type_); -} -inline void AttackMessage::set_msg_type(::AttackMessage_MsgType value) { - - msg_type_ = value; - // @@protoc_insertion_point(field_set:AttackMessage.msg_type) -} - -// string msg_id = 2; -inline void AttackMessage::clear_msg_id() { - msg_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& AttackMessage::msg_id() const { - // @@protoc_insertion_point(field_get:AttackMessage.msg_id) - return msg_id_.GetNoArena(); -} -inline void AttackMessage::set_msg_id(const ::std::string& value) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:AttackMessage.msg_id) -} -#if LANG_CXX11 -inline void AttackMessage::set_msg_id(::std::string&& value) { - - msg_id_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:AttackMessage.msg_id) -} -#endif -inline void AttackMessage::set_msg_id(const char* value) { - GOOGLE_DCHECK(value != NULL); - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:AttackMessage.msg_id) -} -inline void AttackMessage::set_msg_id(const char* value, size_t size) { - - msg_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:AttackMessage.msg_id) -} -inline ::std::string* AttackMessage::mutable_msg_id() { - - // @@protoc_insertion_point(field_mutable:AttackMessage.msg_id) - return msg_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* AttackMessage::release_msg_id() { - // @@protoc_insertion_point(field_release:AttackMessage.msg_id) - - return msg_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void AttackMessage::set_allocated_msg_id(::std::string* msg_id) { - if (msg_id != NULL) { - - } else { - - } - msg_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), msg_id); - // @@protoc_insertion_point(field_set_allocated:AttackMessage.msg_id) -} - -// int32 sim_time = 3; -inline void AttackMessage::clear_sim_time() { - sim_time_ = 0; -} -inline ::google::protobuf::int32 AttackMessage::sim_time() const { - // @@protoc_insertion_point(field_get:AttackMessage.sim_time) - return sim_time_; -} -inline void AttackMessage::set_sim_time(::google::protobuf::int32 value) { - - sim_time_ = value; - // @@protoc_insertion_point(field_set:AttackMessage.sim_time) -} - -// string attacked_module = 4; -inline void AttackMessage::clear_attacked_module() { - attacked_module_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& AttackMessage::attacked_module() const { - // @@protoc_insertion_point(field_get:AttackMessage.attacked_module) - return attacked_module_.GetNoArena(); -} -inline void AttackMessage::set_attacked_module(const ::std::string& value) { - - attacked_module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:AttackMessage.attacked_module) -} -#if LANG_CXX11 -inline void AttackMessage::set_attacked_module(::std::string&& value) { - - attacked_module_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:AttackMessage.attacked_module) -} -#endif -inline void AttackMessage::set_attacked_module(const char* value) { - GOOGLE_DCHECK(value != NULL); - - attacked_module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:AttackMessage.attacked_module) -} -inline void AttackMessage::set_attacked_module(const char* value, size_t size) { - - attacked_module_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:AttackMessage.attacked_module) -} -inline ::std::string* AttackMessage::mutable_attacked_module() { - - // @@protoc_insertion_point(field_mutable:AttackMessage.attacked_module) - return attacked_module_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* AttackMessage::release_attacked_module() { - // @@protoc_insertion_point(field_release:AttackMessage.attacked_module) - - return attacked_module_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void AttackMessage::set_allocated_attacked_module(::std::string* attacked_module) { - if (attacked_module != NULL) { - - } else { - - } - attacked_module_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), attacked_module); - // @@protoc_insertion_point(field_set_allocated:AttackMessage.attacked_module) -} - -// int32 start = 5; -inline void AttackMessage::clear_start() { - start_ = 0; -} -inline ::google::protobuf::int32 AttackMessage::start() const { - // @@protoc_insertion_point(field_get:AttackMessage.start) - return start_; -} -inline void AttackMessage::set_start(::google::protobuf::int32 value) { - - start_ = value; - // @@protoc_insertion_point(field_set:AttackMessage.start) -} - -// int32 stop = 6; -inline void AttackMessage::clear_stop() { - stop_ = 0; -} -inline ::google::protobuf::int32 AttackMessage::stop() const { - // @@protoc_insertion_point(field_get:AttackMessage.stop) - return stop_; -} -inline void AttackMessage::set_stop(::google::protobuf::int32 value) { - - stop_ = value; - // @@protoc_insertion_point(field_set:AttackMessage.stop) -} - -// int32 attack_probability = 7; -inline void AttackMessage::clear_attack_probability() { - attack_probability_ = 0; -} -inline ::google::protobuf::int32 AttackMessage::attack_probability() const { - // @@protoc_insertion_point(field_get:AttackMessage.attack_probability) - return attack_probability_; -} -inline void AttackMessage::set_attack_probability(::google::protobuf::int32 value) { - - attack_probability_ = value; - // @@protoc_insertion_point(field_set:AttackMessage.attack_probability) -} - -// ------------------------------------------------------------------- - -// CosimaMsgGroup - -// repeated .InitialMessage initial_messages = 1; -inline int CosimaMsgGroup::initial_messages_size() const { - return initial_messages_.size(); -} -inline void CosimaMsgGroup::clear_initial_messages() { - initial_messages_.Clear(); -} -inline ::InitialMessage* CosimaMsgGroup::mutable_initial_messages(int index) { - // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.initial_messages) - return initial_messages_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::InitialMessage >* -CosimaMsgGroup::mutable_initial_messages() { - // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.initial_messages) - return &initial_messages_; -} -inline const ::InitialMessage& CosimaMsgGroup::initial_messages(int index) const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.initial_messages) - return initial_messages_.Get(index); -} -inline ::InitialMessage* CosimaMsgGroup::add_initial_messages() { - // @@protoc_insertion_point(field_add:CosimaMsgGroup.initial_messages) - return initial_messages_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::InitialMessage >& -CosimaMsgGroup::initial_messages() const { - // @@protoc_insertion_point(field_list:CosimaMsgGroup.initial_messages) - return initial_messages_; -} - -// repeated .InfoMessage info_messages = 2; -inline int CosimaMsgGroup::info_messages_size() const { - return info_messages_.size(); -} -inline void CosimaMsgGroup::clear_info_messages() { - info_messages_.Clear(); -} -inline ::InfoMessage* CosimaMsgGroup::mutable_info_messages(int index) { - // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.info_messages) - return info_messages_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::InfoMessage >* -CosimaMsgGroup::mutable_info_messages() { - // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.info_messages) - return &info_messages_; -} -inline const ::InfoMessage& CosimaMsgGroup::info_messages(int index) const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.info_messages) - return info_messages_.Get(index); -} -inline ::InfoMessage* CosimaMsgGroup::add_info_messages() { - // @@protoc_insertion_point(field_add:CosimaMsgGroup.info_messages) - return info_messages_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::InfoMessage >& -CosimaMsgGroup::info_messages() const { - // @@protoc_insertion_point(field_list:CosimaMsgGroup.info_messages) - return info_messages_; -} - -// repeated .SynchronisationMessage synchronisation_messages = 3; -inline int CosimaMsgGroup::synchronisation_messages_size() const { - return synchronisation_messages_.size(); -} -inline void CosimaMsgGroup::clear_synchronisation_messages() { - synchronisation_messages_.Clear(); -} -inline ::SynchronisationMessage* CosimaMsgGroup::mutable_synchronisation_messages(int index) { - // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.synchronisation_messages) - return synchronisation_messages_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::SynchronisationMessage >* -CosimaMsgGroup::mutable_synchronisation_messages() { - // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.synchronisation_messages) - return &synchronisation_messages_; -} -inline const ::SynchronisationMessage& CosimaMsgGroup::synchronisation_messages(int index) const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.synchronisation_messages) - return synchronisation_messages_.Get(index); -} -inline ::SynchronisationMessage* CosimaMsgGroup::add_synchronisation_messages() { - // @@protoc_insertion_point(field_add:CosimaMsgGroup.synchronisation_messages) - return synchronisation_messages_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::SynchronisationMessage >& -CosimaMsgGroup::synchronisation_messages() const { - // @@protoc_insertion_point(field_list:CosimaMsgGroup.synchronisation_messages) - return synchronisation_messages_; -} - -// repeated .InfrastructureMessage infrastructure_messages = 4; -inline int CosimaMsgGroup::infrastructure_messages_size() const { - return infrastructure_messages_.size(); -} -inline void CosimaMsgGroup::clear_infrastructure_messages() { - infrastructure_messages_.Clear(); -} -inline ::InfrastructureMessage* CosimaMsgGroup::mutable_infrastructure_messages(int index) { - // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.infrastructure_messages) - return infrastructure_messages_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::InfrastructureMessage >* -CosimaMsgGroup::mutable_infrastructure_messages() { - // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.infrastructure_messages) - return &infrastructure_messages_; -} -inline const ::InfrastructureMessage& CosimaMsgGroup::infrastructure_messages(int index) const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.infrastructure_messages) - return infrastructure_messages_.Get(index); -} -inline ::InfrastructureMessage* CosimaMsgGroup::add_infrastructure_messages() { - // @@protoc_insertion_point(field_add:CosimaMsgGroup.infrastructure_messages) - return infrastructure_messages_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::InfrastructureMessage >& -CosimaMsgGroup::infrastructure_messages() const { - // @@protoc_insertion_point(field_list:CosimaMsgGroup.infrastructure_messages) - return infrastructure_messages_; -} - -// repeated .TrafficMessage traffic_messages = 5; -inline int CosimaMsgGroup::traffic_messages_size() const { - return traffic_messages_.size(); -} -inline void CosimaMsgGroup::clear_traffic_messages() { - traffic_messages_.Clear(); -} -inline ::TrafficMessage* CosimaMsgGroup::mutable_traffic_messages(int index) { - // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.traffic_messages) - return traffic_messages_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::TrafficMessage >* -CosimaMsgGroup::mutable_traffic_messages() { - // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.traffic_messages) - return &traffic_messages_; -} -inline const ::TrafficMessage& CosimaMsgGroup::traffic_messages(int index) const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.traffic_messages) - return traffic_messages_.Get(index); -} -inline ::TrafficMessage* CosimaMsgGroup::add_traffic_messages() { - // @@protoc_insertion_point(field_add:CosimaMsgGroup.traffic_messages) - return traffic_messages_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::TrafficMessage >& -CosimaMsgGroup::traffic_messages() const { - // @@protoc_insertion_point(field_list:CosimaMsgGroup.traffic_messages) - return traffic_messages_; -} - -// repeated .AttackMessage attack_messages = 6; -inline int CosimaMsgGroup::attack_messages_size() const { - return attack_messages_.size(); -} -inline void CosimaMsgGroup::clear_attack_messages() { - attack_messages_.Clear(); -} -inline ::AttackMessage* CosimaMsgGroup::mutable_attack_messages(int index) { - // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.attack_messages) - return attack_messages_.Mutable(index); -} -inline ::google::protobuf::RepeatedPtrField< ::AttackMessage >* -CosimaMsgGroup::mutable_attack_messages() { - // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.attack_messages) - return &attack_messages_; -} -inline const ::AttackMessage& CosimaMsgGroup::attack_messages(int index) const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.attack_messages) - return attack_messages_.Get(index); -} -inline ::AttackMessage* CosimaMsgGroup::add_attack_messages() { - // @@protoc_insertion_point(field_add:CosimaMsgGroup.attack_messages) - return attack_messages_.Add(); -} -inline const ::google::protobuf::RepeatedPtrField< ::AttackMessage >& -CosimaMsgGroup::attack_messages() const { - // @@protoc_insertion_point(field_list:CosimaMsgGroup.attack_messages) - return attack_messages_; -} - -// int32 current_time_step = 7; -inline void CosimaMsgGroup::clear_current_time_step() { - current_time_step_ = 0; -} -inline ::google::protobuf::int32 CosimaMsgGroup::current_time_step() const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.current_time_step) - return current_time_step_; -} -inline void CosimaMsgGroup::set_current_time_step(::google::protobuf::int32 value) { - - current_time_step_ = value; - // @@protoc_insertion_point(field_set:CosimaMsgGroup.current_time_step) -} - -// int32 number_of_message_groups = 8; -inline void CosimaMsgGroup::clear_number_of_message_groups() { - number_of_message_groups_ = 0; -} -inline ::google::protobuf::int32 CosimaMsgGroup::number_of_message_groups() const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.number_of_message_groups) - return number_of_message_groups_; -} -inline void CosimaMsgGroup::set_number_of_message_groups(::google::protobuf::int32 value) { - - number_of_message_groups_ = value; - // @@protoc_insertion_point(field_set:CosimaMsgGroup.number_of_message_groups) -} - -// int32 number_of_messages = 9; -inline void CosimaMsgGroup::clear_number_of_messages() { - number_of_messages_ = 0; -} -inline ::google::protobuf::int32 CosimaMsgGroup::number_of_messages() const { - // @@protoc_insertion_point(field_get:CosimaMsgGroup.number_of_messages) - return number_of_messages_; -} -inline void CosimaMsgGroup::set_number_of_messages(::google::protobuf::int32 value) { - - number_of_messages_ = value; - // @@protoc_insertion_point(field_set:CosimaMsgGroup.number_of_messages) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - -// ------------------------------------------------------------------- - - -// @@protoc_insertion_point(namespace_scope) - - -namespace google { -namespace protobuf { - -template <> struct is_proto_enum< ::SynchronisationMessage_MsgType> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::SynchronisationMessage_MsgType>() { - return ::SynchronisationMessage_MsgType_descriptor(); -} -template <> struct is_proto_enum< ::InfrastructureMessage_MsgType> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::InfrastructureMessage_MsgType>() { - return ::InfrastructureMessage_MsgType_descriptor(); -} -template <> struct is_proto_enum< ::AttackMessage_MsgType> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::AttackMessage_MsgType>() { - return ::AttackMessage_MsgType_descriptor(); -} - -} // namespace protobuf -} // namespace google - -// @@protoc_insertion_point(global_scope) - -#endif // PROTOBUF_INCLUDED_cosima_5fcore_2fmessages_2fmessage_2eproto diff --git a/cosima_omnetpp_project/modules/AgentAppTcp.cc b/cosima_omnetpp_project/modules/AgentAppTcp.cc deleted file mode 100644 index 96c4e5d..0000000 --- a/cosima_omnetpp_project/modules/AgentAppTcp.cc +++ /dev/null @@ -1,614 +0,0 @@ -/* - * AgentAppTcp.cc - * - * Created on: 11 Apr 2021 - * Author: malin - * - */ - -#include -#include -#include -#include -#include - -#include "inet/applications/base/ApplicationPacket_m.h" -#include "inet/common/ModuleAccess.h" -#include "inet/common/TagBase_m.h" -#include "inet/common/TimeTag_m.h" -#include "inet/common/lifecycle/ModuleOperations.h" -#include "inet/common/packet/Packet.h" -#include "inet/common/packet/chunk/ByteCountChunk.h" -#include "inet/common/packet/chunk/BytesChunk.h" -#include "inet/networklayer/common/L3AddressResolver.h" -#include "inet/transportlayer/contract/udp/UdpSocket.h" - -#include "../messages/CosimaSchedulerMessage_m.h" -#include "AgentAppTcp.h" - -#include "../messages/CosimaApplicationChunk_m.h" -#include "../messages/CosimaCtrlEvent_m.h" -#include "CosimaScheduler.h" - - -Define_Module(AgentAppTcp); - -AgentAppTcp::AgentAppTcp() { - scheduler = nullptr; -} - -AgentAppTcp::~AgentAppTcp() { - //delete and cancel all timers used - auto iter = timer.begin(); - - while (iter != timer.end()) { - std::list timerForModule = iter->second; - std::list::iterator it; - for (it = timerForModule.begin(); it != timerForModule.end(); ++it) { - scheduler->log(nameStr + ": cancel timer for client with ID " + std::to_string(iter->first), "debug"); - cancelAndDelete(*it); - } - ++iter; - } -} - -void AgentAppTcp::initialize(int stage) { - TcpAppBase::initialize(stage); - if (stage == inet::INITSTAGE_APPLICATION_LAYER) { - // get intern socket scheduler from simulation and cast to CosimaScheduler - scheduler = - check_and_cast(getSimulation()->getScheduler()); - // register module at scheduler - scheduler->setInterfaceModule(this, false); - // get name of parent module as string for logging - nameStr = this->getParentModule()->getName(); - } -} - -void AgentAppTcp::handleMessageWhenUp(cMessage *msg) -{ - if(typeid(*msg) == typeid(Timer)) { - // message is timer object in order to send data over the network - handleTimer(msg); - } - else if (msg->getKind() == 0 and msg->getArrivalGate() != gate("socketIn")) { - // message is an event from the scheduler - handleSocketEvent(msg, msg->getArrivalTime().dbl()); - } - else { - // message is an event at the socket in the network - TcpAppBase::socket.processMessage(msg); - } -} - -bool AgentAppTcp::handleSocketEvent(cMessage *msg, double couplingSimTime) { - - // simTime of coupled framework should have positive value - if (couplingSimTime < 0) { - delete msg; - return false; - } - - if (typeid(*msg) == typeid(CosimaCtrlEvent)) { - // is traffic event - CosimaCtrlEvent *msgCasted = dynamic_cast(msg); - auto receiverName = msgCasted->getDestination(); - - // get corresponding port for receiver name - auto receiverPort = scheduler->getPortForModule(receiverName); - - if (receiverPort == -1) { - delete msg; - return false; - } - - scheduler->log(nameStr + ": send traffic to " + receiverName + " at time " + simTime().str() + ".", "info"); - - auto packet = new inet::Packet(); - const auto &payload = inet::makeShared(); - auto msgSize = msgCasted->getPacketLength(); - payload->setChunkLength(inet::B(msgSize)); - payload->setIsTrafficMessage(true); - packet->insertAtBack(payload); - auto clientId = getModuleIdByName(receiverName); - setPacketForModuleId(clientId, packet); - - - auto timerMsg = getTimerForModuleId(clientId); - // type 0 means connect - timerMsg->setTimerType(0); - timerMsg->setReceiverName(receiverName); - timerMsg->setReceiverPort(receiverPort); - - // schedule timer as self message - scheduleAt(simTime(), timerMsg); - - delete msg; - return true; - } - - // make packet - if (typeid(*msg) == typeid(CosimaSchedulerMessage)) { - // is "normal" message - CosimaSchedulerMessage *msgCasted = dynamic_cast(msg); - auto content = msgCasted->getContent(); - - // get content from message - auto receiverName = msgCasted->getReceiver(); - auto senderName = msgCasted->getSender(); - auto msgId = msgCasted->getMsgId(); - auto msgSize = msgCasted->getSize(); - auto creation_time = msgCasted->getCreationTime(); - - // get corresponding port for receiver name - auto receiverPort = scheduler->getPortForModule(receiverName); - - if (receiverPort == -1) { - sendTransmissionErrorNotification(receiverName, msgId, false); - delete msg; - return false; - } - scheduler->log(nameStr + ": send message " + msgId + " to " + receiverName + " with port " + std::to_string(receiverPort) + " at time " - + std::to_string(couplingSimTime)); - std::string contentStr = content; - // scheduler->log("content is: " + contentStr); - - // make packet - auto packet = new inet::Packet(); - const auto &payload = inet::makeShared(); - payload->setContent(content); - payload->setReceiver(receiverName); - payload->setSender(senderName); - payload->setChunkLength(inet::B(msgSize)); - payload->setCreationTimeOmnetpp(couplingSimTime); - payload->setMsgId(msgId); - payload->setCreationTimeCoupling(creation_time); - payload->setIsTrafficMessage(false); - packet->insertAtBack(payload); - packet->setTimestamp(couplingSimTime); - - auto clientId = getModuleIdByName(receiverName); - setPacketForModuleId(clientId, packet); - - - auto timerMsg = getTimerForModuleId(clientId); - // type 0 means connect - timerMsg->setTimerType(0); - timerMsg->setReceiverName(receiverName); - timerMsg->setReceiverPort(receiverPort); - timerMsg->setMessageId(msgId); - - // schedule timer as self message - scheduleAt(simTime(), timerMsg); - - delete msg; - return true; - } - delete msg; - return false; -} - -Timer *AgentAppTcp::getTimerForModuleId(int clientId) { - auto iter = timer.begin(); - - // if timer is already created for client id, return it - while (iter != timer.end()) { - if (iter->first == clientId) { - std::list timerForModule = iter->second; - std::list::iterator it; - for (it = timerForModule.begin(); it != timerForModule.end(); ++it) { - Timer *matchedTimer = *it; - if(not matchedTimer->isScheduled()) { - this->take(matchedTimer); - return *it; - } - } - Timer *newTimer = new Timer(); - timer[clientId].push_back(newTimer); - this->take(newTimer); - return newTimer; - } - ++iter; - } - - // else create new timer and add it to the timer map - Timer *newTimer = new Timer(); - std::list timerForModule; - timerForModule.push_back(newTimer); - timer[clientId] = timerForModule; - this->take(newTimer); - return newTimer; -} - -void AgentAppTcp::setPacketForModuleId(int clientId, inet::Packet *packet) { - packetToClient[clientId].push_back(packet); -} - -inet::Packet *AgentAppTcp::getPacketForModuleId(int clientId) { - auto iter = packetToClient.begin(); - - if (packetToClient.count(clientId) and packetToClient[clientId].size() > 0) { - auto packet = packetToClient[clientId].front(); - packetToClient[clientId].pop_front(); - return packet; - } - return nullptr; -} - -int AgentAppTcp::getModuleIdByName(const char *module_name) -{ - if(module_name != nullptr and strlen(module_name) != 0) { - auto moduleObject = scheduler->getReceiverModule(module_name); - if (moduleObject == nullptr) { - return -1; - } - return moduleObject->getId(); - } - return -1; -} - - -void AgentAppTcp::handleTimer(cMessage *msg) { - if(msg != nullptr and typeid(*msg) == typeid(Timer)) { - Timer *recvtimer = dynamic_cast(msg); - switch (recvtimer->getTimerType()) { - case -1: - break; - - case 0: - connect(recvtimer->getReceiverName(), recvtimer->getReceiverPort(), recvtimer->getMessageId()); - break; - - case 1: - waitingForPortsToConnectTo.erase(recvtimer->getReceiverPort()); - sendData(recvtimer->getReceiverName(), recvtimer->getMessageId()); - break; - - case 2: - close(); - break; - - case 3: - renew(recvtimer->getReceiverName()); - break; - - case 4: - connectTimeout(recvtimer->getReceiverName(), recvtimer->getMessageId(), recvtimer->getReceiverPort()); - break; - - } - } else { - throw cRuntimeError("AgentAppTcp: called handleTimer with non-Timer object."); - } -} - -void AgentAppTcp::sendTransmissionErrorNotification(const char *receiverName, const char *msgId, bool timeout=false) { - CosimaSchedulerMessage *notification_message = new CosimaSchedulerMessage(); - notification_message->setTransmission_error(true); - notification_message->setSender(this->getParentModule()->getName()); - notification_message->setReceiver(receiverName); - notification_message->setTimeout(timeout); - notification_message->setMsgId(msgId); - scheduler->sendToCoupledSimulation(notification_message); -} - -void AgentAppTcp::connectTimeout(const char *receiverName, const char *msgId, int receiverPort) { - if (std::find(waitingForPortsToConnectTo.begin(), waitingForPortsToConnectTo.end(), receiverPort) != waitingForPortsToConnectTo.end()) { - scheduler->log(nameStr + " received connect timeout for " + receiverName + " with message ID " + msgId, "debug"); - - // case 1: called connect because received connect timeout and AgentApp is still waiting for connect - // -> send transmission error to coupled simulation and don't wait any longer - scheduler->log(nameStr + ": received connect timeout information for " + receiverName + " at time " + simTime().str(), "debug"); - sendTransmissionErrorNotification(receiverName, msgId, true); - waitingForPortsToConnectTo.erase(receiverPort); - } -} - - -void AgentAppTcp::connect(const char *receiverName, int receiverPort, const char *messageId) -{ - // case: received "normal" connect timer - // -> connect to given receiver - inet::TcpSocket clientSocket; - int clientId = getModuleIdByName(receiverName); - if(clientSockets.find(clientId) != clientSockets.end()) { - clientSocket = clientSockets[clientId]; - } else { - const char *localAddress = par("localAddress"); - int localPort = par("localPort"); - - clientSocket.setOutputGate(gate("socketOut")); - clientSocket.setCallback(this); - clientSocket.bind( - localAddress[0] ? inet::L3Address(localAddress) : inet::L3Address(), - localPort); - auto clientId = getModuleIdByName(receiverName); - clientSockets[clientId] = clientSocket; - } - // we need a new connId if this is not the first connection - clientSocket.renewSocket(); - - int timeToLive = par("timeToLive"); - if (timeToLive != -1) - clientSocket.setTimeToLive(timeToLive); - - int dscp = par("dscp"); - if (dscp != -1) - clientSocket.setDscp(dscp); - - int tos = par("tos"); - if (tos != -1) - clientSocket.setTos(tos); - - - inet::L3Address destination; - try { - inet::L3AddressResolver().tryResolve(receiverName, destination); - if (destination.isUnspecified()) { - scheduler->log(nameStr + ": connecting to " + receiverName + " and port " + std::to_string(receiverPort) + - ": cannot resolve destination address", "warning"); - } - else { - std::string receiverNameStr = receiverName; - std::string messageIdStr = messageId; - scheduler->log(nameStr + ": connecting to " + receiverNameStr + "(" + destination.str() + ") and port " + std::to_string(receiverPort), "debug"); - - clientSocket.connect(destination, receiverPort); - waitingForPortsToConnectTo.insert(receiverPort); - - numSessions++; - emit(connectSignal, 1L); - - - auto timerMsg = getTimerForModuleId(clientId); - // type 4 means connectTimeout - timerMsg->setTimerType(4); - timerMsg->setReceiverName(receiverNameStr.c_str()); - timerMsg->setReceiverPort(receiverPort); - timerMsg->setMessageId(messageIdStr.c_str()); - - } - clientSockets[clientId] = clientSocket; - } catch(...) { - scheduler->log(nameStr + ": Error when trying to resolve L3 address", "warning"); - sendTransmissionErrorNotification(receiverName, messageId); - waitingForPortsToConnectTo.erase(receiverPort); - } -} - -void AgentAppTcp::renew(const char *receiver_name) { - auto clientId = getModuleIdByName(receiver_name); - inet::TcpSocket clientSocket = clientSockets[clientId]; - clientSocket.renewSocket(); - clientSocket.setOutputGate(gate("socketOut")); - clientSocket.setCallback(this); - const char *localAddress = par("localAddress"); - int localPort = par("localPort"); - - clientSocket.bind( - localAddress[0] ? inet::L3Address(localAddress) : inet::L3Address(), - localPort); - clientSocket.listen(); -} - -void AgentAppTcp::socketEstablished(inet::TcpSocket *socket) { - auto moduleName = scheduler->getModuleNameFromPort(socket->getRemotePort()); - if(moduleName != "") { - auto timerMsg = getTimerForModuleId(getModuleIdByName(moduleName.c_str())); - // type 1 means send - timerMsg->setTimerType(1); - timerMsg->setReceiverName(moduleName.c_str()); - timerMsg->setReceiverPort(socket->getRemotePort()); - scheduleAt(simTime(), timerMsg); - } -} - -void AgentAppTcp::socketDataArrived(inet::TcpSocket *socket, - inet::Packet *msg, bool urgent) { - scheduler->log(nameStr + ": socket data arrived.", "debug"); - auto copy = msg->dup(); - simtime_t delay; - auto delay_d = 0.0; - auto replyReceiver = ""; - - packetsRcvd++; - bytesRcvd += msg->getByteLength(); - emit(inet::packetReceivedSignal, msg); - - if (msg->getArrivalGate() == gate("socketIn")) { - - inet::Packet *recvPacket = dynamic_cast(copy); - if (recvPacket != nullptr) { - auto replyContent = ""; - CosimaSchedulerMessage *answer = new CosimaSchedulerMessage(); - answer->setTransmission_error(false); - - inet::b offset = inet::b(0); // start from the beginning - auto foundApplicationChunk = false; - - while (auto chunk = recvPacket->peekAt(offset)->dupShared()) { // for each chunk - if (foundApplicationChunk) { - delete recvPacket; - break; - } - auto length = chunk->getChunkLength(); - - if (chunk->getClassName() == std::string("inet::SliceChunk")) { - auto newPacket = recvPacket->peekData(inet::Chunk::PeekFlag::PF_ALLOW_SERIALIZATION); - auto encapsulatedChunk = newPacket->getChunk(); - if (encapsulatedChunk->getClassName() != std::string("CosimaApplicationChunk")) { - if (encapsulatedChunk->getClassName() == std::string("inet::SequenceChunk")) { - inet::SequenceChunk *encapsulatedSequenceChunk = dynamic_cast(encapsulatedChunk.get()); - auto queue = encapsulatedSequenceChunk->getChunks(); - for (int i=0; i < queue.size(); i++) { - auto item = queue[i]; - auto itemget = item.get(); - if (itemget->getClassName() == std::string("inet::SliceChunk")) { - const inet::SliceChunk *encapsulatedSliceChunk = dynamic_cast(itemget); - auto appChunkInSliceChunk = encapsulatedSliceChunk->getChunk(); - auto appChunk = appChunkInSliceChunk->peek(inet::b(0), appChunkInSliceChunk->getChunkLength(), inet::Chunk::PeekFlag::PF_ALLOW_SERIALIZATION); - if (appChunk->isTrafficMessage()) { - scheduler->log(nameStr + " received traffic message at time "+ simTime().str(), "info"); - return; - } else { - bool alreadyReceived = (std::find(receivedMsgIds.begin(), receivedMsgIds.end(), appChunk->getMsgId()) != receivedMsgIds.end()); - if (alreadyReceived) { - return; - } - answer->setContent(appChunk->getContent()); - answer->setReceiver(appChunk->getReceiver()); - answer->setFalsified(appChunk->isFalsified()); - simtime_t delay = - simTime() - appChunk->getCreationTimeOmnetpp(); - auto delay_i = 0U; - delay_i = ceil(delay.dbl()*1000); - answer->setDelay(delay_i); - answer->setSender(appChunk->getSender()); - answer->setMsgId(appChunk->getMsgId()); - answer->setCreationTime(appChunk->getCreationTimeCoupling()); - foundApplicationChunk = true; - receivedMsgIds.push_back(appChunk->getMsgId()); - sendReply(answer); - } - } - } - } - } else { - auto appChunk = encapsulatedChunk->peek(inet::b(0), encapsulatedChunk->getChunkLength(), inet::Chunk::PeekFlag::PF_ALLOW_SERIALIZATION); - if (appChunk->isTrafficMessage()) { - scheduler->log(nameStr + " received traffic message at time "+ simTime().str(), "info"); - return; - } else { - bool alreadyReceived = (std::find(receivedMsgIds.begin(), receivedMsgIds.end(), appChunk->getMsgId()) != receivedMsgIds.end()); - if (alreadyReceived) { - return; - } - answer->setFalsified(appChunk->isFalsified()); - answer->setContent(appChunk->getContent()); - answer->setReceiver(appChunk->getReceiver()); - simtime_t delay = - simTime() - appChunk->getCreationTimeOmnetpp(); - auto delay_i = 0U; - delay_i = ceil(delay.dbl()*1000); - answer->setDelay(delay_i); - answer->setSender(appChunk->getSender()); - answer->setMsgId(appChunk->getMsgId()); - answer->setCreationTime(appChunk->getCreationTimeCoupling()); - foundApplicationChunk = true; - receivedMsgIds.push_back(appChunk->getMsgId()); - sendReply(answer); - } - } - } else if (chunk->getClassName() == std::string("CosimaApplicationChunk")) { - auto cosimaApplicationChunk = recvPacket->peekAt(offset, length, inet::Chunk::PeekFlag::PF_ALLOW_SERIALIZATION); - if (cosimaApplicationChunk->isTrafficMessage()) { - scheduler->log(nameStr + " received traffic message at time "+ simTime().str(), "info"); - return; - } else { - replyContent = cosimaApplicationChunk->getContent(); - simtime_t delay = simTime() - cosimaApplicationChunk->getCreationTimeOmnetpp(); - auto delay_i = 0U; - delay_i = ceil(delay.dbl()*1000); - replyReceiver = cosimaApplicationChunk->getReceiver(); - auto replySender = cosimaApplicationChunk->getSender(); - auto msgId = cosimaApplicationChunk->getMsgId(); - auto creationTime = cosimaApplicationChunk->getCreationTimeCoupling(); - answer->setFalsified(cosimaApplicationChunk->isFalsified()); - answer->setContent(replyContent); - answer->setReceiver(replyReceiver); - answer->setDelay(delay_i); - answer->setSender(replySender); - answer->setMsgId(msgId); - answer->setCreationTime(creationTime); - foundApplicationChunk = true; - receivedMsgIds.push_back(msgId); - sendReply(answer); - } - - } else { - offset += chunk->getChunkLength(); - if (offset >= recvPacket->getTotalLength()) { - scheduler->log("Couldn't find CosimaApplicationChunk in packet: " + recvPacket->str(), "warning"); - break; - } - answer->setDelay(delay_d); - } - } - delete answer; - delete msg; - } - } -} - -void AgentAppTcp::sendData(const char *receiverName, const char *messageId) { - int clientId = getModuleIdByName(receiverName); - if(clientSockets.find(clientId) != clientSockets.end()) { - inet::TcpSocket clientSocket; - clientSocket = clientSockets[clientId]; - - auto packet = getPacketForModuleId(clientId); - - if (packet == nullptr) { - scheduler->log(nameStr + " has not saved packet for clientId " + std::to_string(clientId), "warning"); - } - - if (packet) { - inet::Packet *sending; - sending = packet->dup(); - sending->setTimestamp(packet->getTimestamp()); - int numBytes = sending->getByteLength(); - emit(inet::packetSentSignal, sending); - clientSocket.send(sending); - packetsSent++; - bytesSent += numBytes; - if (packet->getOwner() == this) { - delete packet; - } - } - } else { - scheduler->log(nameStr + ": socket not connected to " + receiverName, "warning"); - connect(receiverName, scheduler->getPortForModule(receiverName), messageId); - } - -} - - -void AgentAppTcp::sendReply(CosimaSchedulerMessage *reply) { - scheduler->sendToCoupledSimulation(reply); -} - -void AgentAppTcp::socketClosed(inet::TcpSocket *socket) { - scheduler->log(nameStr + ": socket closed.", "debug"); - - TcpAppBase::socketClosed(socket); - if (operationalState == State::STOPPING_OPERATION && !this->socket.isOpen()) - startActiveOperationExtraTimeOrFinish(par("stopOperationExtraTime")); -} - -void AgentAppTcp::socketFailure(inet::TcpSocket *socket, int code) { - scheduler->log(nameStr + ": socket failure with code:" + std::to_string(code), "debug"); - TcpAppBase::socketFailure(socket, code); -} - -void AgentAppTcp::handleStartOperation(inet::LifecycleOperation *operation) { - const char *localAddress = par("localAddress"); - int localPort = par("localPort"); - - serverSocket.setOutputGate(gate("socketOut")); - serverSocket.setCallback(this); - serverSocket.bind( - localAddress[0] ? inet::L3Address(localAddress) : inet::L3Address(), - localPort); - serverSocket.listen(); -} - -void AgentAppTcp::handleStopOperation(inet::LifecycleOperation *operation) { - if (socket.isOpen()) close(); - delayActiveOperationFinish(par("stopOperationTimeout")); -} - -void AgentAppTcp::handleCrashOperation(inet::LifecycleOperation *operation) { -} - -void AgentAppTcp::finish() { -} diff --git a/cosima_omnetpp_project/modules/AgentAppUdp.cc b/cosima_omnetpp_project/modules/AgentAppUdp.cc deleted file mode 100644 index 0fb5ef4..0000000 --- a/cosima_omnetpp_project/modules/AgentAppUdp.cc +++ /dev/null @@ -1,193 +0,0 @@ -/* - * AgentAppUdp.cc - * - * Created on: 11 Apr 2021 - * Author: malin - * - * The AgentAppUdp represents the implementation of the application layer (and transport layer) - * of the end devices, which represent the agents in mosaik on the OMNeT++ side. - * The AgentAppUdp sends messages in OMNeT++ over UDP. - * - */ - -#include "AgentAppUdp.h" - -#include -#include -#include -#include - -#include "../messages/CosimaApplicationChunk_m.h" -#include "../messages/CosimaCtrlEvent_m.h" -#include "../modules/CosimaScheduler.h" -#include "inet/transportlayer/contract/udp/UdpSocket.h" -#include "inet/networklayer/common/L3AddressResolver.h" -#include "inet/common/packet/chunk/ByteCountChunk.h" -#include "inet/common/packet/chunk/BytesChunk.h" -#include "../messages/CosimaSchedulerMessage_m.h" - -using namespace inet; -using namespace omnetpp; - -Define_Module(AgentAppUdp); - -AgentAppUdp::~AgentAppUdp() { - scheduler = nullptr; -} - -void AgentAppUdp::initialize(int stage) { - // get name of parent module as string for logging - nameStr = this->getParentModule()->getName(); - - if (stage != inet::INITSTAGE_APPLICATION_LAYER) return; - - // get intern socket scheduler from simulation and cast to CosimaScheduler - scheduler = check_and_cast(getSimulation()->getScheduler()); - // register module at scheduler - scheduler->setInterfaceModule(this, false); - // initialize socket in simulation in OMNeT++ and bind to local port - // local port can be set in .ini file - socketudp.setOutputGate(gate("socketOut")); - int localPort = par("localPort"); - socketudp.bind(localPort); -} - - -void AgentAppUdp::handleMessage(cMessage *msg) { - // message can be socket event -> call handleSocketEvent() - // or message from network -> handle message - - if (msg->getArrivalGate() == gate("socketIn")) { - inet::Packet *packet = dynamic_cast(msg); - if (packet != nullptr) { - auto replyContent = ""; - auto answer = new CosimaSchedulerMessage(); - - // calculate delay - simtime_t delay = - scheduler->getSimulation()->getSimTime() - msg->getCreationTime(); - scheduler->log(nameStr + ": received message at time " + simTime().str() + " with delay " + delay.str()); - auto delay_i = 0U; - delay_i = ceil(delay.dbl()*1000); - - // handle reply to scheduler - inet::b offset = inet::b(0); // start from the beginning - auto foundApplicationChunk = false; - - while (auto chunk=packet->peekAt(offset)->dupShared()) { // for each chunk - if (foundApplicationChunk) { - // message is from other SocketAgent - delete packet; - break; - } - auto length = chunk->getChunkLength(); - - if (chunk->getClassName() == std::string("inet::SliceChunk")) { - auto newPacket = packet->peekData(0); - auto encapsulatedChunk = newPacket->getChunk(); - auto appChunk = encapsulatedChunk->peek(inet::b(0), encapsulatedChunk->getChunkLength()); - answer->setContent(appChunk->getContent()); - answer->setReceiver(appChunk->getReceiver()); - simtime_t delay = simTime() - appChunk->getCreationTimeOmnetpp(); - auto delay_i = 0U; - delay_i = ceil(delay.dbl()*1000); - answer->setDelay(delay_i); - answer->setSender(appChunk->getSender()); - answer->setMsgId(appChunk->getMsgId()); - answer->setCreationTime(appChunk->getCreationTimeCoupling()); - foundApplicationChunk = true; - - } else if (chunk->getClassName() == std::string("CosimaApplicationChunk")) { - replyContent = - packet->peekAt(offset, length)->getContent(); - auto replyReceiver = - packet->peekAt(offset, length)->getReceiver(); - auto replySender = - packet->peekAt(offset, length)->getSender(); - auto msgId = - packet->peekAt(offset, length)->getMsgId(); - auto creationTime = - packet->peekAt(offset, length)->getCreationTimeCoupling(); - answer->setContent(replyContent); - answer->setReceiver(replyReceiver); - answer->setDelay(delay_i); - answer->setSender(replySender); - answer->setMsgId(msgId); - answer->setCreationTime(creationTime); - foundApplicationChunk = true; - } else { - offset += chunk->getChunkLength(); - if (offset >= packet->getTotalLength()) { - scheduler->log("Couldn't find CosimaApplicationChunk in packet: " + packet->str(), "warning"); - break; - } - answer->setDelay(delay_i); - } - } - sendReply(answer); - delete answer; - } - - } else { - // message is placed from scheduler - handleSocketEvent(msg); - } -} - -void AgentAppUdp::handleSocketEvent(cMessage *msg) { - // make packet - if (typeid(*msg) == typeid(CosimaSchedulerMessage)) { - CosimaSchedulerMessage *msgCasted = dynamic_cast(msg); - - // get content from message - auto content = msgCasted->getContent(); - auto receiverName = msgCasted->getReceiver(); - auto senderName = msgCasted->getSender(); - auto msgId = msgCasted->getMsgId(); - auto msgSize = msgCasted->getSize(); - auto creationTime = msgCasted->getCreationTime(); - - // get corresponding port for receiver name - int receiverPort = scheduler->getPortForModule(receiverName); - std::string contentStr = content; - - scheduler->log(nameStr + ": send message " + msgId + + " to " + receiverName + " with port " + std::to_string(receiverPort) + " at time " - + std::to_string(creationTime), "info"); - // scheduler->log("content is: " + contentStr); - - // make packet - auto packet = new inet::Packet(); - const auto &payload = inet::makeShared(); - payload->setContent(content); - payload->setReceiver(receiverName); - payload->setSender(senderName); - payload->setChunkLength(inet::B(msgSize)); - payload->setCreationTimeOmnetpp(simTime()); - payload->setMsgId(msgId); - payload->setCreationTimeCoupling(creationTime); - packet->insertAtBack(payload); - - // get destination - inet::L3Address destAddress; - try { - destAddress = inet::L3AddressResolver().resolve(receiverName); - // send packet - socketudp.sendTo(packet, destAddress, receiverPort); - } catch(...) { - scheduler->log(nameStr + ": Error when trying to resolve L3 address", "warning"); - CosimaSchedulerMessage *notificationMessage = new CosimaSchedulerMessage(); - notificationMessage->setTransmission_error(true); - notificationMessage->setSender(nameStr.c_str()); - notificationMessage->setReceiver(receiverName); - scheduler->sendToCoupledSimulation(notificationMessage); - } - delete msgCasted; - } else { - delete msg; - } -} - -void AgentAppUdp::sendReply(CosimaSchedulerMessage *reply) { - scheduler->sendToCoupledSimulation(reply); -} - diff --git a/cosima_omnetpp_project/modules/CosimaScheduler.cc b/cosima_omnetpp_project/modules/CosimaScheduler.cc deleted file mode 100644 index 1ddbdd0..0000000 --- a/cosima_omnetpp_project/modules/CosimaScheduler.cc +++ /dev/null @@ -1,1030 +0,0 @@ -/* - * CosimaScheduler.cc - * - * Created on: 11 Apr 2021 - * Author: malin - */ -#include "CosimaScheduler.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../colors.h" -#include - - -#include "../messages/message.pb.h" - -#include "inet/common/packet/Packet.h" -#include "inet/networklayer/ipv4/Ipv4Header_m.h" -#include "../messages/message.pb.h" -#include "../messages/AttackEvent_m.h" -#include "../messages/ControlType_m.h" -#include "../messages/AttackType_m.h" -#include "../messages/CosimaApplicationChunk_m.h" -#include "../messages/CosimaCtrlEvent_m.h" -#include "CosimaScenarioManager.h" -#include "CosimaSchedulerModule.h" -#include "inet/networklayer/common/L3AddressResolver.h" - - -using std::chrono::duration_cast; -using std::chrono::milliseconds; -using std::chrono::microseconds; -using std::chrono::seconds; -using std::chrono::system_clock; - -Register_Class(CosimaScheduler); - -using namespace omnetpp; - -auto MAX_BYTE_SIZE_PER_MSG = 100000; - -// counter for messages -auto maxAdvanceCounter = 0U; -auto errorCounter = 0U; -auto disconnectCounter = 0U; -auto reconnectCounter = 0U; -auto messageCounter = 0U; - -// parameter from coupled simulation -auto stepSize = 1.0; -auto until = 100.0; -auto untilReached = false; // indicates whether simulation end is reached in coupled simulation -auto initialMessageReceived = false; - -auto receiveUntilLock = false; - -auto eventScheduled = false; - -auto currentStepInMessage = 0U; -auto lastStepInMessage = 0U; - -std::string loggingLevel; - -class Message { - /* - * This is a class, that may represent all used kinds of protocol buffer messages used in this project. - * It is used for lists of messages that might be of any type. - */ - SynchronisationMessage syncMessage; // SynchronisationMessages are used for time synchronisation between coupled simulation and OMNeT++. - InfoMessage infoMessage; // InfoMessages contain messages, that need to be simulated in the OMNeT++ network. - InfrastructureMessage infrastructureMessage; // InfrastructureMessages are used for dynamic changes in the infrastructure of the OMNeT++ network. - - enum {SYNCHRONISATION_MESSAGE, INFO_MESSAGE, INFRASTRUCTURE_MESSAGE} messageType; -public: - Message(){} - - void setMessage(SynchronisationMessage syncMessage) { - this->syncMessage = syncMessage; - this->messageType = SYNCHRONISATION_MESSAGE; - } - void setMessage(InfoMessage infoMessage) { - this->infoMessage = infoMessage; - this->messageType = INFO_MESSAGE; - } - void setMessage(InfrastructureMessage infrastructureMessage) { - this->infrastructureMessage = infrastructureMessage; - this->messageType = INFRASTRUCTURE_MESSAGE; - } - void printInfo() { - if(this->messageType == INFO_MESSAGE) { - this->infoMessage.PrintDebugString(); - } - else if(this->messageType == SYNCHRONISATION_MESSAGE) { - this->syncMessage.PrintDebugString(); - } - else if(this->messageType == INFRASTRUCTURE_MESSAGE) { - this->infrastructureMessage.PrintDebugString(); - } - } - int getByteSize() { - if(this->messageType == INFO_MESSAGE) { - return this->infoMessage.ByteSize(); - } - else if(this->messageType == SYNCHRONISATION_MESSAGE) { - return this->syncMessage.ByteSize(); - } - else if(this->messageType == INFRASTRUCTURE_MESSAGE) { - return this->infrastructureMessage.ByteSize(); - } - return -1; - } - CosimaMsgGroup addMessageToMsgGroup(CosimaMsgGroup msgGroup) { - if(this->messageType == INFO_MESSAGE) { - InfoMessage *infoMessage = msgGroup.add_info_messages(); - infoMessage->CopyFrom(this->infoMessage); - } - else if(this->messageType == SYNCHRONISATION_MESSAGE) { - SynchronisationMessage *syncMessage = msgGroup.add_synchronisation_messages(); - syncMessage->CopyFrom(this->syncMessage); - } - else if(this->messageType == INFRASTRUCTURE_MESSAGE) { - InfrastructureMessage *infrastructureMessage = msgGroup.add_infrastructure_messages(); - infrastructureMessage->CopyFrom(this->infrastructureMessage); - } - return msgGroup; - } -}; - -std::list messages; - -int CosimaScheduler::getNumberOfSavedMessages() { - int size = messages.size(); - return size; -} - -struct Receiver { - std::vector operator()(SOCKET listenerSocket) { - std::vector buf(MAX_BYTE_SIZE_PER_MSG); - - // accept connection, and store FD in connSocket - if (untilReached) { - return buf; - } - sockaddr_in sinRemote; - int addrSize = sizeof(sinRemote); - SOCKET sock = accept(listenerSocket, (sockaddr *)&sinRemote, - (socklen_t *)&addrSize); - if (sock == INVALID_SOCKET) - throw cRuntimeError("CosimaScheduler: accept() failed. Invalid Socket!"); - EV << "CosimaScheduler: connected!\n" << endl; - int bytes = recv(sock, buf.data(), buf.size(), 0); - return buf; - } -}; - -CosimaScheduler::CosimaScheduler() : cScheduler() { - // variables for socket connection to coupled simulation - listenerSocket = INVALID_SOCKET; - numModules = 0; - - // message for scheduling socket events from coupled simulation - socketEvent = nullptr; - - -} - -CosimaScheduler::~CosimaScheduler() = default; - -std::string CosimaScheduler::info() const { - return ("scheduler with socket option for integration of other simulation framework"); -} - -void CosimaScheduler::startRun() { - if (initsocketlibonce() != 0) - throw cRuntimeError("CosimaScheduler: Cannot initialize socket library"); - setupListener(); -} - -void CosimaScheduler::setupListener() { - listenerSocket = socket(AF_INET, SOCK_STREAM, 0); - if (listenerSocket == INVALID_SOCKET) - throw cRuntimeError("CosimaScheduler: cannot create socket. Socket is invalid"); - - int enable = 1; - if (setsockopt(listenerSocket, SOL_SOCKET, SO_REUSEADDR, - (const char *)&enable, sizeof(int)) < 0) - throw cRuntimeError("CosimaScheduler: cannot set socket option. Socket is invalid"); - - sockaddr_in sinInterface; - sinInterface.sin_family = AF_INET; - sinInterface.sin_addr.s_addr = INADDR_ANY; - sinInterface.sin_port = htons(PORT); - if (bind(listenerSocket, (sockaddr *)&sinInterface, sizeof(sockaddr_in)) == - SOCKET_ERROR) - throw cRuntimeError("CosimaScheduler: socket bind() failed. Please check if another instance of the simulation is already running."); - - listen(listenerSocket, SOMAXCONN); - - -} - -void CosimaScheduler::endRun() { - close(listenerSocket); - endSimulation(); -} - -void CosimaScheduler::executionResumed() { - cScheduler::executionResumed(); -} - -void CosimaScheduler::printCurrentTime() { - std::cout << getCurrentTime() << " "; -} - -std::string CosimaScheduler::getCurrentTime() { - timeval curTime; - gettimeofday(&curTime, NULL); - int usec = curTime.tv_usec; - - time_t rawtime; - struct tm * timeinfo; - char buffer [80]; - - time(&rawtime); - timeinfo = localtime(&rawtime); - - strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo); - - char currentTime[84] = ""; - sprintf(currentTime, "%s:%d", buffer, usec); - return currentTime; -} - -void CosimaScheduler::log(std::string info, std::string logLevel) { - if(logLevel.compare("warning") == 0) { - printCurrentTime(); - std::cout << FRED(" | WARNING | OMNeT++: "); - std::cout << info << endl; - } - if((logLevel.compare("info")) == 0 and (loggingLevel.compare("info") == 0 or loggingLevel.compare("debug") == 0)) { - printCurrentTime(); - std::cout << FBLU(" | INFO | OMNeT++: "); - std::cout << info << endl; - } - if(loggingLevel.compare("debug") == 0) { - printCurrentTime(); - std::cout << " | DEBUG | OMNeT++: "; - std::cout << info << endl; - } - - auto written = false; - while (not written) { - try { - std::fstream f; - - // opening file using ofstream - f.open("../log.txt", std::ios::app); - if (!f) { - return; - } else{ - f << getCurrentTime() << " OMNeT++: " << info << "\n"; - f.close(); - written = true; - } - } catch(...) { - } - } - -} - -void CosimaScheduler::log(std::string info) { - log(info, "debug"); -} - -void CosimaScheduler::setInterfaceModule(cModule *mod, bool isCosimaSchedulerModule) { - if (mod == nullptr) { - throw cRuntimeError( - "CosimaScheduler: setInterfaceModule() not called with a module object"); - } - std::string module_name = std::string(mod->getName()); - if (isCosimaSchedulerModule) { - schedulerModule = mod; - } else { - // possible to add several modules to array - addModule(mod); - } -} - -std::list CosimaScheduler::getModuleList () { - return modules; -} - -void CosimaScheduler::setScenarioManager(cModule *manager) { - log("CosimaScheduler: registered ScenarioManager."); - scenarioManager = manager; -} - -void CosimaScheduler::setAttackNetworkLayer(omnetpp::cModule *networkLayerModule) { - attackModules.push_back(networkLayerModule); -} - - -void CosimaScheduler::addModule(cModule *mod) { - modules.push_back(mod); - numModules = numModules + 1; -} - -int CosimaScheduler::getPortForModule(std::string module_name) { - if (module_name == "") { - return -1; - } - cModule *submod = getReceiverModule(module_name); - if (submod != nullptr and submod->hasPar("localPort")) { - return (submod->par("localPort")); - } - return -1; -} - -std::string CosimaScheduler::getModuleNameFromPort(int port) { - for (auto const& module : modules) { - if(module->par("localPort").intValue() == port) { - return module->getParentModule()->getName(); - } - } - return ""; -} - -cModule *CosimaScheduler::getReceiverModule(std::string module_name) { - // get corresponding module to server name - cModule *matchingModule = nullptr; - if (numModules == 0) { - return nullptr; - } - for (auto const& module : modules) { - std::string moduleNameCheck = std::string(module->getParentModule()->getName()); - if (moduleNameCheck.compare(module_name) == 0) { - matchingModule = module; - } - } - return (matchingModule); -} - -cModule *CosimaScheduler::getAttackNetworkLayerModule(std::string module_name) { - // get corresponding module to server name - cModule *matchingModule = nullptr; - for (auto const& module : attackModules) { - std::string moduleNameCheck = std::string(module->getParentModule()->getParentModule()->getName()); - if (moduleNameCheck.compare(module_name) == 0) { - matchingModule = module; - } - } - if (matchingModule == nullptr) { - throw cRuntimeError("No network layer module found, that implements attack functionality. Make sure to use the special AttackUe module."); - } - return (matchingModule); -} - -int CosimaScheduler::handleMsgFromCoupledSimulation(std::vector data) { - if (data.size() == 0) { - return 0; - } - GOOGLE_PROTOBUF_VERIFY_VERSION; - CosimaMsgGroup pmsg_group; - auto success = pmsg_group.ParseFromString(data.data()); - - bool insertedEvent = false; - - CosimaSchedulerModule *schedulerModuleObject = dynamic_cast(schedulerModule); - CosimaScenarioManager *scenarioManagerObject = dynamic_cast(scenarioManager); - - auto disconnectMsgCounter = 0U; - CosimaCtrlEvent *disconnectEvent = new CosimaCtrlEvent(); - disconnectEvent->setModuleNamesArraySize(pmsg_group.infrastructure_messages().size()); - std::vector disconnectModules; - disconnectEvent->setCtrlType(Disconnect); - - auto connectMsgCounter = 0U; - CosimaCtrlEvent *reconnectEvent = new CosimaCtrlEvent(); - reconnectEvent->setModuleNamesArraySize(pmsg_group.infrastructure_messages().size()); - std::vector reconnectModules; - reconnectEvent->setCtrlType(Reconnect); - - auto adjustedCouplingSimTime = 0.0; - - - // iterate over protobuf messages in message group - // get initial message - for(auto i=0; i < pmsg_group.initial_messages().size(); i++) { - InitialMessage initialMessage = pmsg_group.initial_messages(i); - initialMessageReceived = true; - // calculate from milliseconds to seconds - until = initialMessage.until()*1.0/1000; - // cancel until event - schedulerModuleObject->cancelUntilEvent(); - // schedule until event - schedulerModuleObject->untilEvent->setArrival(schedulerModule->getId(), -1, until); - getSimulation()->getFES()->insert(schedulerModuleObject->untilEvent); - log("CosimaScheduler: until event inserted for time " + std::to_string(until) + " at simtime " + simTime().str(), "info"); - - stepSize = initialMessage.step_size(); - auto loggingLevelMsg = initialMessage.logging_level(); - std::string loggingLevelStr = loggingLevelMsg; - loggingLevel = loggingLevelStr; - log("Setting logging level to: " + loggingLevelStr, "info"); - MAX_BYTE_SIZE_PER_MSG = initialMessage.max_byte_size_per_msg_group(); - log("Setting max byte size per message to " + std::to_string(MAX_BYTE_SIZE_PER_MSG)); - - // schedule max advance event - auto maxAdvance = (initialMessage.max_advance() * 1.0)/1000; - schedulerModuleObject->cancelMaxAdvanceEvent(); - schedulerModuleObject->maxAdvEvent->setCtrlType(ControlType::MaxAdvance); - if (maxAdvance >= simTime().dbl()) { - schedulerModuleObject->maxAdvEvent->setArrival(schedulerModule->getId(), -1, maxAdvance); - getSimulation()->getFES()->insert(schedulerModuleObject->maxAdvEvent); - log("CosimaScheduler: max advanced event inserted for time " + std::to_string(maxAdvance) + " at simtime " + simTime().str()); - } else { - log("max advance " + std::to_string(maxAdvance) + " at time " + simTime().str() + " not inserted"); - } - } - - // get info messages - for(auto i=0; i < pmsg_group.info_messages().size(); i++) { - InfoMessage infoMessage = pmsg_group.info_messages().Get(i); - // get information from message - auto msgId = infoMessage.msg_id(); - // calculate from milliseconds to seconds - auto maxAdvance = (infoMessage.max_advance() * 1.0)/1000; - auto sender = infoMessage.sender(); - auto receiver = infoMessage.receiver(); - auto size = infoMessage.size(); - auto content = infoMessage.content(); - auto msgCreationTime = infoMessage.creation_time(); - - // increase messageCounter for snapshot - messageCounter += 1; - - // look for receiver module in registered modules - auto module = getReceiverModule(sender); - - // schedule message - if (module) { - // create message with parameters from coupled simulation - CosimaSchedulerMessage *msg = new CosimaSchedulerMessage(); - msg->setSender(sender.c_str()); - msg->setReceiver(receiver.c_str()); - msg->setSize(size); - msg->setContent(content.c_str()); - msg->setMsgId(msgId.c_str()); - msg->setCreationTime(msgCreationTime); - - // cast message - cPacket *pkt = dynamic_cast(msg); - socketEvent = dynamic_cast(pkt); - - - adjustedCouplingSimTime = (infoMessage.sim_time() * 1.0) / 1000; - - log("Cosima Scheduler received message with sender: " + sender + " for simTime " + std::to_string(adjustedCouplingSimTime) + " and id " + msgId ); - - // schedule message as an event at the sender module - socketEvent->setArrival(module->getId(), -1, adjustedCouplingSimTime); - getSimulation()->getFES()->insert(socketEvent); - insertedEvent = true; - eventScheduled = true; - log("CosimaScheduler: message with sender " + sender + " and id " + msgId + " inserted."); - // schedule max advance event - schedulerModuleObject->cancelMaxAdvanceEvent(); - schedulerModuleObject->maxAdvEvent->setCtrlType(ControlType::MaxAdvance); - if (maxAdvance >= simTime().dbl()) { - schedulerModuleObject->maxAdvEvent->setArrival(schedulerModule->getId(), -1, maxAdvance); - getSimulation()->getFES()->insert(schedulerModuleObject->maxAdvEvent); - log("CosimaScheduler: max advanced event inserted for time " + std::to_string(maxAdvance) + " at simtime " + simTime().str()); - } else { - log("max advance " + std::to_string(maxAdvance) + " at time " + simTime().str() + " not inserted"); - } - - } else { - throw cRuntimeError("CosimaScheduler: Can't find module in modules array. Please make sure, that the number of agents matchers the number of modules in the scenario."); - } - } - - // get synchronization messages - for(auto i=0; i < pmsg_group.synchronisation_messages().size(); i++) { - SynchronisationMessage syncMessage = pmsg_group.synchronisation_messages().Get(i); - if (syncMessage.msg_type() == SynchronisationMessage_MsgType_WAITING) { - std::string msgId = syncMessage.msg_id(); - log("CosimaScheduler: received waiting message with Id " + msgId); - // Pretend to have an inserted event to not longer wait for messages - auto waitingMsgTime = ((syncMessage.sim_time()) * 1.0) / 1000; - auto maxAdvance = ((syncMessage.max_advance()) * 1.0) / 1000; - log("waiting msg time " + std::to_string(waitingMsgTime) + " sim time " + simTime().str() + " max advance " + std::to_string(maxAdvance)); - - // schedule max advance event - schedulerModuleObject->cancelMaxAdvanceEvent(); - schedulerModuleObject->maxAdvEvent->setCtrlType(ControlType::MaxAdvance); - if (maxAdvance >= simTime().dbl()) { - schedulerModuleObject->maxAdvEvent->setArrival(schedulerModule->getId(), -1, maxAdvance); - getSimulation()->getFES()->insert(schedulerModuleObject->maxAdvEvent); - log("CosimaScheduler: max advanced event inserted for time " + std::to_string(maxAdvance) + " at simtime " + simTime().str()); - if(waitingMsgTime >= simTime().dbl() or untilReached) { - log("CosimaScheduler: continue simulation."); - insertedEvent = true; - eventScheduled = true; - } else { - log("CosimaScheduler: continue waiting at time " + simTime().str() ); - informCoupledSimulationAboutWaiting(); - } - } else { - log("max advance " + std::to_string(maxAdvance) + " at time " + simTime().str() + " not inserted"); - log("CosimaScheduler: continue waiting at time " + simTime().str() ); - informCoupledSimulationAboutWaiting(); - } - } - - } - - // get infrastructure messages - for(auto i=0; i < pmsg_group.infrastructure_messages().size(); i++) { - InfrastructureMessage infrastructureMessage = pmsg_group.infrastructure_messages().Get(i); - adjustedCouplingSimTime = (infrastructureMessage.sim_time() * 1.0) / 1000; - if (infrastructureMessage.change_module() != "") { - if (infrastructureMessage.msg_type() == InfrastructureMessage_MsgType_DISCONNECT) { - auto msgId = infrastructureMessage.msg_id(); - auto adjustedCouplingSimTime = (infrastructureMessage.sim_time() * 1.0) / 1000; - log("CosimaScheduler: disconnect event inserted for simtime " + std::to_string(adjustedCouplingSimTime) + " for " + infrastructureMessage.change_module() + "."); - disconnectModules.push_back((infrastructureMessage.change_module()).c_str()); - - } else if (infrastructureMessage.msg_type() == InfrastructureMessage_MsgType_RECONNECT) { - auto msgId = infrastructureMessage.msg_id(); - log("CosimaScheduler: reconnect event inserted for simtime " + std::to_string(adjustedCouplingSimTime) + " for " + infrastructureMessage.change_module() + "."); - reconnectModules.push_back((infrastructureMessage.change_module()).c_str()); - } - } else { - log("Attention: no module name for infrastructure change set!"); - } - - } - - // get traffic messages - for(auto i=0; i < pmsg_group.traffic_messages().size(); i++) { - TrafficMessage trafficMessage = pmsg_group.traffic_messages().Get(i); - CosimaCtrlEvent *trafficEvent = new CosimaCtrlEvent(); - trafficEvent->setCtrlType(Traffic); - trafficEvent->setSource(trafficMessage.source().c_str()); - trafficEvent->setDestination(trafficMessage.destination().c_str()); - trafficEvent->setStart(trafficMessage.start()); - trafficEvent->setStop(trafficMessage.stop()); - trafficEvent->setInterval(trafficMessage.interval()); - trafficEvent->setPacketLength(trafficMessage.packet_length()); - auto arrivalTime = (trafficMessage.start() * 1.0) / 1000; - trafficEvent->setArrival(scenarioManagerObject->getId(), -1, arrivalTime); - log("CosimaScheduler: traffic event inserted for simtime " + std::to_string(arrivalTime) + " for " + trafficMessage.source() + " to " + trafficMessage.destination() + "."); - getSimulation()->getFES()->insert(trafficEvent); - insertedEvent = true; - eventScheduled = true; - } - - for(auto i=0; i < pmsg_group.attack_messages().size(); i++) { - AttackMessage attackMessage = pmsg_group.attack_messages().Get(i); - AttackEvent *attackEvent = new AttackEvent(); - if(attackMessage.msg_type() == AttackMessage_MsgType_PACKET_DELAY) { - attackEvent->setAttackType(PacketDelay); - } - else if(attackMessage.msg_type() == AttackMessage_MsgType_PACKET_DROP) { - attackEvent->setAttackType(PacketDrop); - } - else if(attackMessage.msg_type() == AttackMessage_MsgType_PACKET_FALSIFICATION) { - attackEvent->setAttackType(PacketFalsification); - } - attackEvent->setAttacked_module(attackMessage.attacked_module().c_str()); - attackEvent->setStart(attackMessage.start()); - attackEvent->setStop(attackMessage.stop()); - double attackProbability = attackMessage.attack_probability(); - attackEvent->setProbability(attackProbability); - attackEvent->setArrival(scenarioManagerObject->getId(), -1, simTime()); - getSimulation()->getFES()->insert(attackEvent); - } - - if(disconnectModules.size() > 0) { - disconnectEvent->setModuleNamesArraySize(disconnectModules.size()); - auto counter = 0; - for(const auto& module: disconnectModules) { - disconnectEvent->setModuleNames(counter, module.c_str()); - counter++; - } - disconnectEvent->setArrival(scenarioManagerObject->getId(), -1, adjustedCouplingSimTime); //TODO: set to time in msg - getSimulation()->getFES()->insert(disconnectEvent); - insertedEvent = true; - eventScheduled = true; - - disconnectModules.clear(); - } else { - delete disconnectEvent; - } - - if(reconnectModules.size() > 0) { - reconnectEvent->setModuleNamesArraySize(reconnectModules.size()); - auto counter = 0; - for(const auto& module: reconnectModules) { - reconnectEvent->setModuleNames(counter, module.c_str()); - counter++; - } - reconnectEvent->setArrival(scenarioManagerObject->getId(), -1, adjustedCouplingSimTime); //TODO: set to time in msg - getSimulation()->getFES()->insert(reconnectEvent); - insertedEvent = true; - eventScheduled = true; - - reconnectModules.clear(); - } else { - delete reconnectEvent; - } - - return (pmsg_group.number_of_message_groups()); -} - -void CosimaScheduler::informCoupledSimulationAboutWaiting() { - CosimaCtrlEvent *waitingEvent = new CosimaCtrlEvent(); - waitingEvent->setCtrlType(ContinueWaiting); - sendToCoupledSimulation(waitingEvent); -} - -void CosimaScheduler::receive() { - while (true) { - auto returnValue = std::async(std::launch::async, Receiver(), listenerSocket).get(); - if (strlen(returnValue.data()) != 0) { - int numberOfMsgGroups = handleMsgFromCoupledSimulation(returnValue); - for (int i=0; i < numberOfMsgGroups-1; i++) { - auto returnValue = std::async(std::launch::async, Receiver(), listenerSocket).get(); - handleMsgFromCoupledSimulation(returnValue); - } - return; - } - } -} - -cEvent *CosimaScheduler::guessNextEvent() { - return (sim->getFES()->peekFirst()); -} - -cEvent *CosimaScheduler::takeNextEvent() { - // calculate target time - cEvent *event = sim->getFES()->peekFirst(); - if (!event) { - if (untilReached) { - log("CosimaScheduler: reached until time in coupled simulation." ); - endSimulation(); - } - - } else if (initialMessageReceived){ - try { - // type 3 means: destination unreachable - // code 0 means: destination network unreachable - if (strcmp(event->getName(),"ICMP-error-#1-type3-code0") == 0) { - log("error msg received"); - if (event->isMessage()) { - omnetpp::cMessage *msg = dynamic_cast(event); - if (typeid(*msg) == typeid(inet::Packet)) { - inet::Packet *packet; - packet = dynamic_cast(msg); - inet::b offset = inet::b(0); // start from the beginning - bool foundHeader = false; - while (auto chunk = packet->peekAt(offset)->dupShared()) { // for each chunk - if (foundHeader) { - break; - } - auto length = chunk->getChunkLength(); - if (chunk->getClassName() == std::string("inet::Ipv4Header")) { - foundHeader = true; - int id = packet->peekAt(offset, length)->getIdentification(); - inet::L3AddressResolver addressResolver; - cModule *sourceModule = addressResolver.findHostWithAddress(packet->peekAt(offset, length)->getSourceAddress()); - if (sourceModule != nullptr) { - log("ICMP error: id: " + std::to_string(id) + " address: " + packet->peekAt(offset, length)->getSourceAddress().str() + " module: " + sourceModule->getName() ); - if (getReceiverModule(sourceModule->getName()) == nullptr) { - break; - } - log("CosimaScheduler: There was an error. Send notification message to coupled simulation. " ); - CosimaSchedulerMessage *notification_message = new CosimaSchedulerMessage(); - notification_message->setTransmission_error(true); - notification_message->setConnection_change_successful(true); - notification_message->setSender(sourceModule->getName()); - sendToCoupledSimulation(notification_message); - } - - } else { - offset += chunk->getChunkLength(); - } - } - } - } - - }; - } catch (...) { - log("CosimaScheduler: couldn't find host"); - - } - - // use time of next event - simtime_t eventSimtime = event->getArrivalTime(); - if(eventSimtime < lastEventTime) { - log("ATTENTION! CosimaScheduler: try to execute event for simtime " + eventSimtime.str() + ", but last event was at time " + lastEventTime.str() ); - throw cRuntimeError("Wrong simulation order. Please contact the Cosima Developer Team: https://cosima.offis.de/pages/contact"); - } - lastEventTime = eventSimtime; - } else { - log("Waiting for connection"); - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - } - - if (not eventScheduled) { - receive(); - } - - if (initialMessageReceived) { - // remove event from FES and return it - cEvent *tmp = sim->getFES()->removeFirst(); - ASSERT(tmp == event); - return (event); - } - return nullptr; -} - -void CosimaScheduler::putBackEvent(cEvent *event) { - sim->getFES()->putBackFirst(event); -} - -void CosimaScheduler::writeSimulationSnapshot() { - // write snapshot to file - eventnumber_t eventNumber = getSimulation()->getEventNumber(); - std::ofstream snapshotFile; - snapshotFile.open ("../tests/integration_tests/snapshot.txt"); - snapshotFile << eventNumber << " " << messageCounter << " " << errorCounter << " " << maxAdvanceCounter - << " " << disconnectCounter << " " << reconnectCounter << " " << lastEventTime.str(); - snapshotFile.close(); -} - - -void CosimaScheduler::endSimulation() { - writeSimulationSnapshot(); - log("CosimaScheduler: end simulation" ); - getSimulation()->callFinish(); - getSimulation()->getActiveEnvir()->alert("End of simulation"); - -} - -void CosimaScheduler::sendMsgGroupToCoupledSimulation(bool isWaitingMsg) { - std::list msgGroups; - CosimaMsgGroup msgGroup; - - msgGroup.set_current_time_step(currentStepInMessage); - - std::list newMessagesList; - if(isWaitingMsg) { - newMessagesList.push_back(messages.back()); - } else { - std::copy(messages.begin(), messages.end(), std::back_inserter(newMessagesList)); - messages.clear(); - lastStepInMessage = currentStepInMessage; - } - - auto length = newMessagesList.size(); - if (length == 0) { - return; - } - - int index = 0; - - int sock = 0, valread, client_fd; - struct sockaddr_in serv_addr; - - if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - printf("\n Socket creation error \n"); - return; - } - - serv_addr.sin_family = AF_INET; - serv_addr.sin_port = htons(4243); - - // Convert IPv4 and IPv6 addresses from text to binary - // form - if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) { - printf("\nInvalid address/ Address not supported \n"); - return; - } - - if ((client_fd = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))) < 0) { - printf("\nConnection Failed \n"); - return; - } - for (auto message: newMessagesList) { - auto byteSize = message.getByteSize(); - - if (msgGroup.ByteSize() + byteSize >= (MAX_BYTE_SIZE_PER_MSG - 100)) { // 3 bytes for "END" and 3 bytes for size - // message size is outside boundaries -> add message group to list and make new message group - CosimaMsgGroup msgGroupCopy; - msgGroupCopy.CopyFrom(msgGroup); - msgGroups.push_back(msgGroupCopy); - msgGroup.Clear(); - msgGroup.set_current_time_step(currentStepInMessage); - } - msgGroup = message.addMessageToMsgGroup(msgGroup); - msgGroup.set_number_of_messages(length); - if (index == length-1) { - // is last saved message -> set flag and add to list - msgGroups.push_back(msgGroup); - } - index++; - } - for (auto msgGroup: msgGroups) { - msgGroup.set_number_of_message_groups(msgGroups.size()); - - - // serialize message - std::string msg; - msgGroup.SerializeToString(&msg); - msg += "END"; - int numOfBytesbefore = strlen(msg.c_str()); - - msg.insert(msg.end(), MAX_BYTE_SIZE_PER_MSG - msg.size(), ' '); - int numOfBytes = strlen(msg.c_str()); - - if ((numOfBytes) != MAX_BYTE_SIZE_PER_MSG) { - throw cRuntimeError("CosimaScheduler: number of bytes is not max byte size per msg"); - } - - // send message over TCP socket - std::future asyncSend = std::async(send, sock, msg.c_str(), numOfBytes, 0); - size_t size = asyncSend.get(); - msg.clear(); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - } - close(sock); - receive(); -} - -void CosimaScheduler::setUntilReached(bool untilReachedValue) { - untilReached = untilReachedValue; -} - -bool CosimaScheduler::getUntilReached() { - return untilReached; -} - -void CosimaScheduler::setInitialMessageReceived(bool value) { - initialMessageReceived = value; -} - - -void CosimaScheduler::sendToCoupledSimulation(cMessage *reply) { - if (reply == nullptr) { - throw cRuntimeError("CosimaScheduler: Message is nullptr"); - } - // round up current simTime - auto currentStep = 0U; - currentStep = ceil(simTime().dbl()*1000); - auto currentStep_d = (currentStep * 1.0) / 1000; - CosimaCtrlEvent *replyEvent; - - auto scheduleMessage = true; - if (typeid(*reply) == typeid(CosimaCtrlEvent)) { - replyEvent = dynamic_cast(reply); - if(replyEvent->getCtrlType() == ContinueWaiting) { - scheduleMessage = false; - } - } - if (scheduleMessage) { - if (currentStep == lastStepInMessage) { - currentStep += 1; - currentStep_d = (currentStep * 1.0) / 1000; - } - if(currentStepInMessage == currentStep) { - log("CosimaScheduler: request to send message for the same step " + std::to_string(currentStep) + " back to coupled simulation." ); - } else { - // get scheduler module - CosimaSchedulerModule *schedulerModuleObject = dynamic_cast(schedulerModule); - CosimaCtrlEvent* endOfStepEvent = new CosimaCtrlEvent("send message to coupled simulation"); - endOfStepEvent->setCtrlType(ControlType::EndOfStep); - endOfStepEvent->setArrival(schedulerModule->getId(), -1, currentStep_d); - getSimulation()->getFES()->insert(endOfStepEvent); - currentStepInMessage = currentStep; - log("CosimaScheduler: insert event 'send message to coupled simulation' for time " + std::to_string(currentStep_d) ); - } - } - - if (typeid(*reply) == typeid(CosimaSchedulerMessage)) { - CosimaSchedulerMessage *replyMsg = dynamic_cast(reply); - - // get message content - auto sender = replyMsg->getSender(); - auto receiver = replyMsg->getReceiver(); - auto content = replyMsg->getContent(); - auto msgId = replyMsg->getMsgId(); - auto creationTime = replyMsg->getCreationTime(); - auto isFalsified = replyMsg->getFalsified(); - - std::stringstream logContent; - - if(replyMsg->getTransmission_error()) { - SynchronisationMessage syncMessage; - // SynchronisationMessage* syncMessage = pmsg_group.add_synchronisation_messages(); - - syncMessage.set_msg_type(SynchronisationMessage_MsgType_TRANSMISSION_ERROR); - syncMessage.set_timeout(replyMsg->getTimeout()); - syncMessage.set_timeout_msg_id(replyMsg->getMsgId()); - - std::stringstream errorCounterStr; - errorCounterStr << errorCounter; - auto mId = "ErrorMessage_" + errorCounterStr.str(); - syncMessage.set_msg_id(mId); - errorCounter += 1; - - Message message; - message.setMessage(syncMessage); - messages.push_back(message); - - logContent << "CosimaScheduler: send notification for transmission error for message with sender " << sender << - " and receiver " << receiver << " and messageId " << replyMsg->getMsgId() << " as message " << mId << - " back to coupled simulation. "; - log(logContent.str()); - logContent.str(""); - } else if (replyMsg->getDisconnected_event()) { - InfrastructureMessage infrastructureMessage; - - infrastructureMessage.set_msg_type(InfrastructureMessage_MsgType_DISCONNECT); - - std::stringstream disconnectCounterStr; - disconnectCounterStr << disconnectCounter; - auto mId = "DisconnectNotificationMessage_" + disconnectCounterStr.str(); - infrastructureMessage.set_msg_id(mId); - infrastructureMessage.set_sim_time(currentStep); - infrastructureMessage.set_connection_change_successful(replyMsg->getConnection_change_successful()); - disconnectCounter += 1; - - Message message; - message.setMessage(infrastructureMessage); - messages.push_back(message); - - logContent << "CosimaScheduler: send notification for disconnect for client " << sender << - " and id " << mId << " back to coupled simulation. "; - log(logContent.str()); - logContent.str(""); - } else if (replyMsg->getReconnected_event()) { - InfrastructureMessage infrastructureMessage; - - infrastructureMessage.set_msg_type(InfrastructureMessage_MsgType_RECONNECT); - std::stringstream reconnectCounterStr; - reconnectCounterStr << reconnectCounter; - auto mId = "ReconnectNotificationMessage_" + reconnectCounterStr.str(); - infrastructureMessage.set_msg_id(mId); - infrastructureMessage.set_sim_time(currentStep); - infrastructureMessage.set_connection_change_successful(replyMsg->getConnection_change_successful()); - reconnectCounter += 1; - - Message message; - message.setMessage(infrastructureMessage); - messages.push_back(message); - - logContent << "CosimaScheduler: send notification for reconnect for client " << sender << - " and id " << mId << " back to coupled simulation. "; - log(logContent.str()); - logContent.str(""); - } - else { - InfoMessage infoMessage; - - infoMessage.set_sender(sender); - infoMessage.set_receiver(receiver); - infoMessage.set_content(content); - infoMessage.set_sim_time(currentStep); - infoMessage.set_msg_id(msgId); - infoMessage.set_creation_time(creationTime); - infoMessage.set_is_falsified(isFalsified); - - Message message; - message.setMessage(infoMessage); - messages.push_back(message); - - logContent << "CosimaScheduler: send message with sender " << sender << " and current step " << currentStep << " back to coupled simulation."; - log(logContent.str()); - } - - } else if (typeid(*reply) == typeid(CosimaCtrlEvent)) { - if (replyEvent->getCtrlType() == ContinueWaiting) { - SynchronisationMessage syncMessage; - - syncMessage.set_msg_type(SynchronisationMessage_MsgType_WAITING); - syncMessage.set_sim_time(currentStep); - - Message message; - message.setMessage(syncMessage); - messages.push_back(message); - - log("CosimaScheduler: send message with waiting info back to coupled simulation"); - sendMsgGroupToCoupledSimulation(false); - - } else if (replyEvent->getCtrlType() == MaxAdvance) { - SynchronisationMessage syncMessage; - - syncMessage.set_msg_type(SynchronisationMessage_MsgType_MAX_ADVANCE); - - std::stringstream maxAdvanceCounterStr; - maxAdvanceCounterStr << maxAdvanceCounter; - auto mId = "MaxAdvanceMessage_" + maxAdvanceCounterStr.str(); - syncMessage.set_msg_id(mId); - syncMessage.set_sim_time(currentStep); - maxAdvanceCounter += 1; - - Message message; - message.setMessage(syncMessage); - messages.push_back(message); - - log("CosimaScheduler: send message with max advance info back to coupled simulation with Message id " + mId ); - - } - - } -} - diff --git a/omnetpp/.cproject b/omnetpp/.cproject new file mode 100644 index 0000000..2afbb34 --- /dev/null +++ b/omnetpp/.cproject @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/omnetpp/.nedexclusions b/omnetpp/.nedexclusions new file mode 100644 index 0000000..e69de29 diff --git a/omnetpp/.nedfolders b/omnetpp/.nedfolders new file mode 100644 index 0000000..9c558e3 --- /dev/null +++ b/omnetpp/.nedfolders @@ -0,0 +1 @@ +. diff --git a/omnetpp/.oppbuildspec b/omnetpp/.oppbuildspec new file mode 100644 index 0000000..30939fa --- /dev/null +++ b/omnetpp/.oppbuildspec @@ -0,0 +1,4 @@ + + + + diff --git a/omnetpp/.oppfeaturestate b/omnetpp/.oppfeaturestate new file mode 100644 index 0000000..5b7b1d1 --- /dev/null +++ b/omnetpp/.oppfeaturestate @@ -0,0 +1,2 @@ + + diff --git a/cosima_omnetpp_project/.project b/omnetpp/.project similarity index 92% rename from cosima_omnetpp_project/.project rename to omnetpp/.project index 1412a1d..a84432b 100644 --- a/cosima_omnetpp_project/.project +++ b/omnetpp/.project @@ -1,10 +1,10 @@ - cosima_omnetpp_project + cosima - inet - lte + inet4.5 + simu5g diff --git a/omnetpp/.qtenvrc b/omnetpp/.qtenvrc new file mode 100644 index 0000000..4ccd733 --- /dev/null +++ b/omnetpp/.qtenvrc @@ -0,0 +1,15 @@ +[General] +last-configname=SimpleNetworkUDP +last-runnumber=0 + +[RunModeProfiles] +fast-max-animation-speed=nan +fast-max-playback-speed=1e+06 +fast-min-animation-speed=nan +fast-min-playback-speed=1 +fast-playback-speed=1000 +run-max-animation-speed=nan +run-max-playback-speed=100 +run-min-animation-speed=nan +run-min-playback-speed=0.01 +run-playback-speed=1 diff --git a/cosima_omnetpp_project/colors.h b/omnetpp/colors.h similarity index 100% rename from cosima_omnetpp_project/colors.h rename to omnetpp/colors.h diff --git a/cosima_omnetpp_project/cosima.ini b/omnetpp/cosima.ini similarity index 99% rename from cosima_omnetpp_project/cosima.ini rename to omnetpp/cosima.ini index 31d248c..8931570 100644 --- a/cosima_omnetpp_project/cosima.ini +++ b/omnetpp/cosima.ini @@ -3,7 +3,6 @@ scheduler-class = "CosimaScheduler" total-stack = 2MiB output-vectors-memory-limit = 2MiB # change path to simulte files if necessary -ned-path = ../simulte/src;. print-undisposed = false *.*.ipv4.arp.typename = "GlobalArp" diff --git a/omnetpp/makefrag b/omnetpp/makefrag new file mode 100644 index 0000000..74b7cce --- /dev/null +++ b/omnetpp/makefrag @@ -0,0 +1,14 @@ +# +# Customize Makefile to link with winsoc on windows +# but without the user interface libs (oppenvir, oppcmdenv, opptkenv) +# + +ifeq ($(PLATFORM),win32.x86_64) +OMNETPP_LIBS += -lwsock32 +endif +MSGC:=$(MSGC) --msg6 + +# Compile Protobuf message +# I'm not sure this is the cleanest way of doing this. +messages/%.pb.cc messages/%.pb.h: ../protobuf/%.proto + protoc --cpp_out=messages -I../protobuf message.proto diff --git a/cosima_omnetpp_project/makemakefiles b/omnetpp/makemakefiles similarity index 100% rename from cosima_omnetpp_project/makemakefiles rename to omnetpp/makemakefiles diff --git a/cosima_omnetpp_project/messages/AttackEvent.msg b/omnetpp/messages/AttackEvent.msg similarity index 100% rename from cosima_omnetpp_project/messages/AttackEvent.msg rename to omnetpp/messages/AttackEvent.msg diff --git a/cosima_omnetpp_project/messages/AttackType.msg b/omnetpp/messages/AttackType.msg similarity index 100% rename from cosima_omnetpp_project/messages/AttackType.msg rename to omnetpp/messages/AttackType.msg diff --git a/cosima_omnetpp_project/messages/ControlType.msg b/omnetpp/messages/ControlType.msg similarity index 100% rename from cosima_omnetpp_project/messages/ControlType.msg rename to omnetpp/messages/ControlType.msg diff --git a/cosima_omnetpp_project/messages/CosimaApplicationChunk.msg b/omnetpp/messages/CosimaApplicationChunk.msg similarity index 100% rename from cosima_omnetpp_project/messages/CosimaApplicationChunk.msg rename to omnetpp/messages/CosimaApplicationChunk.msg diff --git a/cosima_omnetpp_project/messages/CosimaCtrlEvent.msg b/omnetpp/messages/CosimaCtrlEvent.msg similarity index 100% rename from cosima_omnetpp_project/messages/CosimaCtrlEvent.msg rename to omnetpp/messages/CosimaCtrlEvent.msg diff --git a/cosima_omnetpp_project/messages/CosimaSchedulerMessage.msg b/omnetpp/messages/CosimaSchedulerMessage.msg similarity index 100% rename from cosima_omnetpp_project/messages/CosimaSchedulerMessage.msg rename to omnetpp/messages/CosimaSchedulerMessage.msg diff --git a/cosima_omnetpp_project/messages/Timer.msg b/omnetpp/messages/Timer.msg similarity index 100% rename from cosima_omnetpp_project/messages/Timer.msg rename to omnetpp/messages/Timer.msg diff --git a/cosima_omnetpp_project/messages/TimerType.msg b/omnetpp/messages/TimerType.msg similarity index 100% rename from cosima_omnetpp_project/messages/TimerType.msg rename to omnetpp/messages/TimerType.msg diff --git a/cosima_omnetpp_project/messages/TimerType_m.cc b/omnetpp/messages/TimerType_m.cc similarity index 68% rename from cosima_omnetpp_project/messages/TimerType_m.cc rename to omnetpp/messages/TimerType_m.cc index 8f0f623..82c48ec 100644 --- a/cosima_omnetpp_project/messages/TimerType_m.cc +++ b/omnetpp/messages/TimerType_m.cc @@ -1,5 +1,5 @@ // -// Generated file, do not edit! Created by nedtool 5.6 from messages/TimerType.msg. +// Generated file, do not edit! Created by opp_msgtool 6.0 from messages/TimerType.msg. // // Disable warnings about unused variables, empty switch stmts, etc: @@ -27,6 +27,7 @@ #include #include #include +#include #include "TimerType_m.h" namespace omnetpp { @@ -149,71 +150,9 @@ void doParsimUnpacking(omnetpp::cCommBuffer *, T& t) } // namespace omnetpp -namespace { -template inline -typename std::enable_if::value && std::is_base_of::value, void *>::type -toVoidPtr(T* t) -{ - return (void *)(static_cast(t)); -} - -template inline -typename std::enable_if::value && !std::is_base_of::value, void *>::type -toVoidPtr(T* t) -{ - return (void *)dynamic_cast(t); -} - -template inline -typename std::enable_if::value, void *>::type -toVoidPtr(T* t) -{ - return (void *)static_cast(t); -} - -} - - -// forward -template -std::ostream& operator<<(std::ostream& out, const std::vector& vec); - -// Template rule to generate operator<< for shared_ptr -template -inline std::ostream& operator<<(std::ostream& out,const std::shared_ptr& t) { return out << t.get(); } - -// Template rule which fires if a struct or class doesn't have operator<< -template -inline std::ostream& operator<<(std::ostream& out,const T&) {return out;} - -// operator<< for std::vector -template -inline std::ostream& operator<<(std::ostream& out, const std::vector& vec) -{ - out.put('{'); - for(typename std::vector::const_iterator it = vec.begin(); it != vec.end(); ++it) - { - if (it != vec.begin()) { - out.put(','); out.put(' '); - } - out << *it; - } - out.put('}'); +Register_Enum(TimerType, (TimerType::NoType, TimerType::Connect, TimerType::Send, TimerType::Close, TimerType::Renew, TimerType::ConnectTimeout)); - char buf[32]; - sprintf(buf, " (size=%u)", (unsigned int)vec.size()); - out.write(buf, strlen(buf)); - return out; -} +namespace omnetpp { -EXECUTE_ON_STARTUP( - omnetpp::cEnum *e = omnetpp::cEnum::find("TimerType"); - if (!e) omnetpp::enums.getInstance()->add(e = new omnetpp::cEnum("TimerType")); - e->insert(NoType, "NoType"); - e->insert(Connect, "Connect"); - e->insert(Send, "Send"); - e->insert(Close, "Close"); - e->insert(Renew, "Renew"); - e->insert(ConnectTimeout, "ConnectTimeout"); -) +} // namespace omnetpp diff --git a/cosima_omnetpp_project/messages/TimerType_m.h b/omnetpp/messages/TimerType_m.h similarity index 52% rename from cosima_omnetpp_project/messages/TimerType_m.h rename to omnetpp/messages/TimerType_m.h index 29fbb9b..3b1c7d6 100644 --- a/cosima_omnetpp_project/messages/TimerType_m.h +++ b/omnetpp/messages/TimerType_m.h @@ -1,5 +1,5 @@ // -// Generated file, do not edit! Created by nedtool 5.6 from messages/TimerType.msg. +// Generated file, do not edit! Created by opp_msgtool 6.0 from messages/TimerType.msg. // #ifndef __TIMERTYPE_M_H @@ -10,16 +10,14 @@ #endif #include -// nedtool version check -#define MSGC_VERSION 0x0506 +// opp_msgtool version check +#define MSGC_VERSION 0x0600 #if (MSGC_VERSION!=OMNETPP_VERSION) -# error Version mismatch! Probably this file was generated by an earlier version of nedtool: 'make clean' should help. +# error Version mismatch! Probably this file was generated by an earlier version of opp_msgtool: 'make clean' should help. #endif - - /** - * Enum generated from messages/TimerType.msg:17 by nedtool. + * Enum generated from messages/TimerType.msg:17 by opp_msgtool. *
  * enum TimerType
  * {
@@ -41,5 +39,14 @@ enum TimerType {
     ConnectTimeout = 4
 };
 
+inline void doParsimPacking(omnetpp::cCommBuffer *b, const TimerType& e) { b->pack(static_cast(e)); }
+inline void doParsimUnpacking(omnetpp::cCommBuffer *b, TimerType& e) { int n; b->unpack(n); e = static_cast(n); }
+
+
+namespace omnetpp {
+
+
+}  // namespace omnetpp
+
 #endif // ifndef __TIMERTYPE_M_H
 
diff --git a/cosima_omnetpp_project/messages/Timer_m.cc b/omnetpp/messages/Timer_m.cc
similarity index 53%
rename from cosima_omnetpp_project/messages/Timer_m.cc
rename to omnetpp/messages/Timer_m.cc
index 7764def..5d6d570 100644
--- a/cosima_omnetpp_project/messages/Timer_m.cc
+++ b/omnetpp/messages/Timer_m.cc
@@ -1,5 +1,5 @@
 //
-// Generated file, do not edit! Created by nedtool 5.6 from messages/Timer.msg.
+// Generated file, do not edit! Created by opp_msgtool 6.0 from messages/Timer.msg.
 //
 
 // Disable warnings about unused variables, empty switch stmts, etc:
@@ -27,6 +27,7 @@
 #include 
 #include 
 #include 
+#include 
 #include "Timer_m.h"
 
 namespace omnetpp {
@@ -149,63 +150,6 @@ void doParsimUnpacking(omnetpp::cCommBuffer *, T& t)
 
 }  // namespace omnetpp
 
-namespace {
-template  inline
-typename std::enable_if::value && std::is_base_of::value, void *>::type
-toVoidPtr(T* t)
-{
-    return (void *)(static_cast(t));
-}
-
-template  inline
-typename std::enable_if::value && !std::is_base_of::value, void *>::type
-toVoidPtr(T* t)
-{
-    return (void *)dynamic_cast(t);
-}
-
-template  inline
-typename std::enable_if::value, void *>::type
-toVoidPtr(T* t)
-{
-    return (void *)static_cast(t);
-}
-
-}
-
-
-// forward
-template
-std::ostream& operator<<(std::ostream& out, const std::vector& vec);
-
-// Template rule to generate operator<< for shared_ptr
-template
-inline std::ostream& operator<<(std::ostream& out,const std::shared_ptr& t) { return out << t.get(); }
-
-// Template rule which fires if a struct or class doesn't have operator<<
-template
-inline std::ostream& operator<<(std::ostream& out,const T&) {return out;}
-
-// operator<< for std::vector
-template
-inline std::ostream& operator<<(std::ostream& out, const std::vector& vec)
-{
-    out.put('{');
-    for(typename std::vector::const_iterator it = vec.begin(); it != vec.end(); ++it)
-    {
-        if (it != vec.begin()) {
-            out.put(','); out.put(' ');
-        }
-        out << *it;
-    }
-    out.put('}');
-
-    char buf[32];
-    sprintf(buf, " (size=%u)", (unsigned int)vec.size());
-    out.write(buf, strlen(buf));
-    return out;
-}
-
 Register_Class(Timer)
 
 Timer::Timer(const char *name, short kind) : ::omnetpp::cPacket(name, kind)
@@ -298,7 +242,7 @@ void Timer::setMessageId(const char * messageId)
 class TimerDescriptor : public omnetpp::cClassDescriptor
 {
   private:
-    mutable const char **propertynames;
+    mutable const char **propertyNames;
     enum FieldConstants {
         FIELD_timerType,
         FIELD_receiverPort,
@@ -311,34 +255,38 @@ class TimerDescriptor : public omnetpp::cClassDescriptor
 
     virtual bool doesSupport(omnetpp::cObject *obj) const override;
     virtual const char **getPropertyNames() const override;
-    virtual const char *getProperty(const char *propertyname) const override;
+    virtual const char *getProperty(const char *propertyName) const override;
     virtual int getFieldCount() const override;
     virtual const char *getFieldName(int field) const override;
     virtual int findField(const char *fieldName) const override;
     virtual unsigned int getFieldTypeFlags(int field) const override;
     virtual const char *getFieldTypeString(int field) const override;
     virtual const char **getFieldPropertyNames(int field) const override;
-    virtual const char *getFieldProperty(int field, const char *propertyname) const override;
-    virtual int getFieldArraySize(void *object, int field) const override;
+    virtual const char *getFieldProperty(int field, const char *propertyName) const override;
+    virtual int getFieldArraySize(omnetpp::any_ptr object, int field) const override;
+    virtual void setFieldArraySize(omnetpp::any_ptr object, int field, int size) const override;
 
-    virtual const char *getFieldDynamicTypeString(void *object, int field, int i) const override;
-    virtual std::string getFieldValueAsString(void *object, int field, int i) const override;
-    virtual bool setFieldValueAsString(void *object, int field, int i, const char *value) const override;
+    virtual const char *getFieldDynamicTypeString(omnetpp::any_ptr object, int field, int i) const override;
+    virtual std::string getFieldValueAsString(omnetpp::any_ptr object, int field, int i) const override;
+    virtual void setFieldValueAsString(omnetpp::any_ptr object, int field, int i, const char *value) const override;
+    virtual omnetpp::cValue getFieldValue(omnetpp::any_ptr object, int field, int i) const override;
+    virtual void setFieldValue(omnetpp::any_ptr object, int field, int i, const omnetpp::cValue& value) const override;
 
     virtual const char *getFieldStructName(int field) const override;
-    virtual void *getFieldStructValuePointer(void *object, int field, int i) const override;
+    virtual omnetpp::any_ptr getFieldStructValuePointer(omnetpp::any_ptr object, int field, int i) const override;
+    virtual void setFieldStructValuePointer(omnetpp::any_ptr object, int field, int i, omnetpp::any_ptr ptr) const override;
 };
 
 Register_ClassDescriptor(TimerDescriptor)
 
 TimerDescriptor::TimerDescriptor() : omnetpp::cClassDescriptor(omnetpp::opp_typename(typeid(Timer)), "omnetpp::cPacket")
 {
-    propertynames = nullptr;
+    propertyNames = nullptr;
 }
 
 TimerDescriptor::~TimerDescriptor()
 {
-    delete[] propertynames;
+    delete[] propertyNames;
 }
 
 bool TimerDescriptor::doesSupport(omnetpp::cObject *obj) const
@@ -348,34 +296,34 @@ bool TimerDescriptor::doesSupport(omnetpp::cObject *obj) const
 
 const char **TimerDescriptor::getPropertyNames() const
 {
-    if (!propertynames) {
+    if (!propertyNames) {
         static const char *names[] = {  nullptr };
-        omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-        const char **basenames = basedesc ? basedesc->getPropertyNames() : nullptr;
-        propertynames = mergeLists(basenames, names);
+        omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+        const char **baseNames = base ? base->getPropertyNames() : nullptr;
+        propertyNames = mergeLists(baseNames, names);
     }
-    return propertynames;
+    return propertyNames;
 }
 
-const char *TimerDescriptor::getProperty(const char *propertyname) const
+const char *TimerDescriptor::getProperty(const char *propertyName) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    return basedesc ? basedesc->getProperty(propertyname) : nullptr;
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    return base ? base->getProperty(propertyName) : nullptr;
 }
 
 int TimerDescriptor::getFieldCount() const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    return basedesc ? 4+basedesc->getFieldCount() : 4;
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    return base ? 4+base->getFieldCount() : 4;
 }
 
 unsigned int TimerDescriptor::getFieldTypeFlags(int field) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldTypeFlags(field);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldTypeFlags(field);
+        field -= base->getFieldCount();
     }
     static unsigned int fieldTypeFlags[] = {
         FD_ISEDITABLE,    // FIELD_timerType
@@ -388,11 +336,11 @@ unsigned int TimerDescriptor::getFieldTypeFlags(int field) const
 
 const char *TimerDescriptor::getFieldName(int field) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldName(field);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldName(field);
+        field -= base->getFieldCount();
     }
     static const char *fieldNames[] = {
         "timerType",
@@ -405,22 +353,22 @@ const char *TimerDescriptor::getFieldName(int field) const
 
 int TimerDescriptor::findField(const char *fieldName) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    int base = basedesc ? basedesc->getFieldCount() : 0;
-    if (fieldName[0] == 't' && strcmp(fieldName, "timerType") == 0) return base+0;
-    if (fieldName[0] == 'r' && strcmp(fieldName, "receiverPort") == 0) return base+1;
-    if (fieldName[0] == 'r' && strcmp(fieldName, "receiverName") == 0) return base+2;
-    if (fieldName[0] == 'm' && strcmp(fieldName, "messageId") == 0) return base+3;
-    return basedesc ? basedesc->findField(fieldName) : -1;
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    int baseIndex = base ? base->getFieldCount() : 0;
+    if (strcmp(fieldName, "timerType") == 0) return baseIndex + 0;
+    if (strcmp(fieldName, "receiverPort") == 0) return baseIndex + 1;
+    if (strcmp(fieldName, "receiverName") == 0) return baseIndex + 2;
+    if (strcmp(fieldName, "messageId") == 0) return baseIndex + 3;
+    return base ? base->findField(fieldName) : -1;
 }
 
 const char *TimerDescriptor::getFieldTypeString(int field) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldTypeString(field);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldTypeString(field);
+        field -= base->getFieldCount();
     }
     static const char *fieldTypeStrings[] = {
         "int",    // FIELD_timerType
@@ -433,11 +381,11 @@ const char *TimerDescriptor::getFieldTypeString(int field) const
 
 const char **TimerDescriptor::getFieldPropertyNames(int field) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldPropertyNames(field);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldPropertyNames(field);
+        field -= base->getFieldCount();
     }
     switch (field) {
         case FIELD_timerType: {
@@ -448,60 +396,76 @@ const char **TimerDescriptor::getFieldPropertyNames(int field) const
     }
 }
 
-const char *TimerDescriptor::getFieldProperty(int field, const char *propertyname) const
+const char *TimerDescriptor::getFieldProperty(int field, const char *propertyName) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldProperty(field, propertyname);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldProperty(field, propertyName);
+        field -= base->getFieldCount();
     }
     switch (field) {
         case FIELD_timerType:
-            if (!strcmp(propertyname, "enum")) return "TimerType";
-            if (!strcmp(propertyname, "enum")) return "TimerType";
+            if (!strcmp(propertyName, "enum")) return "TimerType";
+            if (!strcmp(propertyName, "enum")) return "TimerType";
             return nullptr;
         default: return nullptr;
     }
 }
 
-int TimerDescriptor::getFieldArraySize(void *object, int field) const
+int TimerDescriptor::getFieldArraySize(omnetpp::any_ptr object, int field) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldArraySize(object, field);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldArraySize(object, field);
+        field -= base->getFieldCount();
     }
-    Timer *pp = (Timer *)object; (void)pp;
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
     switch (field) {
         default: return 0;
     }
 }
 
-const char *TimerDescriptor::getFieldDynamicTypeString(void *object, int field, int i) const
+void TimerDescriptor::setFieldArraySize(omnetpp::any_ptr object, int field, int size) const
+{
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount()){
+            base->setFieldArraySize(object, field, size);
+            return;
+        }
+        field -= base->getFieldCount();
+    }
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
+    switch (field) {
+        default: throw omnetpp::cRuntimeError("Cannot set array size of field %d of class 'Timer'", field);
+    }
+}
+
+const char *TimerDescriptor::getFieldDynamicTypeString(omnetpp::any_ptr object, int field, int i) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldDynamicTypeString(object,field,i);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldDynamicTypeString(object,field,i);
+        field -= base->getFieldCount();
     }
-    Timer *pp = (Timer *)object; (void)pp;
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
     switch (field) {
         default: return nullptr;
     }
 }
 
-std::string TimerDescriptor::getFieldValueAsString(void *object, int field, int i) const
+std::string TimerDescriptor::getFieldValueAsString(omnetpp::any_ptr object, int field, int i) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldValueAsString(object,field,i);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldValueAsString(object,field,i);
+        field -= base->getFieldCount();
     }
-    Timer *pp = (Timer *)object; (void)pp;
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
     switch (field) {
         case FIELD_timerType: return enum2string(pp->getTimerType(), "TimerType");
         case FIELD_receiverPort: return long2string(pp->getReceiverPort());
@@ -511,48 +475,108 @@ std::string TimerDescriptor::getFieldValueAsString(void *object, int field, int
     }
 }
 
-bool TimerDescriptor::setFieldValueAsString(void *object, int field, int i, const char *value) const
+void TimerDescriptor::setFieldValueAsString(omnetpp::any_ptr object, int field, int i, const char *value) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->setFieldValueAsString(object,field,i,value);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount()){
+            base->setFieldValueAsString(object, field, i, value);
+            return;
+        }
+        field -= base->getFieldCount();
     }
-    Timer *pp = (Timer *)object; (void)pp;
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
     switch (field) {
-        case FIELD_timerType: pp->setTimerType((TimerType)string2enum(value, "TimerType")); return true;
-        case FIELD_receiverPort: pp->setReceiverPort(string2long(value)); return true;
-        case FIELD_receiverName: pp->setReceiverName((value)); return true;
-        case FIELD_messageId: pp->setMessageId((value)); return true;
-        default: return false;
+        case FIELD_timerType: pp->setTimerType((TimerType)string2enum(value, "TimerType")); break;
+        case FIELD_receiverPort: pp->setReceiverPort(string2long(value)); break;
+        case FIELD_receiverName: pp->setReceiverName((value)); break;
+        case FIELD_messageId: pp->setMessageId((value)); break;
+        default: throw omnetpp::cRuntimeError("Cannot set field %d of class 'Timer'", field);
+    }
+}
+
+omnetpp::cValue TimerDescriptor::getFieldValue(omnetpp::any_ptr object, int field, int i) const
+{
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldValue(object,field,i);
+        field -= base->getFieldCount();
+    }
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
+    switch (field) {
+        case FIELD_timerType: return pp->getTimerType();
+        case FIELD_receiverPort: return pp->getReceiverPort();
+        case FIELD_receiverName: return pp->getReceiverName();
+        case FIELD_messageId: return pp->getMessageId();
+        default: throw omnetpp::cRuntimeError("Cannot return field %d of class 'Timer' as cValue -- field index out of range?", field);
+    }
+}
+
+void TimerDescriptor::setFieldValue(omnetpp::any_ptr object, int field, int i, const omnetpp::cValue& value) const
+{
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount()){
+            base->setFieldValue(object, field, i, value);
+            return;
+        }
+        field -= base->getFieldCount();
+    }
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
+    switch (field) {
+        case FIELD_timerType: pp->setTimerType((TimerType)value.intValue()); break;
+        case FIELD_receiverPort: pp->setReceiverPort(omnetpp::checked_int_cast(value.intValue())); break;
+        case FIELD_receiverName: pp->setReceiverName(value.stringValue()); break;
+        case FIELD_messageId: pp->setMessageId(value.stringValue()); break;
+        default: throw omnetpp::cRuntimeError("Cannot set field %d of class 'Timer'", field);
     }
 }
 
 const char *TimerDescriptor::getFieldStructName(int field) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldStructName(field);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldStructName(field);
+        field -= base->getFieldCount();
     }
     switch (field) {
         default: return nullptr;
     };
 }
 
-void *TimerDescriptor::getFieldStructValuePointer(void *object, int field, int i) const
+omnetpp::any_ptr TimerDescriptor::getFieldStructValuePointer(omnetpp::any_ptr object, int field, int i) const
 {
-    omnetpp::cClassDescriptor *basedesc = getBaseClassDescriptor();
-    if (basedesc) {
-        if (field < basedesc->getFieldCount())
-            return basedesc->getFieldStructValuePointer(object, field, i);
-        field -= basedesc->getFieldCount();
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount())
+            return base->getFieldStructValuePointer(object, field, i);
+        field -= base->getFieldCount();
     }
-    Timer *pp = (Timer *)object; (void)pp;
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
     switch (field) {
-        default: return nullptr;
+        default: return omnetpp::any_ptr(nullptr);
+    }
+}
+
+void TimerDescriptor::setFieldStructValuePointer(omnetpp::any_ptr object, int field, int i, omnetpp::any_ptr ptr) const
+{
+    omnetpp::cClassDescriptor *base = getBaseClassDescriptor();
+    if (base) {
+        if (field < base->getFieldCount()){
+            base->setFieldStructValuePointer(object, field, i, ptr);
+            return;
+        }
+        field -= base->getFieldCount();
+    }
+    Timer *pp = omnetpp::fromAnyPtr(object); (void)pp;
+    switch (field) {
+        default: throw omnetpp::cRuntimeError("Cannot set field %d of class 'Timer'", field);
     }
 }
 
+namespace omnetpp {
+
+}  // namespace omnetpp
+
diff --git a/cosima_omnetpp_project/messages/Timer_m.h b/omnetpp/messages/Timer_m.h
similarity index 78%
rename from cosima_omnetpp_project/messages/Timer_m.h
rename to omnetpp/messages/Timer_m.h
index 91d1496..7dbc7f9 100644
--- a/cosima_omnetpp_project/messages/Timer_m.h
+++ b/omnetpp/messages/Timer_m.h
@@ -1,5 +1,5 @@
 //
-// Generated file, do not edit! Created by nedtool 5.6 from messages/Timer.msg.
+// Generated file, do not edit! Created by opp_msgtool 6.0 from messages/Timer.msg.
 //
 
 #ifndef __TIMER_M_H
@@ -10,21 +10,19 @@
 #endif
 #include 
 
-// nedtool version check
-#define MSGC_VERSION 0x0506
+// opp_msgtool version check
+#define MSGC_VERSION 0x0600
 #if (MSGC_VERSION!=OMNETPP_VERSION)
-#    error Version mismatch! Probably this file was generated by an earlier version of nedtool: 'make clean' should help.
+#    error Version mismatch! Probably this file was generated by an earlier version of opp_msgtool: 'make clean' should help.
 #endif
 
-
-
 class Timer;
 // cplusplus {{
 #include "TimerType_m.h"
 // }}
 
 /**
- * Class generated from messages/Timer.msg:26 by nedtool.
+ * Class generated from messages/Timer.msg:26 by opp_msgtool.
  * 
  * packet Timer
  * {
@@ -47,8 +45,7 @@ class Timer : public ::omnetpp::cPacket
     void copy(const Timer& other);
 
   protected:
-    // protected and unimplemented operator==(), to prevent accidental usage
-    bool operator==(const Timer&);
+    bool operator==(const Timer&) = delete;
 
   public:
     Timer(const char *name=nullptr, short kind=0);
@@ -59,13 +56,15 @@ class Timer : public ::omnetpp::cPacket
     virtual void parsimPack(omnetpp::cCommBuffer *b) const override;
     virtual void parsimUnpack(omnetpp::cCommBuffer *b) override;
 
-    // field getter/setter methods
     virtual int getTimerType() const;
     virtual void setTimerType(int timerType);
+
     virtual int getReceiverPort() const;
     virtual void setReceiverPort(int receiverPort);
+
     virtual const char * getReceiverName() const;
     virtual void setReceiverName(const char * receiverName);
+
     virtual const char * getMessageId() const;
     virtual void setMessageId(const char * messageId);
 };
@@ -73,5 +72,12 @@ class Timer : public ::omnetpp::cPacket
 inline void doParsimPacking(omnetpp::cCommBuffer *b, const Timer& obj) {obj.parsimPack(b);}
 inline void doParsimUnpacking(omnetpp::cCommBuffer *b, Timer& obj) {obj.parsimUnpack(b);}
 
+
+namespace omnetpp {
+
+template<> inline Timer *fromAnyPtr(any_ptr ptr) { return check_and_cast(ptr.get()); }
+
+}  // namespace omnetpp
+
 #endif // ifndef __TIMER_M_H
 
diff --git a/omnetpp/messages/message.pb.cc b/omnetpp/messages/message.pb.cc
new file mode 100644
index 0000000..a50824a
--- /dev/null
+++ b/omnetpp/messages/message.pb.cc
@@ -0,0 +1,3246 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: message.proto
+
+#include "message.pb.h"
+
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+// @@protoc_insertion_point(includes)
+#include 
+
+PROTOBUF_PRAGMA_INIT_SEG
+
+namespace _pb = ::PROTOBUF_NAMESPACE_ID;
+namespace _pbi = _pb::internal;
+
+PROTOBUF_CONSTEXPR InitialMessage::InitialMessage(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.logging_level_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.max_advance_)*/0
+  , /*decltype(_impl_.until_)*/0
+  , /*decltype(_impl_.step_size_)*/0
+  , /*decltype(_impl_.max_byte_size_per_msg_group_)*/0
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct InitialMessageDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR InitialMessageDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~InitialMessageDefaultTypeInternal() {}
+  union {
+    InitialMessage _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 InitialMessageDefaultTypeInternal _InitialMessage_default_instance_;
+PROTOBUF_CONSTEXPR InfoMessage::InfoMessage(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.sender_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.receiver_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.content_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.max_advance_)*/0
+  , /*decltype(_impl_.sim_time_)*/0
+  , /*decltype(_impl_.size_)*/0
+  , /*decltype(_impl_.creation_time_)*/0
+  , /*decltype(_impl_.is_falsified_)*/false
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct InfoMessageDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR InfoMessageDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~InfoMessageDefaultTypeInternal() {}
+  union {
+    InfoMessage _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 InfoMessageDefaultTypeInternal _InfoMessage_default_instance_;
+PROTOBUF_CONSTEXPR SynchronisationMessage::SynchronisationMessage(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.timeout_msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.msg_type_)*/0
+  , /*decltype(_impl_.sim_time_)*/0
+  , /*decltype(_impl_.max_advance_)*/0
+  , /*decltype(_impl_.timeout_)*/false
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct SynchronisationMessageDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR SynchronisationMessageDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~SynchronisationMessageDefaultTypeInternal() {}
+  union {
+    SynchronisationMessage _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 SynchronisationMessageDefaultTypeInternal _SynchronisationMessage_default_instance_;
+PROTOBUF_CONSTEXPR InfrastructureMessage::InfrastructureMessage(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.change_module_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.msg_type_)*/0
+  , /*decltype(_impl_.sim_time_)*/0
+  , /*decltype(_impl_.connection_change_successful_)*/false
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct InfrastructureMessageDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR InfrastructureMessageDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~InfrastructureMessageDefaultTypeInternal() {}
+  union {
+    InfrastructureMessage _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 InfrastructureMessageDefaultTypeInternal _InfrastructureMessage_default_instance_;
+PROTOBUF_CONSTEXPR TrafficMessage::TrafficMessage(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.source_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.destination_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.sim_time_)*/0
+  , /*decltype(_impl_.start_)*/0
+  , /*decltype(_impl_.stop_)*/0
+  , /*decltype(_impl_.interval_)*/0
+  , /*decltype(_impl_.packet_length_)*/0
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct TrafficMessageDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR TrafficMessageDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~TrafficMessageDefaultTypeInternal() {}
+  union {
+    TrafficMessage _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TrafficMessageDefaultTypeInternal _TrafficMessage_default_instance_;
+PROTOBUF_CONSTEXPR AttackMessage::AttackMessage(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.msg_id_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.attacked_module_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
+  , /*decltype(_impl_.msg_type_)*/0
+  , /*decltype(_impl_.sim_time_)*/0
+  , /*decltype(_impl_.start_)*/0
+  , /*decltype(_impl_.stop_)*/0
+  , /*decltype(_impl_.attack_probability_)*/0
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct AttackMessageDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR AttackMessageDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~AttackMessageDefaultTypeInternal() {}
+  union {
+    AttackMessage _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 AttackMessageDefaultTypeInternal _AttackMessage_default_instance_;
+PROTOBUF_CONSTEXPR CosimaMsgGroup::CosimaMsgGroup(
+    ::_pbi::ConstantInitialized): _impl_{
+    /*decltype(_impl_.initial_messages_)*/{}
+  , /*decltype(_impl_.info_messages_)*/{}
+  , /*decltype(_impl_.synchronisation_messages_)*/{}
+  , /*decltype(_impl_.infrastructure_messages_)*/{}
+  , /*decltype(_impl_.traffic_messages_)*/{}
+  , /*decltype(_impl_.attack_messages_)*/{}
+  , /*decltype(_impl_.current_time_step_)*/0
+  , /*decltype(_impl_.number_of_message_groups_)*/0
+  , /*decltype(_impl_.number_of_messages_)*/0
+  , /*decltype(_impl_._cached_size_)*/{}} {}
+struct CosimaMsgGroupDefaultTypeInternal {
+  PROTOBUF_CONSTEXPR CosimaMsgGroupDefaultTypeInternal()
+      : _instance(::_pbi::ConstantInitialized{}) {}
+  ~CosimaMsgGroupDefaultTypeInternal() {}
+  union {
+    CosimaMsgGroup _instance;
+  };
+};
+PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CosimaMsgGroupDefaultTypeInternal _CosimaMsgGroup_default_instance_;
+static ::_pb::Metadata file_level_metadata_message_2eproto[7];
+static const ::_pb::EnumDescriptor* file_level_enum_descriptors_message_2eproto[3];
+static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_message_2eproto = nullptr;
+
+const uint32_t TableStruct_message_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _impl_.msg_id_),
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _impl_.max_advance_),
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _impl_.until_),
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _impl_.step_size_),
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _impl_.logging_level_),
+  PROTOBUF_FIELD_OFFSET(::InitialMessage, _impl_.max_byte_size_per_msg_group_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.msg_id_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.max_advance_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.sim_time_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.sender_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.receiver_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.size_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.content_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.creation_time_),
+  PROTOBUF_FIELD_OFFSET(::InfoMessage, _impl_.is_falsified_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _impl_.msg_type_),
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _impl_.msg_id_),
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _impl_.sim_time_),
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _impl_.max_advance_),
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _impl_.timeout_),
+  PROTOBUF_FIELD_OFFSET(::SynchronisationMessage, _impl_.timeout_msg_id_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::InfrastructureMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::InfrastructureMessage, _impl_.msg_type_),
+  PROTOBUF_FIELD_OFFSET(::InfrastructureMessage, _impl_.msg_id_),
+  PROTOBUF_FIELD_OFFSET(::InfrastructureMessage, _impl_.sim_time_),
+  PROTOBUF_FIELD_OFFSET(::InfrastructureMessage, _impl_.change_module_),
+  PROTOBUF_FIELD_OFFSET(::InfrastructureMessage, _impl_.connection_change_successful_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.msg_id_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.sim_time_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.source_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.destination_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.start_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.stop_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.interval_),
+  PROTOBUF_FIELD_OFFSET(::TrafficMessage, _impl_.packet_length_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.msg_type_),
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.msg_id_),
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.sim_time_),
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.attacked_module_),
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.start_),
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.stop_),
+  PROTOBUF_FIELD_OFFSET(::AttackMessage, _impl_.attack_probability_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  ~0u,  // no _inlined_string_donated_
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.initial_messages_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.info_messages_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.synchronisation_messages_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.infrastructure_messages_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.traffic_messages_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.attack_messages_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.current_time_step_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.number_of_message_groups_),
+  PROTOBUF_FIELD_OFFSET(::CosimaMsgGroup, _impl_.number_of_messages_),
+};
+static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
+  { 0, -1, -1, sizeof(::InitialMessage)},
+  { 12, -1, -1, sizeof(::InfoMessage)},
+  { 27, -1, -1, sizeof(::SynchronisationMessage)},
+  { 39, -1, -1, sizeof(::InfrastructureMessage)},
+  { 50, -1, -1, sizeof(::TrafficMessage)},
+  { 64, -1, -1, sizeof(::AttackMessage)},
+  { 77, -1, -1, sizeof(::CosimaMsgGroup)},
+};
+
+static const ::_pb::Message* const file_default_instances[] = {
+  &::_InitialMessage_default_instance_._instance,
+  &::_InfoMessage_default_instance_._instance,
+  &::_SynchronisationMessage_default_instance_._instance,
+  &::_InfrastructureMessage_default_instance_._instance,
+  &::_TrafficMessage_default_instance_._instance,
+  &::_AttackMessage_default_instance_._instance,
+  &::_CosimaMsgGroup_default_instance_._instance,
+};
+
+const char descriptor_table_protodef_message_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
+  "\n\rmessage.proto\"\223\001\n\016InitialMessage\022\016\n\006ms"
+  "g_id\030\001 \001(\t\022\023\n\013max_advance\030\002 \001(\005\022\r\n\005until"
+  "\030\003 \001(\005\022\021\n\tstep_size\030\004 \001(\005\022\025\n\rlogging_lev"
+  "el\030\005 \001(\t\022#\n\033max_byte_size_per_msg_group\030"
+  "\006 \001(\005\"\262\001\n\013InfoMessage\022\016\n\006msg_id\030\001 \001(\t\022\023\n"
+  "\013max_advance\030\002 \001(\005\022\020\n\010sim_time\030\003 \001(\005\022\016\n\006"
+  "sender\030\004 \001(\t\022\020\n\010receiver\030\005 \001(\t\022\014\n\004size\030\006"
+  " \001(\005\022\017\n\007content\030\007 \001(\t\022\025\n\rcreation_time\030\010"
+  " \001(\005\022\024\n\014is_falsified\030\t \001(\010\"\354\001\n\026Synchroni"
+  "sationMessage\0221\n\010msg_type\030\001 \001(\0162\037.Synchr"
+  "onisationMessage.MsgType\022\016\n\006msg_id\030\002 \001(\t"
+  "\022\020\n\010sim_time\030\003 \001(\005\022\023\n\013max_advance\030\004 \001(\005\022"
+  "\017\n\007timeout\030\005 \001(\010\022\026\n\016timeout_msg_id\030\006 \001(\t"
+  "\"\?\n\007MsgType\022\017\n\013MAX_ADVANCE\020\000\022\013\n\007WAITING\020"
+  "\001\022\026\n\022TRANSMISSION_ERROR\020\002\"\322\001\n\025Infrastruc"
+  "tureMessage\0220\n\010msg_type\030\001 \001(\0162\036.Infrastr"
+  "uctureMessage.MsgType\022\016\n\006msg_id\030\002 \001(\t\022\020\n"
+  "\010sim_time\030\003 \001(\005\022\025\n\rchange_module\030\004 \001(\t\022$"
+  "\n\034connection_change_successful\030\005 \001(\010\"(\n\007"
+  "MsgType\022\016\n\nDISCONNECT\020\000\022\r\n\tRECONNECT\020\001\"\235"
+  "\001\n\016TrafficMessage\022\016\n\006msg_id\030\001 \001(\t\022\020\n\010sim"
+  "_time\030\002 \001(\005\022\016\n\006source\030\003 \001(\t\022\023\n\013destinati"
+  "on\030\004 \001(\t\022\r\n\005start\030\005 \001(\005\022\014\n\004stop\030\006 \001(\005\022\020\n"
+  "\010interval\030\007 \001(\005\022\025\n\rpacket_length\030\010 \001(\005\"\365"
+  "\001\n\rAttackMessage\022(\n\010msg_type\030\001 \001(\0162\026.Att"
+  "ackMessage.MsgType\022\016\n\006msg_id\030\002 \001(\t\022\020\n\010si"
+  "m_time\030\003 \001(\005\022\027\n\017attacked_module\030\004 \001(\t\022\r\n"
+  "\005start\030\005 \001(\005\022\014\n\004stop\030\006 \001(\005\022\032\n\022attack_pro"
+  "bability\030\007 \001(\005\"F\n\007MsgType\022\017\n\013PACKET_DROP"
+  "\020\000\022\030\n\024PACKET_FALSIFICATION\020\001\022\020\n\014PACKET_D"
+  "ELAY\020\002\"\201\003\n\016CosimaMsgGroup\022)\n\020initial_mes"
+  "sages\030\001 \003(\0132\017.InitialMessage\022#\n\rinfo_mes"
+  "sages\030\002 \003(\0132\014.InfoMessage\0229\n\030synchronisa"
+  "tion_messages\030\003 \003(\0132\027.SynchronisationMes"
+  "sage\0227\n\027infrastructure_messages\030\004 \003(\0132\026."
+  "InfrastructureMessage\022)\n\020traffic_message"
+  "s\030\005 \003(\0132\017.TrafficMessage\022\'\n\017attack_messa"
+  "ges\030\006 \003(\0132\016.AttackMessage\022\031\n\021current_tim"
+  "e_step\030\007 \001(\005\022 \n\030number_of_message_groups"
+  "\030\010 \001(\005\022\032\n\022number_of_messages\030\t \001(\005b\006prot"
+  "o3"
+  ;
+static ::_pbi::once_flag descriptor_table_message_2eproto_once;
+const ::_pbi::DescriptorTable descriptor_table_message_2eproto = {
+    false, false, 1602, descriptor_table_protodef_message_2eproto,
+    "message.proto",
+    &descriptor_table_message_2eproto_once, nullptr, 0, 7,
+    schemas, file_default_instances, TableStruct_message_2eproto::offsets,
+    file_level_metadata_message_2eproto, file_level_enum_descriptors_message_2eproto,
+    file_level_service_descriptors_message_2eproto,
+};
+PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_message_2eproto_getter() {
+  return &descriptor_table_message_2eproto;
+}
+
+// Force running AddDescriptors() at dynamic initialization time.
+PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_message_2eproto(&descriptor_table_message_2eproto);
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* SynchronisationMessage_MsgType_descriptor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_message_2eproto);
+  return file_level_enum_descriptors_message_2eproto[0];
+}
+bool SynchronisationMessage_MsgType_IsValid(int value) {
+  switch (value) {
+    case 0:
+    case 1:
+    case 2:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+constexpr SynchronisationMessage_MsgType SynchronisationMessage::MAX_ADVANCE;
+constexpr SynchronisationMessage_MsgType SynchronisationMessage::WAITING;
+constexpr SynchronisationMessage_MsgType SynchronisationMessage::TRANSMISSION_ERROR;
+constexpr SynchronisationMessage_MsgType SynchronisationMessage::MsgType_MIN;
+constexpr SynchronisationMessage_MsgType SynchronisationMessage::MsgType_MAX;
+constexpr int SynchronisationMessage::MsgType_ARRAYSIZE;
+#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* InfrastructureMessage_MsgType_descriptor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_message_2eproto);
+  return file_level_enum_descriptors_message_2eproto[1];
+}
+bool InfrastructureMessage_MsgType_IsValid(int value) {
+  switch (value) {
+    case 0:
+    case 1:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+constexpr InfrastructureMessage_MsgType InfrastructureMessage::DISCONNECT;
+constexpr InfrastructureMessage_MsgType InfrastructureMessage::RECONNECT;
+constexpr InfrastructureMessage_MsgType InfrastructureMessage::MsgType_MIN;
+constexpr InfrastructureMessage_MsgType InfrastructureMessage::MsgType_MAX;
+constexpr int InfrastructureMessage::MsgType_ARRAYSIZE;
+#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* AttackMessage_MsgType_descriptor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_message_2eproto);
+  return file_level_enum_descriptors_message_2eproto[2];
+}
+bool AttackMessage_MsgType_IsValid(int value) {
+  switch (value) {
+    case 0:
+    case 1:
+    case 2:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+constexpr AttackMessage_MsgType AttackMessage::PACKET_DROP;
+constexpr AttackMessage_MsgType AttackMessage::PACKET_FALSIFICATION;
+constexpr AttackMessage_MsgType AttackMessage::PACKET_DELAY;
+constexpr AttackMessage_MsgType AttackMessage::MsgType_MIN;
+constexpr AttackMessage_MsgType AttackMessage::MsgType_MAX;
+constexpr int AttackMessage::MsgType_ARRAYSIZE;
+#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
+
+// ===================================================================
+
+class InitialMessage::_Internal {
+ public:
+};
+
+InitialMessage::InitialMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:InitialMessage)
+}
+InitialMessage::InitialMessage(const InitialMessage& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  InitialMessage* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.logging_level_){}
+    , decltype(_impl_.max_advance_){}
+    , decltype(_impl_.until_){}
+    , decltype(_impl_.step_size_){}
+    , decltype(_impl_.max_byte_size_per_msg_group_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_msg_id().empty()) {
+    _this->_impl_.msg_id_.Set(from._internal_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.logging_level_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.logging_level_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_logging_level().empty()) {
+    _this->_impl_.logging_level_.Set(from._internal_logging_level(), 
+      _this->GetArenaForAllocation());
+  }
+  ::memcpy(&_impl_.max_advance_, &from._impl_.max_advance_,
+    static_cast(reinterpret_cast(&_impl_.max_byte_size_per_msg_group_) -
+    reinterpret_cast(&_impl_.max_advance_)) + sizeof(_impl_.max_byte_size_per_msg_group_));
+  // @@protoc_insertion_point(copy_constructor:InitialMessage)
+}
+
+inline void InitialMessage::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.logging_level_){}
+    , decltype(_impl_.max_advance_){0}
+    , decltype(_impl_.until_){0}
+    , decltype(_impl_.step_size_){0}
+    , decltype(_impl_.max_byte_size_per_msg_group_){0}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.logging_level_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.logging_level_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+InitialMessage::~InitialMessage() {
+  // @@protoc_insertion_point(destructor:InitialMessage)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void InitialMessage::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.msg_id_.Destroy();
+  _impl_.logging_level_.Destroy();
+}
+
+void InitialMessage::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void InitialMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:InitialMessage)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.msg_id_.ClearToEmpty();
+  _impl_.logging_level_.ClearToEmpty();
+  ::memset(&_impl_.max_advance_, 0, static_cast(
+      reinterpret_cast(&_impl_.max_byte_size_per_msg_group_) -
+      reinterpret_cast(&_impl_.max_advance_)) + sizeof(_impl_.max_byte_size_per_msg_group_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* InitialMessage::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string msg_id = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) {
+          auto str = _internal_mutable_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InitialMessage.msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 max_advance = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 16)) {
+          _impl_.max_advance_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 until = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) {
+          _impl_.until_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 step_size = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 32)) {
+          _impl_.step_size_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string logging_level = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 42)) {
+          auto str = _internal_mutable_logging_level();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InitialMessage.logging_level"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 max_byte_size_per_msg_group = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 48)) {
+          _impl_.max_byte_size_per_msg_group_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* InitialMessage::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:InitialMessage)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string msg_id = 1;
+  if (!this->_internal_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_msg_id().data(), static_cast(this->_internal_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InitialMessage.msg_id");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_msg_id(), target);
+  }
+
+  // int32 max_advance = 2;
+  if (this->_internal_max_advance() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_max_advance(), target);
+  }
+
+  // int32 until = 3;
+  if (this->_internal_until() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_until(), target);
+  }
+
+  // int32 step_size = 4;
+  if (this->_internal_step_size() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(4, this->_internal_step_size(), target);
+  }
+
+  // string logging_level = 5;
+  if (!this->_internal_logging_level().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_logging_level().data(), static_cast(this->_internal_logging_level().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InitialMessage.logging_level");
+    target = stream->WriteStringMaybeAliased(
+        5, this->_internal_logging_level(), target);
+  }
+
+  // int32 max_byte_size_per_msg_group = 6;
+  if (this->_internal_max_byte_size_per_msg_group() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(6, this->_internal_max_byte_size_per_msg_group(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:InitialMessage)
+  return target;
+}
+
+size_t InitialMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:InitialMessage)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string msg_id = 1;
+  if (!this->_internal_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_msg_id());
+  }
+
+  // string logging_level = 5;
+  if (!this->_internal_logging_level().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_logging_level());
+  }
+
+  // int32 max_advance = 2;
+  if (this->_internal_max_advance() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_max_advance());
+  }
+
+  // int32 until = 3;
+  if (this->_internal_until() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_until());
+  }
+
+  // int32 step_size = 4;
+  if (this->_internal_step_size() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_step_size());
+  }
+
+  // int32 max_byte_size_per_msg_group = 6;
+  if (this->_internal_max_byte_size_per_msg_group() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_max_byte_size_per_msg_group());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData InitialMessage::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    InitialMessage::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*InitialMessage::GetClassData() const { return &_class_data_; }
+
+
+void InitialMessage::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:InitialMessage)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_msg_id().empty()) {
+    _this->_internal_set_msg_id(from._internal_msg_id());
+  }
+  if (!from._internal_logging_level().empty()) {
+    _this->_internal_set_logging_level(from._internal_logging_level());
+  }
+  if (from._internal_max_advance() != 0) {
+    _this->_internal_set_max_advance(from._internal_max_advance());
+  }
+  if (from._internal_until() != 0) {
+    _this->_internal_set_until(from._internal_until());
+  }
+  if (from._internal_step_size() != 0) {
+    _this->_internal_set_step_size(from._internal_step_size());
+  }
+  if (from._internal_max_byte_size_per_msg_group() != 0) {
+    _this->_internal_set_max_byte_size_per_msg_group(from._internal_max_byte_size_per_msg_group());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void InitialMessage::CopyFrom(const InitialMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:InitialMessage)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool InitialMessage::IsInitialized() const {
+  return true;
+}
+
+void InitialMessage::InternalSwap(InitialMessage* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.msg_id_, lhs_arena,
+      &other->_impl_.msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.logging_level_, lhs_arena,
+      &other->_impl_.logging_level_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(InitialMessage, _impl_.max_byte_size_per_msg_group_)
+      + sizeof(InitialMessage::_impl_.max_byte_size_per_msg_group_)
+      - PROTOBUF_FIELD_OFFSET(InitialMessage, _impl_.max_advance_)>(
+          reinterpret_cast(&_impl_.max_advance_),
+          reinterpret_cast(&other->_impl_.max_advance_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata InitialMessage::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[0]);
+}
+
+// ===================================================================
+
+class InfoMessage::_Internal {
+ public:
+};
+
+InfoMessage::InfoMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:InfoMessage)
+}
+InfoMessage::InfoMessage(const InfoMessage& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  InfoMessage* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.sender_){}
+    , decltype(_impl_.receiver_){}
+    , decltype(_impl_.content_){}
+    , decltype(_impl_.max_advance_){}
+    , decltype(_impl_.sim_time_){}
+    , decltype(_impl_.size_){}
+    , decltype(_impl_.creation_time_){}
+    , decltype(_impl_.is_falsified_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_msg_id().empty()) {
+    _this->_impl_.msg_id_.Set(from._internal_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.sender_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.sender_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_sender().empty()) {
+    _this->_impl_.sender_.Set(from._internal_sender(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.receiver_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.receiver_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_receiver().empty()) {
+    _this->_impl_.receiver_.Set(from._internal_receiver(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.content_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.content_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_content().empty()) {
+    _this->_impl_.content_.Set(from._internal_content(), 
+      _this->GetArenaForAllocation());
+  }
+  ::memcpy(&_impl_.max_advance_, &from._impl_.max_advance_,
+    static_cast(reinterpret_cast(&_impl_.is_falsified_) -
+    reinterpret_cast(&_impl_.max_advance_)) + sizeof(_impl_.is_falsified_));
+  // @@protoc_insertion_point(copy_constructor:InfoMessage)
+}
+
+inline void InfoMessage::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.sender_){}
+    , decltype(_impl_.receiver_){}
+    , decltype(_impl_.content_){}
+    , decltype(_impl_.max_advance_){0}
+    , decltype(_impl_.sim_time_){0}
+    , decltype(_impl_.size_){0}
+    , decltype(_impl_.creation_time_){0}
+    , decltype(_impl_.is_falsified_){false}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.sender_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.sender_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.receiver_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.receiver_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.content_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.content_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+InfoMessage::~InfoMessage() {
+  // @@protoc_insertion_point(destructor:InfoMessage)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void InfoMessage::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.msg_id_.Destroy();
+  _impl_.sender_.Destroy();
+  _impl_.receiver_.Destroy();
+  _impl_.content_.Destroy();
+}
+
+void InfoMessage::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void InfoMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:InfoMessage)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.msg_id_.ClearToEmpty();
+  _impl_.sender_.ClearToEmpty();
+  _impl_.receiver_.ClearToEmpty();
+  _impl_.content_.ClearToEmpty();
+  ::memset(&_impl_.max_advance_, 0, static_cast(
+      reinterpret_cast(&_impl_.is_falsified_) -
+      reinterpret_cast(&_impl_.max_advance_)) + sizeof(_impl_.is_falsified_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* InfoMessage::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string msg_id = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) {
+          auto str = _internal_mutable_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InfoMessage.msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 max_advance = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 16)) {
+          _impl_.max_advance_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 sim_time = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) {
+          _impl_.sim_time_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string sender = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) {
+          auto str = _internal_mutable_sender();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InfoMessage.sender"));
+        } else
+          goto handle_unusual;
+        continue;
+      // string receiver = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 42)) {
+          auto str = _internal_mutable_receiver();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InfoMessage.receiver"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 size = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 48)) {
+          _impl_.size_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string content = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 58)) {
+          auto str = _internal_mutable_content();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InfoMessage.content"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 creation_time = 8;
+      case 8:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 64)) {
+          _impl_.creation_time_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // bool is_falsified = 9;
+      case 9:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 72)) {
+          _impl_.is_falsified_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* InfoMessage::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:InfoMessage)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string msg_id = 1;
+  if (!this->_internal_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_msg_id().data(), static_cast(this->_internal_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InfoMessage.msg_id");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_msg_id(), target);
+  }
+
+  // int32 max_advance = 2;
+  if (this->_internal_max_advance() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_max_advance(), target);
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_sim_time(), target);
+  }
+
+  // string sender = 4;
+  if (!this->_internal_sender().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_sender().data(), static_cast(this->_internal_sender().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InfoMessage.sender");
+    target = stream->WriteStringMaybeAliased(
+        4, this->_internal_sender(), target);
+  }
+
+  // string receiver = 5;
+  if (!this->_internal_receiver().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_receiver().data(), static_cast(this->_internal_receiver().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InfoMessage.receiver");
+    target = stream->WriteStringMaybeAliased(
+        5, this->_internal_receiver(), target);
+  }
+
+  // int32 size = 6;
+  if (this->_internal_size() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(6, this->_internal_size(), target);
+  }
+
+  // string content = 7;
+  if (!this->_internal_content().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_content().data(), static_cast(this->_internal_content().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InfoMessage.content");
+    target = stream->WriteStringMaybeAliased(
+        7, this->_internal_content(), target);
+  }
+
+  // int32 creation_time = 8;
+  if (this->_internal_creation_time() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(8, this->_internal_creation_time(), target);
+  }
+
+  // bool is_falsified = 9;
+  if (this->_internal_is_falsified() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(9, this->_internal_is_falsified(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:InfoMessage)
+  return target;
+}
+
+size_t InfoMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:InfoMessage)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string msg_id = 1;
+  if (!this->_internal_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_msg_id());
+  }
+
+  // string sender = 4;
+  if (!this->_internal_sender().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_sender());
+  }
+
+  // string receiver = 5;
+  if (!this->_internal_receiver().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_receiver());
+  }
+
+  // string content = 7;
+  if (!this->_internal_content().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_content());
+  }
+
+  // int32 max_advance = 2;
+  if (this->_internal_max_advance() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_max_advance());
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_sim_time());
+  }
+
+  // int32 size = 6;
+  if (this->_internal_size() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_size());
+  }
+
+  // int32 creation_time = 8;
+  if (this->_internal_creation_time() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_creation_time());
+  }
+
+  // bool is_falsified = 9;
+  if (this->_internal_is_falsified() != 0) {
+    total_size += 1 + 1;
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData InfoMessage::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    InfoMessage::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*InfoMessage::GetClassData() const { return &_class_data_; }
+
+
+void InfoMessage::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:InfoMessage)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_msg_id().empty()) {
+    _this->_internal_set_msg_id(from._internal_msg_id());
+  }
+  if (!from._internal_sender().empty()) {
+    _this->_internal_set_sender(from._internal_sender());
+  }
+  if (!from._internal_receiver().empty()) {
+    _this->_internal_set_receiver(from._internal_receiver());
+  }
+  if (!from._internal_content().empty()) {
+    _this->_internal_set_content(from._internal_content());
+  }
+  if (from._internal_max_advance() != 0) {
+    _this->_internal_set_max_advance(from._internal_max_advance());
+  }
+  if (from._internal_sim_time() != 0) {
+    _this->_internal_set_sim_time(from._internal_sim_time());
+  }
+  if (from._internal_size() != 0) {
+    _this->_internal_set_size(from._internal_size());
+  }
+  if (from._internal_creation_time() != 0) {
+    _this->_internal_set_creation_time(from._internal_creation_time());
+  }
+  if (from._internal_is_falsified() != 0) {
+    _this->_internal_set_is_falsified(from._internal_is_falsified());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void InfoMessage::CopyFrom(const InfoMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:InfoMessage)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool InfoMessage::IsInitialized() const {
+  return true;
+}
+
+void InfoMessage::InternalSwap(InfoMessage* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.msg_id_, lhs_arena,
+      &other->_impl_.msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.sender_, lhs_arena,
+      &other->_impl_.sender_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.receiver_, lhs_arena,
+      &other->_impl_.receiver_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.content_, lhs_arena,
+      &other->_impl_.content_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(InfoMessage, _impl_.is_falsified_)
+      + sizeof(InfoMessage::_impl_.is_falsified_)
+      - PROTOBUF_FIELD_OFFSET(InfoMessage, _impl_.max_advance_)>(
+          reinterpret_cast(&_impl_.max_advance_),
+          reinterpret_cast(&other->_impl_.max_advance_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata InfoMessage::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[1]);
+}
+
+// ===================================================================
+
+class SynchronisationMessage::_Internal {
+ public:
+};
+
+SynchronisationMessage::SynchronisationMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:SynchronisationMessage)
+}
+SynchronisationMessage::SynchronisationMessage(const SynchronisationMessage& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  SynchronisationMessage* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.timeout_msg_id_){}
+    , decltype(_impl_.msg_type_){}
+    , decltype(_impl_.sim_time_){}
+    , decltype(_impl_.max_advance_){}
+    , decltype(_impl_.timeout_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_msg_id().empty()) {
+    _this->_impl_.msg_id_.Set(from._internal_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.timeout_msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.timeout_msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_timeout_msg_id().empty()) {
+    _this->_impl_.timeout_msg_id_.Set(from._internal_timeout_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  ::memcpy(&_impl_.msg_type_, &from._impl_.msg_type_,
+    static_cast(reinterpret_cast(&_impl_.timeout_) -
+    reinterpret_cast(&_impl_.msg_type_)) + sizeof(_impl_.timeout_));
+  // @@protoc_insertion_point(copy_constructor:SynchronisationMessage)
+}
+
+inline void SynchronisationMessage::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.timeout_msg_id_){}
+    , decltype(_impl_.msg_type_){0}
+    , decltype(_impl_.sim_time_){0}
+    , decltype(_impl_.max_advance_){0}
+    , decltype(_impl_.timeout_){false}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.timeout_msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.timeout_msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+SynchronisationMessage::~SynchronisationMessage() {
+  // @@protoc_insertion_point(destructor:SynchronisationMessage)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void SynchronisationMessage::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.msg_id_.Destroy();
+  _impl_.timeout_msg_id_.Destroy();
+}
+
+void SynchronisationMessage::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void SynchronisationMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:SynchronisationMessage)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.msg_id_.ClearToEmpty();
+  _impl_.timeout_msg_id_.ClearToEmpty();
+  ::memset(&_impl_.msg_type_, 0, static_cast(
+      reinterpret_cast(&_impl_.timeout_) -
+      reinterpret_cast(&_impl_.msg_type_)) + sizeof(_impl_.timeout_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* SynchronisationMessage::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .SynchronisationMessage.MsgType msg_type = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 8)) {
+          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+          _internal_set_msg_type(static_cast<::SynchronisationMessage_MsgType>(val));
+        } else
+          goto handle_unusual;
+        continue;
+      // string msg_id = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) {
+          auto str = _internal_mutable_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "SynchronisationMessage.msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 sim_time = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) {
+          _impl_.sim_time_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 max_advance = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 32)) {
+          _impl_.max_advance_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // bool timeout = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 40)) {
+          _impl_.timeout_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string timeout_msg_id = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 50)) {
+          auto str = _internal_mutable_timeout_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "SynchronisationMessage.timeout_msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* SynchronisationMessage::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:SynchronisationMessage)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .SynchronisationMessage.MsgType msg_type = 1;
+  if (this->_internal_msg_type() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteEnumToArray(
+      1, this->_internal_msg_type(), target);
+  }
+
+  // string msg_id = 2;
+  if (!this->_internal_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_msg_id().data(), static_cast(this->_internal_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "SynchronisationMessage.msg_id");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_msg_id(), target);
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_sim_time(), target);
+  }
+
+  // int32 max_advance = 4;
+  if (this->_internal_max_advance() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(4, this->_internal_max_advance(), target);
+  }
+
+  // bool timeout = 5;
+  if (this->_internal_timeout() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(5, this->_internal_timeout(), target);
+  }
+
+  // string timeout_msg_id = 6;
+  if (!this->_internal_timeout_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_timeout_msg_id().data(), static_cast(this->_internal_timeout_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "SynchronisationMessage.timeout_msg_id");
+    target = stream->WriteStringMaybeAliased(
+        6, this->_internal_timeout_msg_id(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:SynchronisationMessage)
+  return target;
+}
+
+size_t SynchronisationMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:SynchronisationMessage)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string msg_id = 2;
+  if (!this->_internal_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_msg_id());
+  }
+
+  // string timeout_msg_id = 6;
+  if (!this->_internal_timeout_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_timeout_msg_id());
+  }
+
+  // .SynchronisationMessage.MsgType msg_type = 1;
+  if (this->_internal_msg_type() != 0) {
+    total_size += 1 +
+      ::_pbi::WireFormatLite::EnumSize(this->_internal_msg_type());
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_sim_time());
+  }
+
+  // int32 max_advance = 4;
+  if (this->_internal_max_advance() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_max_advance());
+  }
+
+  // bool timeout = 5;
+  if (this->_internal_timeout() != 0) {
+    total_size += 1 + 1;
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData SynchronisationMessage::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    SynchronisationMessage::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*SynchronisationMessage::GetClassData() const { return &_class_data_; }
+
+
+void SynchronisationMessage::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:SynchronisationMessage)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_msg_id().empty()) {
+    _this->_internal_set_msg_id(from._internal_msg_id());
+  }
+  if (!from._internal_timeout_msg_id().empty()) {
+    _this->_internal_set_timeout_msg_id(from._internal_timeout_msg_id());
+  }
+  if (from._internal_msg_type() != 0) {
+    _this->_internal_set_msg_type(from._internal_msg_type());
+  }
+  if (from._internal_sim_time() != 0) {
+    _this->_internal_set_sim_time(from._internal_sim_time());
+  }
+  if (from._internal_max_advance() != 0) {
+    _this->_internal_set_max_advance(from._internal_max_advance());
+  }
+  if (from._internal_timeout() != 0) {
+    _this->_internal_set_timeout(from._internal_timeout());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void SynchronisationMessage::CopyFrom(const SynchronisationMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:SynchronisationMessage)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool SynchronisationMessage::IsInitialized() const {
+  return true;
+}
+
+void SynchronisationMessage::InternalSwap(SynchronisationMessage* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.msg_id_, lhs_arena,
+      &other->_impl_.msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.timeout_msg_id_, lhs_arena,
+      &other->_impl_.timeout_msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(SynchronisationMessage, _impl_.timeout_)
+      + sizeof(SynchronisationMessage::_impl_.timeout_)
+      - PROTOBUF_FIELD_OFFSET(SynchronisationMessage, _impl_.msg_type_)>(
+          reinterpret_cast(&_impl_.msg_type_),
+          reinterpret_cast(&other->_impl_.msg_type_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata SynchronisationMessage::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[2]);
+}
+
+// ===================================================================
+
+class InfrastructureMessage::_Internal {
+ public:
+};
+
+InfrastructureMessage::InfrastructureMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:InfrastructureMessage)
+}
+InfrastructureMessage::InfrastructureMessage(const InfrastructureMessage& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  InfrastructureMessage* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.change_module_){}
+    , decltype(_impl_.msg_type_){}
+    , decltype(_impl_.sim_time_){}
+    , decltype(_impl_.connection_change_successful_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_msg_id().empty()) {
+    _this->_impl_.msg_id_.Set(from._internal_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.change_module_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.change_module_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_change_module().empty()) {
+    _this->_impl_.change_module_.Set(from._internal_change_module(), 
+      _this->GetArenaForAllocation());
+  }
+  ::memcpy(&_impl_.msg_type_, &from._impl_.msg_type_,
+    static_cast(reinterpret_cast(&_impl_.connection_change_successful_) -
+    reinterpret_cast(&_impl_.msg_type_)) + sizeof(_impl_.connection_change_successful_));
+  // @@protoc_insertion_point(copy_constructor:InfrastructureMessage)
+}
+
+inline void InfrastructureMessage::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.change_module_){}
+    , decltype(_impl_.msg_type_){0}
+    , decltype(_impl_.sim_time_){0}
+    , decltype(_impl_.connection_change_successful_){false}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.change_module_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.change_module_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+InfrastructureMessage::~InfrastructureMessage() {
+  // @@protoc_insertion_point(destructor:InfrastructureMessage)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void InfrastructureMessage::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.msg_id_.Destroy();
+  _impl_.change_module_.Destroy();
+}
+
+void InfrastructureMessage::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void InfrastructureMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:InfrastructureMessage)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.msg_id_.ClearToEmpty();
+  _impl_.change_module_.ClearToEmpty();
+  ::memset(&_impl_.msg_type_, 0, static_cast(
+      reinterpret_cast(&_impl_.connection_change_successful_) -
+      reinterpret_cast(&_impl_.msg_type_)) + sizeof(_impl_.connection_change_successful_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* InfrastructureMessage::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .InfrastructureMessage.MsgType msg_type = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 8)) {
+          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+          _internal_set_msg_type(static_cast<::InfrastructureMessage_MsgType>(val));
+        } else
+          goto handle_unusual;
+        continue;
+      // string msg_id = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) {
+          auto str = _internal_mutable_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InfrastructureMessage.msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 sim_time = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) {
+          _impl_.sim_time_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string change_module = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) {
+          auto str = _internal_mutable_change_module();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "InfrastructureMessage.change_module"));
+        } else
+          goto handle_unusual;
+        continue;
+      // bool connection_change_successful = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 40)) {
+          _impl_.connection_change_successful_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* InfrastructureMessage::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:InfrastructureMessage)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .InfrastructureMessage.MsgType msg_type = 1;
+  if (this->_internal_msg_type() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteEnumToArray(
+      1, this->_internal_msg_type(), target);
+  }
+
+  // string msg_id = 2;
+  if (!this->_internal_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_msg_id().data(), static_cast(this->_internal_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InfrastructureMessage.msg_id");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_msg_id(), target);
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_sim_time(), target);
+  }
+
+  // string change_module = 4;
+  if (!this->_internal_change_module().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_change_module().data(), static_cast(this->_internal_change_module().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "InfrastructureMessage.change_module");
+    target = stream->WriteStringMaybeAliased(
+        4, this->_internal_change_module(), target);
+  }
+
+  // bool connection_change_successful = 5;
+  if (this->_internal_connection_change_successful() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteBoolToArray(5, this->_internal_connection_change_successful(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:InfrastructureMessage)
+  return target;
+}
+
+size_t InfrastructureMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:InfrastructureMessage)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string msg_id = 2;
+  if (!this->_internal_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_msg_id());
+  }
+
+  // string change_module = 4;
+  if (!this->_internal_change_module().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_change_module());
+  }
+
+  // .InfrastructureMessage.MsgType msg_type = 1;
+  if (this->_internal_msg_type() != 0) {
+    total_size += 1 +
+      ::_pbi::WireFormatLite::EnumSize(this->_internal_msg_type());
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_sim_time());
+  }
+
+  // bool connection_change_successful = 5;
+  if (this->_internal_connection_change_successful() != 0) {
+    total_size += 1 + 1;
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData InfrastructureMessage::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    InfrastructureMessage::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*InfrastructureMessage::GetClassData() const { return &_class_data_; }
+
+
+void InfrastructureMessage::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:InfrastructureMessage)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_msg_id().empty()) {
+    _this->_internal_set_msg_id(from._internal_msg_id());
+  }
+  if (!from._internal_change_module().empty()) {
+    _this->_internal_set_change_module(from._internal_change_module());
+  }
+  if (from._internal_msg_type() != 0) {
+    _this->_internal_set_msg_type(from._internal_msg_type());
+  }
+  if (from._internal_sim_time() != 0) {
+    _this->_internal_set_sim_time(from._internal_sim_time());
+  }
+  if (from._internal_connection_change_successful() != 0) {
+    _this->_internal_set_connection_change_successful(from._internal_connection_change_successful());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void InfrastructureMessage::CopyFrom(const InfrastructureMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:InfrastructureMessage)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool InfrastructureMessage::IsInitialized() const {
+  return true;
+}
+
+void InfrastructureMessage::InternalSwap(InfrastructureMessage* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.msg_id_, lhs_arena,
+      &other->_impl_.msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.change_module_, lhs_arena,
+      &other->_impl_.change_module_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(InfrastructureMessage, _impl_.connection_change_successful_)
+      + sizeof(InfrastructureMessage::_impl_.connection_change_successful_)
+      - PROTOBUF_FIELD_OFFSET(InfrastructureMessage, _impl_.msg_type_)>(
+          reinterpret_cast(&_impl_.msg_type_),
+          reinterpret_cast(&other->_impl_.msg_type_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata InfrastructureMessage::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[3]);
+}
+
+// ===================================================================
+
+class TrafficMessage::_Internal {
+ public:
+};
+
+TrafficMessage::TrafficMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:TrafficMessage)
+}
+TrafficMessage::TrafficMessage(const TrafficMessage& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  TrafficMessage* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.source_){}
+    , decltype(_impl_.destination_){}
+    , decltype(_impl_.sim_time_){}
+    , decltype(_impl_.start_){}
+    , decltype(_impl_.stop_){}
+    , decltype(_impl_.interval_){}
+    , decltype(_impl_.packet_length_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_msg_id().empty()) {
+    _this->_impl_.msg_id_.Set(from._internal_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.source_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.source_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_source().empty()) {
+    _this->_impl_.source_.Set(from._internal_source(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.destination_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.destination_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_destination().empty()) {
+    _this->_impl_.destination_.Set(from._internal_destination(), 
+      _this->GetArenaForAllocation());
+  }
+  ::memcpy(&_impl_.sim_time_, &from._impl_.sim_time_,
+    static_cast(reinterpret_cast(&_impl_.packet_length_) -
+    reinterpret_cast(&_impl_.sim_time_)) + sizeof(_impl_.packet_length_));
+  // @@protoc_insertion_point(copy_constructor:TrafficMessage)
+}
+
+inline void TrafficMessage::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.source_){}
+    , decltype(_impl_.destination_){}
+    , decltype(_impl_.sim_time_){0}
+    , decltype(_impl_.start_){0}
+    , decltype(_impl_.stop_){0}
+    , decltype(_impl_.interval_){0}
+    , decltype(_impl_.packet_length_){0}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.source_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.source_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.destination_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.destination_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+TrafficMessage::~TrafficMessage() {
+  // @@protoc_insertion_point(destructor:TrafficMessage)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void TrafficMessage::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.msg_id_.Destroy();
+  _impl_.source_.Destroy();
+  _impl_.destination_.Destroy();
+}
+
+void TrafficMessage::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void TrafficMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:TrafficMessage)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.msg_id_.ClearToEmpty();
+  _impl_.source_.ClearToEmpty();
+  _impl_.destination_.ClearToEmpty();
+  ::memset(&_impl_.sim_time_, 0, static_cast(
+      reinterpret_cast(&_impl_.packet_length_) -
+      reinterpret_cast(&_impl_.sim_time_)) + sizeof(_impl_.packet_length_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* TrafficMessage::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // string msg_id = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) {
+          auto str = _internal_mutable_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "TrafficMessage.msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 sim_time = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 16)) {
+          _impl_.sim_time_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string source = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 26)) {
+          auto str = _internal_mutable_source();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "TrafficMessage.source"));
+        } else
+          goto handle_unusual;
+        continue;
+      // string destination = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) {
+          auto str = _internal_mutable_destination();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "TrafficMessage.destination"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 start = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 40)) {
+          _impl_.start_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 stop = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 48)) {
+          _impl_.stop_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 interval = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 56)) {
+          _impl_.interval_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 packet_length = 8;
+      case 8:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 64)) {
+          _impl_.packet_length_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* TrafficMessage::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:TrafficMessage)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string msg_id = 1;
+  if (!this->_internal_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_msg_id().data(), static_cast(this->_internal_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "TrafficMessage.msg_id");
+    target = stream->WriteStringMaybeAliased(
+        1, this->_internal_msg_id(), target);
+  }
+
+  // int32 sim_time = 2;
+  if (this->_internal_sim_time() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(2, this->_internal_sim_time(), target);
+  }
+
+  // string source = 3;
+  if (!this->_internal_source().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_source().data(), static_cast(this->_internal_source().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "TrafficMessage.source");
+    target = stream->WriteStringMaybeAliased(
+        3, this->_internal_source(), target);
+  }
+
+  // string destination = 4;
+  if (!this->_internal_destination().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_destination().data(), static_cast(this->_internal_destination().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "TrafficMessage.destination");
+    target = stream->WriteStringMaybeAliased(
+        4, this->_internal_destination(), target);
+  }
+
+  // int32 start = 5;
+  if (this->_internal_start() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(5, this->_internal_start(), target);
+  }
+
+  // int32 stop = 6;
+  if (this->_internal_stop() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(6, this->_internal_stop(), target);
+  }
+
+  // int32 interval = 7;
+  if (this->_internal_interval() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(7, this->_internal_interval(), target);
+  }
+
+  // int32 packet_length = 8;
+  if (this->_internal_packet_length() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(8, this->_internal_packet_length(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:TrafficMessage)
+  return target;
+}
+
+size_t TrafficMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:TrafficMessage)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string msg_id = 1;
+  if (!this->_internal_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_msg_id());
+  }
+
+  // string source = 3;
+  if (!this->_internal_source().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_source());
+  }
+
+  // string destination = 4;
+  if (!this->_internal_destination().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_destination());
+  }
+
+  // int32 sim_time = 2;
+  if (this->_internal_sim_time() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_sim_time());
+  }
+
+  // int32 start = 5;
+  if (this->_internal_start() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_start());
+  }
+
+  // int32 stop = 6;
+  if (this->_internal_stop() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_stop());
+  }
+
+  // int32 interval = 7;
+  if (this->_internal_interval() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_interval());
+  }
+
+  // int32 packet_length = 8;
+  if (this->_internal_packet_length() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_packet_length());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TrafficMessage::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    TrafficMessage::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TrafficMessage::GetClassData() const { return &_class_data_; }
+
+
+void TrafficMessage::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:TrafficMessage)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_msg_id().empty()) {
+    _this->_internal_set_msg_id(from._internal_msg_id());
+  }
+  if (!from._internal_source().empty()) {
+    _this->_internal_set_source(from._internal_source());
+  }
+  if (!from._internal_destination().empty()) {
+    _this->_internal_set_destination(from._internal_destination());
+  }
+  if (from._internal_sim_time() != 0) {
+    _this->_internal_set_sim_time(from._internal_sim_time());
+  }
+  if (from._internal_start() != 0) {
+    _this->_internal_set_start(from._internal_start());
+  }
+  if (from._internal_stop() != 0) {
+    _this->_internal_set_stop(from._internal_stop());
+  }
+  if (from._internal_interval() != 0) {
+    _this->_internal_set_interval(from._internal_interval());
+  }
+  if (from._internal_packet_length() != 0) {
+    _this->_internal_set_packet_length(from._internal_packet_length());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void TrafficMessage::CopyFrom(const TrafficMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:TrafficMessage)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool TrafficMessage::IsInitialized() const {
+  return true;
+}
+
+void TrafficMessage::InternalSwap(TrafficMessage* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.msg_id_, lhs_arena,
+      &other->_impl_.msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.source_, lhs_arena,
+      &other->_impl_.source_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.destination_, lhs_arena,
+      &other->_impl_.destination_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(TrafficMessage, _impl_.packet_length_)
+      + sizeof(TrafficMessage::_impl_.packet_length_)
+      - PROTOBUF_FIELD_OFFSET(TrafficMessage, _impl_.sim_time_)>(
+          reinterpret_cast(&_impl_.sim_time_),
+          reinterpret_cast(&other->_impl_.sim_time_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata TrafficMessage::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[4]);
+}
+
+// ===================================================================
+
+class AttackMessage::_Internal {
+ public:
+};
+
+AttackMessage::AttackMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:AttackMessage)
+}
+AttackMessage::AttackMessage(const AttackMessage& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  AttackMessage* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.attacked_module_){}
+    , decltype(_impl_.msg_type_){}
+    , decltype(_impl_.sim_time_){}
+    , decltype(_impl_.start_){}
+    , decltype(_impl_.stop_){}
+    , decltype(_impl_.attack_probability_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_msg_id().empty()) {
+    _this->_impl_.msg_id_.Set(from._internal_msg_id(), 
+      _this->GetArenaForAllocation());
+  }
+  _impl_.attacked_module_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.attacked_module_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (!from._internal_attacked_module().empty()) {
+    _this->_impl_.attacked_module_.Set(from._internal_attacked_module(), 
+      _this->GetArenaForAllocation());
+  }
+  ::memcpy(&_impl_.msg_type_, &from._impl_.msg_type_,
+    static_cast(reinterpret_cast(&_impl_.attack_probability_) -
+    reinterpret_cast(&_impl_.msg_type_)) + sizeof(_impl_.attack_probability_));
+  // @@protoc_insertion_point(copy_constructor:AttackMessage)
+}
+
+inline void AttackMessage::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.msg_id_){}
+    , decltype(_impl_.attacked_module_){}
+    , decltype(_impl_.msg_type_){0}
+    , decltype(_impl_.sim_time_){0}
+    , decltype(_impl_.start_){0}
+    , decltype(_impl_.stop_){0}
+    , decltype(_impl_.attack_probability_){0}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+  _impl_.msg_id_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  _impl_.attacked_module_.InitDefault();
+  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+    _impl_.attacked_module_.Set("", GetArenaForAllocation());
+  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+}
+
+AttackMessage::~AttackMessage() {
+  // @@protoc_insertion_point(destructor:AttackMessage)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void AttackMessage::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.msg_id_.Destroy();
+  _impl_.attacked_module_.Destroy();
+}
+
+void AttackMessage::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void AttackMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:AttackMessage)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.msg_id_.ClearToEmpty();
+  _impl_.attacked_module_.ClearToEmpty();
+  ::memset(&_impl_.msg_type_, 0, static_cast(
+      reinterpret_cast(&_impl_.attack_probability_) -
+      reinterpret_cast(&_impl_.msg_type_)) + sizeof(_impl_.attack_probability_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* AttackMessage::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // .AttackMessage.MsgType msg_type = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 8)) {
+          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
+          CHK_(ptr);
+          _internal_set_msg_type(static_cast<::AttackMessage_MsgType>(val));
+        } else
+          goto handle_unusual;
+        continue;
+      // string msg_id = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) {
+          auto str = _internal_mutable_msg_id();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "AttackMessage.msg_id"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 sim_time = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 24)) {
+          _impl_.sim_time_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // string attacked_module = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) {
+          auto str = _internal_mutable_attacked_module();
+          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+          CHK_(ptr);
+          CHK_(::_pbi::VerifyUTF8(str, "AttackMessage.attacked_module"));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 start = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 40)) {
+          _impl_.start_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 stop = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 48)) {
+          _impl_.stop_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 attack_probability = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 56)) {
+          _impl_.attack_probability_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* AttackMessage::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:AttackMessage)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .AttackMessage.MsgType msg_type = 1;
+  if (this->_internal_msg_type() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteEnumToArray(
+      1, this->_internal_msg_type(), target);
+  }
+
+  // string msg_id = 2;
+  if (!this->_internal_msg_id().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_msg_id().data(), static_cast(this->_internal_msg_id().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "AttackMessage.msg_id");
+    target = stream->WriteStringMaybeAliased(
+        2, this->_internal_msg_id(), target);
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(3, this->_internal_sim_time(), target);
+  }
+
+  // string attacked_module = 4;
+  if (!this->_internal_attacked_module().empty()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->_internal_attacked_module().data(), static_cast(this->_internal_attacked_module().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "AttackMessage.attacked_module");
+    target = stream->WriteStringMaybeAliased(
+        4, this->_internal_attacked_module(), target);
+  }
+
+  // int32 start = 5;
+  if (this->_internal_start() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(5, this->_internal_start(), target);
+  }
+
+  // int32 stop = 6;
+  if (this->_internal_stop() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(6, this->_internal_stop(), target);
+  }
+
+  // int32 attack_probability = 7;
+  if (this->_internal_attack_probability() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(7, this->_internal_attack_probability(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:AttackMessage)
+  return target;
+}
+
+size_t AttackMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:AttackMessage)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // string msg_id = 2;
+  if (!this->_internal_msg_id().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_msg_id());
+  }
+
+  // string attacked_module = 4;
+  if (!this->_internal_attacked_module().empty()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->_internal_attacked_module());
+  }
+
+  // .AttackMessage.MsgType msg_type = 1;
+  if (this->_internal_msg_type() != 0) {
+    total_size += 1 +
+      ::_pbi::WireFormatLite::EnumSize(this->_internal_msg_type());
+  }
+
+  // int32 sim_time = 3;
+  if (this->_internal_sim_time() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_sim_time());
+  }
+
+  // int32 start = 5;
+  if (this->_internal_start() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_start());
+  }
+
+  // int32 stop = 6;
+  if (this->_internal_stop() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_stop());
+  }
+
+  // int32 attack_probability = 7;
+  if (this->_internal_attack_probability() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_attack_probability());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData AttackMessage::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    AttackMessage::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*AttackMessage::GetClassData() const { return &_class_data_; }
+
+
+void AttackMessage::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:AttackMessage)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (!from._internal_msg_id().empty()) {
+    _this->_internal_set_msg_id(from._internal_msg_id());
+  }
+  if (!from._internal_attacked_module().empty()) {
+    _this->_internal_set_attacked_module(from._internal_attacked_module());
+  }
+  if (from._internal_msg_type() != 0) {
+    _this->_internal_set_msg_type(from._internal_msg_type());
+  }
+  if (from._internal_sim_time() != 0) {
+    _this->_internal_set_sim_time(from._internal_sim_time());
+  }
+  if (from._internal_start() != 0) {
+    _this->_internal_set_start(from._internal_start());
+  }
+  if (from._internal_stop() != 0) {
+    _this->_internal_set_stop(from._internal_stop());
+  }
+  if (from._internal_attack_probability() != 0) {
+    _this->_internal_set_attack_probability(from._internal_attack_probability());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void AttackMessage::CopyFrom(const AttackMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:AttackMessage)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool AttackMessage::IsInitialized() const {
+  return true;
+}
+
+void AttackMessage::InternalSwap(AttackMessage* other) {
+  using std::swap;
+  auto* lhs_arena = GetArenaForAllocation();
+  auto* rhs_arena = other->GetArenaForAllocation();
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.msg_id_, lhs_arena,
+      &other->_impl_.msg_id_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
+      &_impl_.attacked_module_, lhs_arena,
+      &other->_impl_.attacked_module_, rhs_arena
+  );
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(AttackMessage, _impl_.attack_probability_)
+      + sizeof(AttackMessage::_impl_.attack_probability_)
+      - PROTOBUF_FIELD_OFFSET(AttackMessage, _impl_.msg_type_)>(
+          reinterpret_cast(&_impl_.msg_type_),
+          reinterpret_cast(&other->_impl_.msg_type_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata AttackMessage::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[5]);
+}
+
+// ===================================================================
+
+class CosimaMsgGroup::_Internal {
+ public:
+};
+
+CosimaMsgGroup::CosimaMsgGroup(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                         bool is_message_owned)
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
+  SharedCtor(arena, is_message_owned);
+  // @@protoc_insertion_point(arena_constructor:CosimaMsgGroup)
+}
+CosimaMsgGroup::CosimaMsgGroup(const CosimaMsgGroup& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message() {
+  CosimaMsgGroup* const _this = this; (void)_this;
+  new (&_impl_) Impl_{
+      decltype(_impl_.initial_messages_){from._impl_.initial_messages_}
+    , decltype(_impl_.info_messages_){from._impl_.info_messages_}
+    , decltype(_impl_.synchronisation_messages_){from._impl_.synchronisation_messages_}
+    , decltype(_impl_.infrastructure_messages_){from._impl_.infrastructure_messages_}
+    , decltype(_impl_.traffic_messages_){from._impl_.traffic_messages_}
+    , decltype(_impl_.attack_messages_){from._impl_.attack_messages_}
+    , decltype(_impl_.current_time_step_){}
+    , decltype(_impl_.number_of_message_groups_){}
+    , decltype(_impl_.number_of_messages_){}
+    , /*decltype(_impl_._cached_size_)*/{}};
+
+  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+  ::memcpy(&_impl_.current_time_step_, &from._impl_.current_time_step_,
+    static_cast(reinterpret_cast(&_impl_.number_of_messages_) -
+    reinterpret_cast(&_impl_.current_time_step_)) + sizeof(_impl_.number_of_messages_));
+  // @@protoc_insertion_point(copy_constructor:CosimaMsgGroup)
+}
+
+inline void CosimaMsgGroup::SharedCtor(
+    ::_pb::Arena* arena, bool is_message_owned) {
+  (void)arena;
+  (void)is_message_owned;
+  new (&_impl_) Impl_{
+      decltype(_impl_.initial_messages_){arena}
+    , decltype(_impl_.info_messages_){arena}
+    , decltype(_impl_.synchronisation_messages_){arena}
+    , decltype(_impl_.infrastructure_messages_){arena}
+    , decltype(_impl_.traffic_messages_){arena}
+    , decltype(_impl_.attack_messages_){arena}
+    , decltype(_impl_.current_time_step_){0}
+    , decltype(_impl_.number_of_message_groups_){0}
+    , decltype(_impl_.number_of_messages_){0}
+    , /*decltype(_impl_._cached_size_)*/{}
+  };
+}
+
+CosimaMsgGroup::~CosimaMsgGroup() {
+  // @@protoc_insertion_point(destructor:CosimaMsgGroup)
+  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
+  (void)arena;
+    return;
+  }
+  SharedDtor();
+}
+
+inline void CosimaMsgGroup::SharedDtor() {
+  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
+  _impl_.initial_messages_.~RepeatedPtrField();
+  _impl_.info_messages_.~RepeatedPtrField();
+  _impl_.synchronisation_messages_.~RepeatedPtrField();
+  _impl_.infrastructure_messages_.~RepeatedPtrField();
+  _impl_.traffic_messages_.~RepeatedPtrField();
+  _impl_.attack_messages_.~RepeatedPtrField();
+}
+
+void CosimaMsgGroup::SetCachedSize(int size) const {
+  _impl_._cached_size_.Set(size);
+}
+
+void CosimaMsgGroup::Clear() {
+// @@protoc_insertion_point(message_clear_start:CosimaMsgGroup)
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _impl_.initial_messages_.Clear();
+  _impl_.info_messages_.Clear();
+  _impl_.synchronisation_messages_.Clear();
+  _impl_.infrastructure_messages_.Clear();
+  _impl_.traffic_messages_.Clear();
+  _impl_.attack_messages_.Clear();
+  ::memset(&_impl_.current_time_step_, 0, static_cast(
+      reinterpret_cast(&_impl_.number_of_messages_) -
+      reinterpret_cast(&_impl_.current_time_step_)) + sizeof(_impl_.number_of_messages_));
+  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
+}
+
+const char* CosimaMsgGroup::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    uint32_t tag;
+    ptr = ::_pbi::ReadTag(ptr, &tag);
+    switch (tag >> 3) {
+      // repeated .InitialMessage initial_messages = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 10)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_initial_messages(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .InfoMessage info_messages = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 18)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_info_messages(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .SynchronisationMessage synchronisation_messages = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 26)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_synchronisation_messages(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .InfrastructureMessage infrastructure_messages = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 34)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_infrastructure_messages(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<34>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .TrafficMessage traffic_messages = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 42)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_traffic_messages(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<42>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // repeated .AttackMessage attack_messages = 6;
+      case 6:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 50)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_attack_messages(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<50>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 current_time_step = 7;
+      case 7:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 56)) {
+          _impl_.current_time_step_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 number_of_message_groups = 8;
+      case 8:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 64)) {
+          _impl_.number_of_message_groups_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      // int32 number_of_messages = 9;
+      case 9:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 72)) {
+          _impl_.number_of_messages_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
+          CHK_(ptr);
+        } else
+          goto handle_unusual;
+        continue;
+      default:
+        goto handle_unusual;
+    }  // switch
+  handle_unusual:
+    if ((tag == 0) || ((tag & 7) == 4)) {
+      CHK_(ptr);
+      ctx->SetLastTag(tag);
+      goto message_done;
+    }
+    ptr = UnknownFieldParse(
+        tag,
+        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
+        ptr, ctx);
+    CHK_(ptr != nullptr);
+  }  // while
+message_done:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto message_done;
+#undef CHK_
+}
+
+uint8_t* CosimaMsgGroup::_InternalSerialize(
+    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
+  // @@protoc_insertion_point(serialize_to_array_start:CosimaMsgGroup)
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .InitialMessage initial_messages = 1;
+  for (unsigned i = 0,
+      n = static_cast(this->_internal_initial_messages_size()); i < n; i++) {
+    const auto& repfield = this->_internal_initial_messages(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // repeated .InfoMessage info_messages = 2;
+  for (unsigned i = 0,
+      n = static_cast(this->_internal_info_messages_size()); i < n; i++) {
+    const auto& repfield = this->_internal_info_messages(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(2, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // repeated .SynchronisationMessage synchronisation_messages = 3;
+  for (unsigned i = 0,
+      n = static_cast(this->_internal_synchronisation_messages_size()); i < n; i++) {
+    const auto& repfield = this->_internal_synchronisation_messages(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(3, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // repeated .InfrastructureMessage infrastructure_messages = 4;
+  for (unsigned i = 0,
+      n = static_cast(this->_internal_infrastructure_messages_size()); i < n; i++) {
+    const auto& repfield = this->_internal_infrastructure_messages(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(4, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // repeated .TrafficMessage traffic_messages = 5;
+  for (unsigned i = 0,
+      n = static_cast(this->_internal_traffic_messages_size()); i < n; i++) {
+    const auto& repfield = this->_internal_traffic_messages(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(5, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // repeated .AttackMessage attack_messages = 6;
+  for (unsigned i = 0,
+      n = static_cast(this->_internal_attack_messages_size()); i < n; i++) {
+    const auto& repfield = this->_internal_attack_messages(i);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+        InternalWriteMessage(6, repfield, repfield.GetCachedSize(), target, stream);
+  }
+
+  // int32 current_time_step = 7;
+  if (this->_internal_current_time_step() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(7, this->_internal_current_time_step(), target);
+  }
+
+  // int32 number_of_message_groups = 8;
+  if (this->_internal_number_of_message_groups() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(8, this->_internal_number_of_message_groups(), target);
+  }
+
+  // int32 number_of_messages = 9;
+  if (this->_internal_number_of_messages() != 0) {
+    target = stream->EnsureSpace(target);
+    target = ::_pbi::WireFormatLite::WriteInt32ToArray(9, this->_internal_number_of_messages(), target);
+  }
+
+  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
+    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:CosimaMsgGroup)
+  return target;
+}
+
+size_t CosimaMsgGroup::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:CosimaMsgGroup)
+  size_t total_size = 0;
+
+  uint32_t cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .InitialMessage initial_messages = 1;
+  total_size += 1UL * this->_internal_initial_messages_size();
+  for (const auto& msg : this->_impl_.initial_messages_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // repeated .InfoMessage info_messages = 2;
+  total_size += 1UL * this->_internal_info_messages_size();
+  for (const auto& msg : this->_impl_.info_messages_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // repeated .SynchronisationMessage synchronisation_messages = 3;
+  total_size += 1UL * this->_internal_synchronisation_messages_size();
+  for (const auto& msg : this->_impl_.synchronisation_messages_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // repeated .InfrastructureMessage infrastructure_messages = 4;
+  total_size += 1UL * this->_internal_infrastructure_messages_size();
+  for (const auto& msg : this->_impl_.infrastructure_messages_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // repeated .TrafficMessage traffic_messages = 5;
+  total_size += 1UL * this->_internal_traffic_messages_size();
+  for (const auto& msg : this->_impl_.traffic_messages_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // repeated .AttackMessage attack_messages = 6;
+  total_size += 1UL * this->_internal_attack_messages_size();
+  for (const auto& msg : this->_impl_.attack_messages_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
+  // int32 current_time_step = 7;
+  if (this->_internal_current_time_step() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_current_time_step());
+  }
+
+  // int32 number_of_message_groups = 8;
+  if (this->_internal_number_of_message_groups() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_number_of_message_groups());
+  }
+
+  // int32 number_of_messages = 9;
+  if (this->_internal_number_of_messages() != 0) {
+    total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(this->_internal_number_of_messages());
+  }
+
+  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
+}
+
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CosimaMsgGroup::_class_data_ = {
+    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
+    CosimaMsgGroup::MergeImpl
+};
+const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CosimaMsgGroup::GetClassData() const { return &_class_data_; }
+
+
+void CosimaMsgGroup::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
+  auto* const _this = static_cast(&to_msg);
+  auto& from = static_cast(from_msg);
+  // @@protoc_insertion_point(class_specific_merge_from_start:CosimaMsgGroup)
+  GOOGLE_DCHECK_NE(&from, _this);
+  uint32_t cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  _this->_impl_.initial_messages_.MergeFrom(from._impl_.initial_messages_);
+  _this->_impl_.info_messages_.MergeFrom(from._impl_.info_messages_);
+  _this->_impl_.synchronisation_messages_.MergeFrom(from._impl_.synchronisation_messages_);
+  _this->_impl_.infrastructure_messages_.MergeFrom(from._impl_.infrastructure_messages_);
+  _this->_impl_.traffic_messages_.MergeFrom(from._impl_.traffic_messages_);
+  _this->_impl_.attack_messages_.MergeFrom(from._impl_.attack_messages_);
+  if (from._internal_current_time_step() != 0) {
+    _this->_internal_set_current_time_step(from._internal_current_time_step());
+  }
+  if (from._internal_number_of_message_groups() != 0) {
+    _this->_internal_set_number_of_message_groups(from._internal_number_of_message_groups());
+  }
+  if (from._internal_number_of_messages() != 0) {
+    _this->_internal_set_number_of_messages(from._internal_number_of_messages());
+  }
+  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
+}
+
+void CosimaMsgGroup::CopyFrom(const CosimaMsgGroup& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:CosimaMsgGroup)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool CosimaMsgGroup::IsInitialized() const {
+  return true;
+}
+
+void CosimaMsgGroup::InternalSwap(CosimaMsgGroup* other) {
+  using std::swap;
+  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
+  _impl_.initial_messages_.InternalSwap(&other->_impl_.initial_messages_);
+  _impl_.info_messages_.InternalSwap(&other->_impl_.info_messages_);
+  _impl_.synchronisation_messages_.InternalSwap(&other->_impl_.synchronisation_messages_);
+  _impl_.infrastructure_messages_.InternalSwap(&other->_impl_.infrastructure_messages_);
+  _impl_.traffic_messages_.InternalSwap(&other->_impl_.traffic_messages_);
+  _impl_.attack_messages_.InternalSwap(&other->_impl_.attack_messages_);
+  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
+      PROTOBUF_FIELD_OFFSET(CosimaMsgGroup, _impl_.number_of_messages_)
+      + sizeof(CosimaMsgGroup::_impl_.number_of_messages_)
+      - PROTOBUF_FIELD_OFFSET(CosimaMsgGroup, _impl_.current_time_step_)>(
+          reinterpret_cast(&_impl_.current_time_step_),
+          reinterpret_cast(&other->_impl_.current_time_step_));
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata CosimaMsgGroup::GetMetadata() const {
+  return ::_pbi::AssignDescriptors(
+      &descriptor_table_message_2eproto_getter, &descriptor_table_message_2eproto_once,
+      file_level_metadata_message_2eproto[6]);
+}
+
+// @@protoc_insertion_point(namespace_scope)
+PROTOBUF_NAMESPACE_OPEN
+template<> PROTOBUF_NOINLINE ::InitialMessage*
+Arena::CreateMaybeMessage< ::InitialMessage >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::InitialMessage >(arena);
+}
+template<> PROTOBUF_NOINLINE ::InfoMessage*
+Arena::CreateMaybeMessage< ::InfoMessage >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::InfoMessage >(arena);
+}
+template<> PROTOBUF_NOINLINE ::SynchronisationMessage*
+Arena::CreateMaybeMessage< ::SynchronisationMessage >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::SynchronisationMessage >(arena);
+}
+template<> PROTOBUF_NOINLINE ::InfrastructureMessage*
+Arena::CreateMaybeMessage< ::InfrastructureMessage >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::InfrastructureMessage >(arena);
+}
+template<> PROTOBUF_NOINLINE ::TrafficMessage*
+Arena::CreateMaybeMessage< ::TrafficMessage >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::TrafficMessage >(arena);
+}
+template<> PROTOBUF_NOINLINE ::AttackMessage*
+Arena::CreateMaybeMessage< ::AttackMessage >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::AttackMessage >(arena);
+}
+template<> PROTOBUF_NOINLINE ::CosimaMsgGroup*
+Arena::CreateMaybeMessage< ::CosimaMsgGroup >(Arena* arena) {
+  return Arena::CreateMessageInternal< ::CosimaMsgGroup >(arena);
+}
+PROTOBUF_NAMESPACE_CLOSE
+
+// @@protoc_insertion_point(global_scope)
+#include 
diff --git a/omnetpp/messages/message.pb.h b/omnetpp/messages/message.pb.h
new file mode 100644
index 0000000..95e5ae7
--- /dev/null
+++ b/omnetpp/messages/message.pb.h
@@ -0,0 +1,3535 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: message.proto
+
+#ifndef GOOGLE_PROTOBUF_INCLUDED_message_2eproto
+#define GOOGLE_PROTOBUF_INCLUDED_message_2eproto
+
+#include 
+#include 
+
+#include 
+#if PROTOBUF_VERSION < 3021000
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers. Please update
+#error your headers.
+#endif
+#if 3021012 < PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers. Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include   // IWYU pragma: export
+#include   // IWYU pragma: export
+#include 
+#include 
+// @@protoc_insertion_point(includes)
+#include 
+#define PROTOBUF_INTERNAL_EXPORT_message_2eproto
+PROTOBUF_NAMESPACE_OPEN
+namespace internal {
+class AnyMetadata;
+}  // namespace internal
+PROTOBUF_NAMESPACE_CLOSE
+
+// Internal implementation detail -- do not use these members.
+struct TableStruct_message_2eproto {
+  static const uint32_t offsets[];
+};
+extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_message_2eproto;
+class AttackMessage;
+struct AttackMessageDefaultTypeInternal;
+extern AttackMessageDefaultTypeInternal _AttackMessage_default_instance_;
+class CosimaMsgGroup;
+struct CosimaMsgGroupDefaultTypeInternal;
+extern CosimaMsgGroupDefaultTypeInternal _CosimaMsgGroup_default_instance_;
+class InfoMessage;
+struct InfoMessageDefaultTypeInternal;
+extern InfoMessageDefaultTypeInternal _InfoMessage_default_instance_;
+class InfrastructureMessage;
+struct InfrastructureMessageDefaultTypeInternal;
+extern InfrastructureMessageDefaultTypeInternal _InfrastructureMessage_default_instance_;
+class InitialMessage;
+struct InitialMessageDefaultTypeInternal;
+extern InitialMessageDefaultTypeInternal _InitialMessage_default_instance_;
+class SynchronisationMessage;
+struct SynchronisationMessageDefaultTypeInternal;
+extern SynchronisationMessageDefaultTypeInternal _SynchronisationMessage_default_instance_;
+class TrafficMessage;
+struct TrafficMessageDefaultTypeInternal;
+extern TrafficMessageDefaultTypeInternal _TrafficMessage_default_instance_;
+PROTOBUF_NAMESPACE_OPEN
+template<> ::AttackMessage* Arena::CreateMaybeMessage<::AttackMessage>(Arena*);
+template<> ::CosimaMsgGroup* Arena::CreateMaybeMessage<::CosimaMsgGroup>(Arena*);
+template<> ::InfoMessage* Arena::CreateMaybeMessage<::InfoMessage>(Arena*);
+template<> ::InfrastructureMessage* Arena::CreateMaybeMessage<::InfrastructureMessage>(Arena*);
+template<> ::InitialMessage* Arena::CreateMaybeMessage<::InitialMessage>(Arena*);
+template<> ::SynchronisationMessage* Arena::CreateMaybeMessage<::SynchronisationMessage>(Arena*);
+template<> ::TrafficMessage* Arena::CreateMaybeMessage<::TrafficMessage>(Arena*);
+PROTOBUF_NAMESPACE_CLOSE
+
+enum SynchronisationMessage_MsgType : int {
+  SynchronisationMessage_MsgType_MAX_ADVANCE = 0,
+  SynchronisationMessage_MsgType_WAITING = 1,
+  SynchronisationMessage_MsgType_TRANSMISSION_ERROR = 2,
+  SynchronisationMessage_MsgType_SynchronisationMessage_MsgType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits::min(),
+  SynchronisationMessage_MsgType_SynchronisationMessage_MsgType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max()
+};
+bool SynchronisationMessage_MsgType_IsValid(int value);
+constexpr SynchronisationMessage_MsgType SynchronisationMessage_MsgType_MsgType_MIN = SynchronisationMessage_MsgType_MAX_ADVANCE;
+constexpr SynchronisationMessage_MsgType SynchronisationMessage_MsgType_MsgType_MAX = SynchronisationMessage_MsgType_TRANSMISSION_ERROR;
+constexpr int SynchronisationMessage_MsgType_MsgType_ARRAYSIZE = SynchronisationMessage_MsgType_MsgType_MAX + 1;
+
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* SynchronisationMessage_MsgType_descriptor();
+template
+inline const std::string& SynchronisationMessage_MsgType_Name(T enum_t_value) {
+  static_assert(::std::is_same::value ||
+    ::std::is_integral::value,
+    "Incorrect type passed to function SynchronisationMessage_MsgType_Name.");
+  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
+    SynchronisationMessage_MsgType_descriptor(), enum_t_value);
+}
+inline bool SynchronisationMessage_MsgType_Parse(
+    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, SynchronisationMessage_MsgType* value) {
+  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum(
+    SynchronisationMessage_MsgType_descriptor(), name, value);
+}
+enum InfrastructureMessage_MsgType : int {
+  InfrastructureMessage_MsgType_DISCONNECT = 0,
+  InfrastructureMessage_MsgType_RECONNECT = 1,
+  InfrastructureMessage_MsgType_InfrastructureMessage_MsgType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits::min(),
+  InfrastructureMessage_MsgType_InfrastructureMessage_MsgType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max()
+};
+bool InfrastructureMessage_MsgType_IsValid(int value);
+constexpr InfrastructureMessage_MsgType InfrastructureMessage_MsgType_MsgType_MIN = InfrastructureMessage_MsgType_DISCONNECT;
+constexpr InfrastructureMessage_MsgType InfrastructureMessage_MsgType_MsgType_MAX = InfrastructureMessage_MsgType_RECONNECT;
+constexpr int InfrastructureMessage_MsgType_MsgType_ARRAYSIZE = InfrastructureMessage_MsgType_MsgType_MAX + 1;
+
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* InfrastructureMessage_MsgType_descriptor();
+template
+inline const std::string& InfrastructureMessage_MsgType_Name(T enum_t_value) {
+  static_assert(::std::is_same::value ||
+    ::std::is_integral::value,
+    "Incorrect type passed to function InfrastructureMessage_MsgType_Name.");
+  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
+    InfrastructureMessage_MsgType_descriptor(), enum_t_value);
+}
+inline bool InfrastructureMessage_MsgType_Parse(
+    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, InfrastructureMessage_MsgType* value) {
+  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum(
+    InfrastructureMessage_MsgType_descriptor(), name, value);
+}
+enum AttackMessage_MsgType : int {
+  AttackMessage_MsgType_PACKET_DROP = 0,
+  AttackMessage_MsgType_PACKET_FALSIFICATION = 1,
+  AttackMessage_MsgType_PACKET_DELAY = 2,
+  AttackMessage_MsgType_AttackMessage_MsgType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits::min(),
+  AttackMessage_MsgType_AttackMessage_MsgType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits::max()
+};
+bool AttackMessage_MsgType_IsValid(int value);
+constexpr AttackMessage_MsgType AttackMessage_MsgType_MsgType_MIN = AttackMessage_MsgType_PACKET_DROP;
+constexpr AttackMessage_MsgType AttackMessage_MsgType_MsgType_MAX = AttackMessage_MsgType_PACKET_DELAY;
+constexpr int AttackMessage_MsgType_MsgType_ARRAYSIZE = AttackMessage_MsgType_MsgType_MAX + 1;
+
+const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* AttackMessage_MsgType_descriptor();
+template
+inline const std::string& AttackMessage_MsgType_Name(T enum_t_value) {
+  static_assert(::std::is_same::value ||
+    ::std::is_integral::value,
+    "Incorrect type passed to function AttackMessage_MsgType_Name.");
+  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
+    AttackMessage_MsgType_descriptor(), enum_t_value);
+}
+inline bool AttackMessage_MsgType_Parse(
+    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, AttackMessage_MsgType* value) {
+  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum(
+    AttackMessage_MsgType_descriptor(), name, value);
+}
+// ===================================================================
+
+class InitialMessage final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:InitialMessage) */ {
+ public:
+  inline InitialMessage() : InitialMessage(nullptr) {}
+  ~InitialMessage() override;
+  explicit PROTOBUF_CONSTEXPR InitialMessage(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  InitialMessage(const InitialMessage& from);
+  InitialMessage(InitialMessage&& from) noexcept
+    : InitialMessage() {
+    *this = ::std::move(from);
+  }
+
+  inline InitialMessage& operator=(const InitialMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline InitialMessage& operator=(InitialMessage&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const InitialMessage& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const InitialMessage* internal_default_instance() {
+    return reinterpret_cast(
+               &_InitialMessage_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    0;
+
+  friend void swap(InitialMessage& a, InitialMessage& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(InitialMessage* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(InitialMessage* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  InitialMessage* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const InitialMessage& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const InitialMessage& from) {
+    InitialMessage::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(InitialMessage* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "InitialMessage";
+  }
+  protected:
+  explicit InitialMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMsgIdFieldNumber = 1,
+    kLoggingLevelFieldNumber = 5,
+    kMaxAdvanceFieldNumber = 2,
+    kUntilFieldNumber = 3,
+    kStepSizeFieldNumber = 4,
+    kMaxByteSizePerMsgGroupFieldNumber = 6,
+  };
+  // string msg_id = 1;
+  void clear_msg_id();
+  const std::string& msg_id() const;
+  template 
+  void set_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_msg_id();
+  PROTOBUF_NODISCARD std::string* release_msg_id();
+  void set_allocated_msg_id(std::string* msg_id);
+  private:
+  const std::string& _internal_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_msg_id(const std::string& value);
+  std::string* _internal_mutable_msg_id();
+  public:
+
+  // string logging_level = 5;
+  void clear_logging_level();
+  const std::string& logging_level() const;
+  template 
+  void set_logging_level(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_logging_level();
+  PROTOBUF_NODISCARD std::string* release_logging_level();
+  void set_allocated_logging_level(std::string* logging_level);
+  private:
+  const std::string& _internal_logging_level() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_logging_level(const std::string& value);
+  std::string* _internal_mutable_logging_level();
+  public:
+
+  // int32 max_advance = 2;
+  void clear_max_advance();
+  int32_t max_advance() const;
+  void set_max_advance(int32_t value);
+  private:
+  int32_t _internal_max_advance() const;
+  void _internal_set_max_advance(int32_t value);
+  public:
+
+  // int32 until = 3;
+  void clear_until();
+  int32_t until() const;
+  void set_until(int32_t value);
+  private:
+  int32_t _internal_until() const;
+  void _internal_set_until(int32_t value);
+  public:
+
+  // int32 step_size = 4;
+  void clear_step_size();
+  int32_t step_size() const;
+  void set_step_size(int32_t value);
+  private:
+  int32_t _internal_step_size() const;
+  void _internal_set_step_size(int32_t value);
+  public:
+
+  // int32 max_byte_size_per_msg_group = 6;
+  void clear_max_byte_size_per_msg_group();
+  int32_t max_byte_size_per_msg_group() const;
+  void set_max_byte_size_per_msg_group(int32_t value);
+  private:
+  int32_t _internal_max_byte_size_per_msg_group() const;
+  void _internal_set_max_byte_size_per_msg_group(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:InitialMessage)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_id_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr logging_level_;
+    int32_t max_advance_;
+    int32_t until_;
+    int32_t step_size_;
+    int32_t max_byte_size_per_msg_group_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
+class InfoMessage final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:InfoMessage) */ {
+ public:
+  inline InfoMessage() : InfoMessage(nullptr) {}
+  ~InfoMessage() override;
+  explicit PROTOBUF_CONSTEXPR InfoMessage(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  InfoMessage(const InfoMessage& from);
+  InfoMessage(InfoMessage&& from) noexcept
+    : InfoMessage() {
+    *this = ::std::move(from);
+  }
+
+  inline InfoMessage& operator=(const InfoMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline InfoMessage& operator=(InfoMessage&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const InfoMessage& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const InfoMessage* internal_default_instance() {
+    return reinterpret_cast(
+               &_InfoMessage_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    1;
+
+  friend void swap(InfoMessage& a, InfoMessage& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(InfoMessage* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(InfoMessage* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  InfoMessage* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const InfoMessage& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const InfoMessage& from) {
+    InfoMessage::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(InfoMessage* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "InfoMessage";
+  }
+  protected:
+  explicit InfoMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMsgIdFieldNumber = 1,
+    kSenderFieldNumber = 4,
+    kReceiverFieldNumber = 5,
+    kContentFieldNumber = 7,
+    kMaxAdvanceFieldNumber = 2,
+    kSimTimeFieldNumber = 3,
+    kSizeFieldNumber = 6,
+    kCreationTimeFieldNumber = 8,
+    kIsFalsifiedFieldNumber = 9,
+  };
+  // string msg_id = 1;
+  void clear_msg_id();
+  const std::string& msg_id() const;
+  template 
+  void set_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_msg_id();
+  PROTOBUF_NODISCARD std::string* release_msg_id();
+  void set_allocated_msg_id(std::string* msg_id);
+  private:
+  const std::string& _internal_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_msg_id(const std::string& value);
+  std::string* _internal_mutable_msg_id();
+  public:
+
+  // string sender = 4;
+  void clear_sender();
+  const std::string& sender() const;
+  template 
+  void set_sender(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_sender();
+  PROTOBUF_NODISCARD std::string* release_sender();
+  void set_allocated_sender(std::string* sender);
+  private:
+  const std::string& _internal_sender() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_sender(const std::string& value);
+  std::string* _internal_mutable_sender();
+  public:
+
+  // string receiver = 5;
+  void clear_receiver();
+  const std::string& receiver() const;
+  template 
+  void set_receiver(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_receiver();
+  PROTOBUF_NODISCARD std::string* release_receiver();
+  void set_allocated_receiver(std::string* receiver);
+  private:
+  const std::string& _internal_receiver() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_receiver(const std::string& value);
+  std::string* _internal_mutable_receiver();
+  public:
+
+  // string content = 7;
+  void clear_content();
+  const std::string& content() const;
+  template 
+  void set_content(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_content();
+  PROTOBUF_NODISCARD std::string* release_content();
+  void set_allocated_content(std::string* content);
+  private:
+  const std::string& _internal_content() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_content(const std::string& value);
+  std::string* _internal_mutable_content();
+  public:
+
+  // int32 max_advance = 2;
+  void clear_max_advance();
+  int32_t max_advance() const;
+  void set_max_advance(int32_t value);
+  private:
+  int32_t _internal_max_advance() const;
+  void _internal_set_max_advance(int32_t value);
+  public:
+
+  // int32 sim_time = 3;
+  void clear_sim_time();
+  int32_t sim_time() const;
+  void set_sim_time(int32_t value);
+  private:
+  int32_t _internal_sim_time() const;
+  void _internal_set_sim_time(int32_t value);
+  public:
+
+  // int32 size = 6;
+  void clear_size();
+  int32_t size() const;
+  void set_size(int32_t value);
+  private:
+  int32_t _internal_size() const;
+  void _internal_set_size(int32_t value);
+  public:
+
+  // int32 creation_time = 8;
+  void clear_creation_time();
+  int32_t creation_time() const;
+  void set_creation_time(int32_t value);
+  private:
+  int32_t _internal_creation_time() const;
+  void _internal_set_creation_time(int32_t value);
+  public:
+
+  // bool is_falsified = 9;
+  void clear_is_falsified();
+  bool is_falsified() const;
+  void set_is_falsified(bool value);
+  private:
+  bool _internal_is_falsified() const;
+  void _internal_set_is_falsified(bool value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:InfoMessage)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_id_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr sender_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr receiver_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr content_;
+    int32_t max_advance_;
+    int32_t sim_time_;
+    int32_t size_;
+    int32_t creation_time_;
+    bool is_falsified_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
+class SynchronisationMessage final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:SynchronisationMessage) */ {
+ public:
+  inline SynchronisationMessage() : SynchronisationMessage(nullptr) {}
+  ~SynchronisationMessage() override;
+  explicit PROTOBUF_CONSTEXPR SynchronisationMessage(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  SynchronisationMessage(const SynchronisationMessage& from);
+  SynchronisationMessage(SynchronisationMessage&& from) noexcept
+    : SynchronisationMessage() {
+    *this = ::std::move(from);
+  }
+
+  inline SynchronisationMessage& operator=(const SynchronisationMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline SynchronisationMessage& operator=(SynchronisationMessage&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const SynchronisationMessage& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const SynchronisationMessage* internal_default_instance() {
+    return reinterpret_cast(
+               &_SynchronisationMessage_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    2;
+
+  friend void swap(SynchronisationMessage& a, SynchronisationMessage& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(SynchronisationMessage* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(SynchronisationMessage* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  SynchronisationMessage* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const SynchronisationMessage& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const SynchronisationMessage& from) {
+    SynchronisationMessage::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(SynchronisationMessage* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "SynchronisationMessage";
+  }
+  protected:
+  explicit SynchronisationMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  typedef SynchronisationMessage_MsgType MsgType;
+  static constexpr MsgType MAX_ADVANCE =
+    SynchronisationMessage_MsgType_MAX_ADVANCE;
+  static constexpr MsgType WAITING =
+    SynchronisationMessage_MsgType_WAITING;
+  static constexpr MsgType TRANSMISSION_ERROR =
+    SynchronisationMessage_MsgType_TRANSMISSION_ERROR;
+  static inline bool MsgType_IsValid(int value) {
+    return SynchronisationMessage_MsgType_IsValid(value);
+  }
+  static constexpr MsgType MsgType_MIN =
+    SynchronisationMessage_MsgType_MsgType_MIN;
+  static constexpr MsgType MsgType_MAX =
+    SynchronisationMessage_MsgType_MsgType_MAX;
+  static constexpr int MsgType_ARRAYSIZE =
+    SynchronisationMessage_MsgType_MsgType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  MsgType_descriptor() {
+    return SynchronisationMessage_MsgType_descriptor();
+  }
+  template
+  static inline const std::string& MsgType_Name(T enum_t_value) {
+    static_assert(::std::is_same::value ||
+      ::std::is_integral::value,
+      "Incorrect type passed to function MsgType_Name.");
+    return SynchronisationMessage_MsgType_Name(enum_t_value);
+  }
+  static inline bool MsgType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      MsgType* value) {
+    return SynchronisationMessage_MsgType_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMsgIdFieldNumber = 2,
+    kTimeoutMsgIdFieldNumber = 6,
+    kMsgTypeFieldNumber = 1,
+    kSimTimeFieldNumber = 3,
+    kMaxAdvanceFieldNumber = 4,
+    kTimeoutFieldNumber = 5,
+  };
+  // string msg_id = 2;
+  void clear_msg_id();
+  const std::string& msg_id() const;
+  template 
+  void set_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_msg_id();
+  PROTOBUF_NODISCARD std::string* release_msg_id();
+  void set_allocated_msg_id(std::string* msg_id);
+  private:
+  const std::string& _internal_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_msg_id(const std::string& value);
+  std::string* _internal_mutable_msg_id();
+  public:
+
+  // string timeout_msg_id = 6;
+  void clear_timeout_msg_id();
+  const std::string& timeout_msg_id() const;
+  template 
+  void set_timeout_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_timeout_msg_id();
+  PROTOBUF_NODISCARD std::string* release_timeout_msg_id();
+  void set_allocated_timeout_msg_id(std::string* timeout_msg_id);
+  private:
+  const std::string& _internal_timeout_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_timeout_msg_id(const std::string& value);
+  std::string* _internal_mutable_timeout_msg_id();
+  public:
+
+  // .SynchronisationMessage.MsgType msg_type = 1;
+  void clear_msg_type();
+  ::SynchronisationMessage_MsgType msg_type() const;
+  void set_msg_type(::SynchronisationMessage_MsgType value);
+  private:
+  ::SynchronisationMessage_MsgType _internal_msg_type() const;
+  void _internal_set_msg_type(::SynchronisationMessage_MsgType value);
+  public:
+
+  // int32 sim_time = 3;
+  void clear_sim_time();
+  int32_t sim_time() const;
+  void set_sim_time(int32_t value);
+  private:
+  int32_t _internal_sim_time() const;
+  void _internal_set_sim_time(int32_t value);
+  public:
+
+  // int32 max_advance = 4;
+  void clear_max_advance();
+  int32_t max_advance() const;
+  void set_max_advance(int32_t value);
+  private:
+  int32_t _internal_max_advance() const;
+  void _internal_set_max_advance(int32_t value);
+  public:
+
+  // bool timeout = 5;
+  void clear_timeout();
+  bool timeout() const;
+  void set_timeout(bool value);
+  private:
+  bool _internal_timeout() const;
+  void _internal_set_timeout(bool value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:SynchronisationMessage)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_id_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr timeout_msg_id_;
+    int msg_type_;
+    int32_t sim_time_;
+    int32_t max_advance_;
+    bool timeout_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
+class InfrastructureMessage final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:InfrastructureMessage) */ {
+ public:
+  inline InfrastructureMessage() : InfrastructureMessage(nullptr) {}
+  ~InfrastructureMessage() override;
+  explicit PROTOBUF_CONSTEXPR InfrastructureMessage(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  InfrastructureMessage(const InfrastructureMessage& from);
+  InfrastructureMessage(InfrastructureMessage&& from) noexcept
+    : InfrastructureMessage() {
+    *this = ::std::move(from);
+  }
+
+  inline InfrastructureMessage& operator=(const InfrastructureMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline InfrastructureMessage& operator=(InfrastructureMessage&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const InfrastructureMessage& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const InfrastructureMessage* internal_default_instance() {
+    return reinterpret_cast(
+               &_InfrastructureMessage_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    3;
+
+  friend void swap(InfrastructureMessage& a, InfrastructureMessage& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(InfrastructureMessage* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(InfrastructureMessage* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  InfrastructureMessage* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const InfrastructureMessage& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const InfrastructureMessage& from) {
+    InfrastructureMessage::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(InfrastructureMessage* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "InfrastructureMessage";
+  }
+  protected:
+  explicit InfrastructureMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  typedef InfrastructureMessage_MsgType MsgType;
+  static constexpr MsgType DISCONNECT =
+    InfrastructureMessage_MsgType_DISCONNECT;
+  static constexpr MsgType RECONNECT =
+    InfrastructureMessage_MsgType_RECONNECT;
+  static inline bool MsgType_IsValid(int value) {
+    return InfrastructureMessage_MsgType_IsValid(value);
+  }
+  static constexpr MsgType MsgType_MIN =
+    InfrastructureMessage_MsgType_MsgType_MIN;
+  static constexpr MsgType MsgType_MAX =
+    InfrastructureMessage_MsgType_MsgType_MAX;
+  static constexpr int MsgType_ARRAYSIZE =
+    InfrastructureMessage_MsgType_MsgType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  MsgType_descriptor() {
+    return InfrastructureMessage_MsgType_descriptor();
+  }
+  template
+  static inline const std::string& MsgType_Name(T enum_t_value) {
+    static_assert(::std::is_same::value ||
+      ::std::is_integral::value,
+      "Incorrect type passed to function MsgType_Name.");
+    return InfrastructureMessage_MsgType_Name(enum_t_value);
+  }
+  static inline bool MsgType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      MsgType* value) {
+    return InfrastructureMessage_MsgType_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMsgIdFieldNumber = 2,
+    kChangeModuleFieldNumber = 4,
+    kMsgTypeFieldNumber = 1,
+    kSimTimeFieldNumber = 3,
+    kConnectionChangeSuccessfulFieldNumber = 5,
+  };
+  // string msg_id = 2;
+  void clear_msg_id();
+  const std::string& msg_id() const;
+  template 
+  void set_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_msg_id();
+  PROTOBUF_NODISCARD std::string* release_msg_id();
+  void set_allocated_msg_id(std::string* msg_id);
+  private:
+  const std::string& _internal_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_msg_id(const std::string& value);
+  std::string* _internal_mutable_msg_id();
+  public:
+
+  // string change_module = 4;
+  void clear_change_module();
+  const std::string& change_module() const;
+  template 
+  void set_change_module(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_change_module();
+  PROTOBUF_NODISCARD std::string* release_change_module();
+  void set_allocated_change_module(std::string* change_module);
+  private:
+  const std::string& _internal_change_module() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_change_module(const std::string& value);
+  std::string* _internal_mutable_change_module();
+  public:
+
+  // .InfrastructureMessage.MsgType msg_type = 1;
+  void clear_msg_type();
+  ::InfrastructureMessage_MsgType msg_type() const;
+  void set_msg_type(::InfrastructureMessage_MsgType value);
+  private:
+  ::InfrastructureMessage_MsgType _internal_msg_type() const;
+  void _internal_set_msg_type(::InfrastructureMessage_MsgType value);
+  public:
+
+  // int32 sim_time = 3;
+  void clear_sim_time();
+  int32_t sim_time() const;
+  void set_sim_time(int32_t value);
+  private:
+  int32_t _internal_sim_time() const;
+  void _internal_set_sim_time(int32_t value);
+  public:
+
+  // bool connection_change_successful = 5;
+  void clear_connection_change_successful();
+  bool connection_change_successful() const;
+  void set_connection_change_successful(bool value);
+  private:
+  bool _internal_connection_change_successful() const;
+  void _internal_set_connection_change_successful(bool value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:InfrastructureMessage)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_id_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr change_module_;
+    int msg_type_;
+    int32_t sim_time_;
+    bool connection_change_successful_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
+class TrafficMessage final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:TrafficMessage) */ {
+ public:
+  inline TrafficMessage() : TrafficMessage(nullptr) {}
+  ~TrafficMessage() override;
+  explicit PROTOBUF_CONSTEXPR TrafficMessage(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  TrafficMessage(const TrafficMessage& from);
+  TrafficMessage(TrafficMessage&& from) noexcept
+    : TrafficMessage() {
+    *this = ::std::move(from);
+  }
+
+  inline TrafficMessage& operator=(const TrafficMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline TrafficMessage& operator=(TrafficMessage&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const TrafficMessage& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const TrafficMessage* internal_default_instance() {
+    return reinterpret_cast(
+               &_TrafficMessage_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    4;
+
+  friend void swap(TrafficMessage& a, TrafficMessage& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(TrafficMessage* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(TrafficMessage* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  TrafficMessage* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const TrafficMessage& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const TrafficMessage& from) {
+    TrafficMessage::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(TrafficMessage* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "TrafficMessage";
+  }
+  protected:
+  explicit TrafficMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMsgIdFieldNumber = 1,
+    kSourceFieldNumber = 3,
+    kDestinationFieldNumber = 4,
+    kSimTimeFieldNumber = 2,
+    kStartFieldNumber = 5,
+    kStopFieldNumber = 6,
+    kIntervalFieldNumber = 7,
+    kPacketLengthFieldNumber = 8,
+  };
+  // string msg_id = 1;
+  void clear_msg_id();
+  const std::string& msg_id() const;
+  template 
+  void set_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_msg_id();
+  PROTOBUF_NODISCARD std::string* release_msg_id();
+  void set_allocated_msg_id(std::string* msg_id);
+  private:
+  const std::string& _internal_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_msg_id(const std::string& value);
+  std::string* _internal_mutable_msg_id();
+  public:
+
+  // string source = 3;
+  void clear_source();
+  const std::string& source() const;
+  template 
+  void set_source(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_source();
+  PROTOBUF_NODISCARD std::string* release_source();
+  void set_allocated_source(std::string* source);
+  private:
+  const std::string& _internal_source() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_source(const std::string& value);
+  std::string* _internal_mutable_source();
+  public:
+
+  // string destination = 4;
+  void clear_destination();
+  const std::string& destination() const;
+  template 
+  void set_destination(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_destination();
+  PROTOBUF_NODISCARD std::string* release_destination();
+  void set_allocated_destination(std::string* destination);
+  private:
+  const std::string& _internal_destination() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_destination(const std::string& value);
+  std::string* _internal_mutable_destination();
+  public:
+
+  // int32 sim_time = 2;
+  void clear_sim_time();
+  int32_t sim_time() const;
+  void set_sim_time(int32_t value);
+  private:
+  int32_t _internal_sim_time() const;
+  void _internal_set_sim_time(int32_t value);
+  public:
+
+  // int32 start = 5;
+  void clear_start();
+  int32_t start() const;
+  void set_start(int32_t value);
+  private:
+  int32_t _internal_start() const;
+  void _internal_set_start(int32_t value);
+  public:
+
+  // int32 stop = 6;
+  void clear_stop();
+  int32_t stop() const;
+  void set_stop(int32_t value);
+  private:
+  int32_t _internal_stop() const;
+  void _internal_set_stop(int32_t value);
+  public:
+
+  // int32 interval = 7;
+  void clear_interval();
+  int32_t interval() const;
+  void set_interval(int32_t value);
+  private:
+  int32_t _internal_interval() const;
+  void _internal_set_interval(int32_t value);
+  public:
+
+  // int32 packet_length = 8;
+  void clear_packet_length();
+  int32_t packet_length() const;
+  void set_packet_length(int32_t value);
+  private:
+  int32_t _internal_packet_length() const;
+  void _internal_set_packet_length(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:TrafficMessage)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_id_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr source_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr destination_;
+    int32_t sim_time_;
+    int32_t start_;
+    int32_t stop_;
+    int32_t interval_;
+    int32_t packet_length_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
+class AttackMessage final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:AttackMessage) */ {
+ public:
+  inline AttackMessage() : AttackMessage(nullptr) {}
+  ~AttackMessage() override;
+  explicit PROTOBUF_CONSTEXPR AttackMessage(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  AttackMessage(const AttackMessage& from);
+  AttackMessage(AttackMessage&& from) noexcept
+    : AttackMessage() {
+    *this = ::std::move(from);
+  }
+
+  inline AttackMessage& operator=(const AttackMessage& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline AttackMessage& operator=(AttackMessage&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const AttackMessage& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const AttackMessage* internal_default_instance() {
+    return reinterpret_cast(
+               &_AttackMessage_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    5;
+
+  friend void swap(AttackMessage& a, AttackMessage& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(AttackMessage* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(AttackMessage* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  AttackMessage* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const AttackMessage& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const AttackMessage& from) {
+    AttackMessage::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(AttackMessage* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "AttackMessage";
+  }
+  protected:
+  explicit AttackMessage(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  typedef AttackMessage_MsgType MsgType;
+  static constexpr MsgType PACKET_DROP =
+    AttackMessage_MsgType_PACKET_DROP;
+  static constexpr MsgType PACKET_FALSIFICATION =
+    AttackMessage_MsgType_PACKET_FALSIFICATION;
+  static constexpr MsgType PACKET_DELAY =
+    AttackMessage_MsgType_PACKET_DELAY;
+  static inline bool MsgType_IsValid(int value) {
+    return AttackMessage_MsgType_IsValid(value);
+  }
+  static constexpr MsgType MsgType_MIN =
+    AttackMessage_MsgType_MsgType_MIN;
+  static constexpr MsgType MsgType_MAX =
+    AttackMessage_MsgType_MsgType_MAX;
+  static constexpr int MsgType_ARRAYSIZE =
+    AttackMessage_MsgType_MsgType_ARRAYSIZE;
+  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
+  MsgType_descriptor() {
+    return AttackMessage_MsgType_descriptor();
+  }
+  template
+  static inline const std::string& MsgType_Name(T enum_t_value) {
+    static_assert(::std::is_same::value ||
+      ::std::is_integral::value,
+      "Incorrect type passed to function MsgType_Name.");
+    return AttackMessage_MsgType_Name(enum_t_value);
+  }
+  static inline bool MsgType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
+      MsgType* value) {
+    return AttackMessage_MsgType_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kMsgIdFieldNumber = 2,
+    kAttackedModuleFieldNumber = 4,
+    kMsgTypeFieldNumber = 1,
+    kSimTimeFieldNumber = 3,
+    kStartFieldNumber = 5,
+    kStopFieldNumber = 6,
+    kAttackProbabilityFieldNumber = 7,
+  };
+  // string msg_id = 2;
+  void clear_msg_id();
+  const std::string& msg_id() const;
+  template 
+  void set_msg_id(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_msg_id();
+  PROTOBUF_NODISCARD std::string* release_msg_id();
+  void set_allocated_msg_id(std::string* msg_id);
+  private:
+  const std::string& _internal_msg_id() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_msg_id(const std::string& value);
+  std::string* _internal_mutable_msg_id();
+  public:
+
+  // string attacked_module = 4;
+  void clear_attacked_module();
+  const std::string& attacked_module() const;
+  template 
+  void set_attacked_module(ArgT0&& arg0, ArgT... args);
+  std::string* mutable_attacked_module();
+  PROTOBUF_NODISCARD std::string* release_attacked_module();
+  void set_allocated_attacked_module(std::string* attacked_module);
+  private:
+  const std::string& _internal_attacked_module() const;
+  inline PROTOBUF_ALWAYS_INLINE void _internal_set_attacked_module(const std::string& value);
+  std::string* _internal_mutable_attacked_module();
+  public:
+
+  // .AttackMessage.MsgType msg_type = 1;
+  void clear_msg_type();
+  ::AttackMessage_MsgType msg_type() const;
+  void set_msg_type(::AttackMessage_MsgType value);
+  private:
+  ::AttackMessage_MsgType _internal_msg_type() const;
+  void _internal_set_msg_type(::AttackMessage_MsgType value);
+  public:
+
+  // int32 sim_time = 3;
+  void clear_sim_time();
+  int32_t sim_time() const;
+  void set_sim_time(int32_t value);
+  private:
+  int32_t _internal_sim_time() const;
+  void _internal_set_sim_time(int32_t value);
+  public:
+
+  // int32 start = 5;
+  void clear_start();
+  int32_t start() const;
+  void set_start(int32_t value);
+  private:
+  int32_t _internal_start() const;
+  void _internal_set_start(int32_t value);
+  public:
+
+  // int32 stop = 6;
+  void clear_stop();
+  int32_t stop() const;
+  void set_stop(int32_t value);
+  private:
+  int32_t _internal_stop() const;
+  void _internal_set_stop(int32_t value);
+  public:
+
+  // int32 attack_probability = 7;
+  void clear_attack_probability();
+  int32_t attack_probability() const;
+  void set_attack_probability(int32_t value);
+  private:
+  int32_t _internal_attack_probability() const;
+  void _internal_set_attack_probability(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:AttackMessage)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr msg_id_;
+    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr attacked_module_;
+    int msg_type_;
+    int32_t sim_time_;
+    int32_t start_;
+    int32_t stop_;
+    int32_t attack_probability_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// -------------------------------------------------------------------
+
+class CosimaMsgGroup final :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:CosimaMsgGroup) */ {
+ public:
+  inline CosimaMsgGroup() : CosimaMsgGroup(nullptr) {}
+  ~CosimaMsgGroup() override;
+  explicit PROTOBUF_CONSTEXPR CosimaMsgGroup(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
+
+  CosimaMsgGroup(const CosimaMsgGroup& from);
+  CosimaMsgGroup(CosimaMsgGroup&& from) noexcept
+    : CosimaMsgGroup() {
+    *this = ::std::move(from);
+  }
+
+  inline CosimaMsgGroup& operator=(const CosimaMsgGroup& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline CosimaMsgGroup& operator=(CosimaMsgGroup&& from) noexcept {
+    if (this == &from) return *this;
+    if (GetOwningArena() == from.GetOwningArena()
+  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
+        && GetOwningArena() != nullptr
+  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
+    ) {
+      InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return default_instance().GetMetadata().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return default_instance().GetMetadata().reflection;
+  }
+  static const CosimaMsgGroup& default_instance() {
+    return *internal_default_instance();
+  }
+  static inline const CosimaMsgGroup* internal_default_instance() {
+    return reinterpret_cast(
+               &_CosimaMsgGroup_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    6;
+
+  friend void swap(CosimaMsgGroup& a, CosimaMsgGroup& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(CosimaMsgGroup* other) {
+    if (other == this) return;
+  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() != nullptr &&
+        GetOwningArena() == other->GetOwningArena()) {
+   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
+    if (GetOwningArena() == other->GetOwningArena()) {
+  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
+      InternalSwap(other);
+    } else {
+      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
+    }
+  }
+  void UnsafeArenaSwap(CosimaMsgGroup* other) {
+    if (other == this) return;
+    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  CosimaMsgGroup* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
+    return CreateMaybeMessage(arena);
+  }
+  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
+  void CopyFrom(const CosimaMsgGroup& from);
+  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
+  void MergeFrom( const CosimaMsgGroup& from) {
+    CosimaMsgGroup::MergeImpl(*this, from);
+  }
+  private:
+  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
+  public:
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  uint8_t* _InternalSerialize(
+      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
+  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }
+
+  private:
+  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(CosimaMsgGroup* other);
+
+  private:
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "CosimaMsgGroup";
+  }
+  protected:
+  explicit CosimaMsgGroup(::PROTOBUF_NAMESPACE_ID::Arena* arena,
+                       bool is_message_owned = false);
+  public:
+
+  static const ClassData _class_data_;
+  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kInitialMessagesFieldNumber = 1,
+    kInfoMessagesFieldNumber = 2,
+    kSynchronisationMessagesFieldNumber = 3,
+    kInfrastructureMessagesFieldNumber = 4,
+    kTrafficMessagesFieldNumber = 5,
+    kAttackMessagesFieldNumber = 6,
+    kCurrentTimeStepFieldNumber = 7,
+    kNumberOfMessageGroupsFieldNumber = 8,
+    kNumberOfMessagesFieldNumber = 9,
+  };
+  // repeated .InitialMessage initial_messages = 1;
+  int initial_messages_size() const;
+  private:
+  int _internal_initial_messages_size() const;
+  public:
+  void clear_initial_messages();
+  ::InitialMessage* mutable_initial_messages(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InitialMessage >*
+      mutable_initial_messages();
+  private:
+  const ::InitialMessage& _internal_initial_messages(int index) const;
+  ::InitialMessage* _internal_add_initial_messages();
+  public:
+  const ::InitialMessage& initial_messages(int index) const;
+  ::InitialMessage* add_initial_messages();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InitialMessage >&
+      initial_messages() const;
+
+  // repeated .InfoMessage info_messages = 2;
+  int info_messages_size() const;
+  private:
+  int _internal_info_messages_size() const;
+  public:
+  void clear_info_messages();
+  ::InfoMessage* mutable_info_messages(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfoMessage >*
+      mutable_info_messages();
+  private:
+  const ::InfoMessage& _internal_info_messages(int index) const;
+  ::InfoMessage* _internal_add_info_messages();
+  public:
+  const ::InfoMessage& info_messages(int index) const;
+  ::InfoMessage* add_info_messages();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfoMessage >&
+      info_messages() const;
+
+  // repeated .SynchronisationMessage synchronisation_messages = 3;
+  int synchronisation_messages_size() const;
+  private:
+  int _internal_synchronisation_messages_size() const;
+  public:
+  void clear_synchronisation_messages();
+  ::SynchronisationMessage* mutable_synchronisation_messages(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::SynchronisationMessage >*
+      mutable_synchronisation_messages();
+  private:
+  const ::SynchronisationMessage& _internal_synchronisation_messages(int index) const;
+  ::SynchronisationMessage* _internal_add_synchronisation_messages();
+  public:
+  const ::SynchronisationMessage& synchronisation_messages(int index) const;
+  ::SynchronisationMessage* add_synchronisation_messages();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::SynchronisationMessage >&
+      synchronisation_messages() const;
+
+  // repeated .InfrastructureMessage infrastructure_messages = 4;
+  int infrastructure_messages_size() const;
+  private:
+  int _internal_infrastructure_messages_size() const;
+  public:
+  void clear_infrastructure_messages();
+  ::InfrastructureMessage* mutable_infrastructure_messages(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfrastructureMessage >*
+      mutable_infrastructure_messages();
+  private:
+  const ::InfrastructureMessage& _internal_infrastructure_messages(int index) const;
+  ::InfrastructureMessage* _internal_add_infrastructure_messages();
+  public:
+  const ::InfrastructureMessage& infrastructure_messages(int index) const;
+  ::InfrastructureMessage* add_infrastructure_messages();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfrastructureMessage >&
+      infrastructure_messages() const;
+
+  // repeated .TrafficMessage traffic_messages = 5;
+  int traffic_messages_size() const;
+  private:
+  int _internal_traffic_messages_size() const;
+  public:
+  void clear_traffic_messages();
+  ::TrafficMessage* mutable_traffic_messages(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::TrafficMessage >*
+      mutable_traffic_messages();
+  private:
+  const ::TrafficMessage& _internal_traffic_messages(int index) const;
+  ::TrafficMessage* _internal_add_traffic_messages();
+  public:
+  const ::TrafficMessage& traffic_messages(int index) const;
+  ::TrafficMessage* add_traffic_messages();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::TrafficMessage >&
+      traffic_messages() const;
+
+  // repeated .AttackMessage attack_messages = 6;
+  int attack_messages_size() const;
+  private:
+  int _internal_attack_messages_size() const;
+  public:
+  void clear_attack_messages();
+  ::AttackMessage* mutable_attack_messages(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::AttackMessage >*
+      mutable_attack_messages();
+  private:
+  const ::AttackMessage& _internal_attack_messages(int index) const;
+  ::AttackMessage* _internal_add_attack_messages();
+  public:
+  const ::AttackMessage& attack_messages(int index) const;
+  ::AttackMessage* add_attack_messages();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::AttackMessage >&
+      attack_messages() const;
+
+  // int32 current_time_step = 7;
+  void clear_current_time_step();
+  int32_t current_time_step() const;
+  void set_current_time_step(int32_t value);
+  private:
+  int32_t _internal_current_time_step() const;
+  void _internal_set_current_time_step(int32_t value);
+  public:
+
+  // int32 number_of_message_groups = 8;
+  void clear_number_of_message_groups();
+  int32_t number_of_message_groups() const;
+  void set_number_of_message_groups(int32_t value);
+  private:
+  int32_t _internal_number_of_message_groups() const;
+  void _internal_set_number_of_message_groups(int32_t value);
+  public:
+
+  // int32 number_of_messages = 9;
+  void clear_number_of_messages();
+  int32_t number_of_messages() const;
+  void set_number_of_messages(int32_t value);
+  private:
+  int32_t _internal_number_of_messages() const;
+  void _internal_set_number_of_messages(int32_t value);
+  public:
+
+  // @@protoc_insertion_point(class_scope:CosimaMsgGroup)
+ private:
+  class _Internal;
+
+  template  friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
+  typedef void InternalArenaConstructable_;
+  typedef void DestructorSkippable_;
+  struct Impl_ {
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InitialMessage > initial_messages_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfoMessage > info_messages_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::SynchronisationMessage > synchronisation_messages_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfrastructureMessage > infrastructure_messages_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::TrafficMessage > traffic_messages_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::AttackMessage > attack_messages_;
+    int32_t current_time_step_;
+    int32_t number_of_message_groups_;
+    int32_t number_of_messages_;
+    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  };
+  union { Impl_ _impl_; };
+  friend struct ::TableStruct_message_2eproto;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic push
+  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif  // __GNUC__
+// InitialMessage
+
+// string msg_id = 1;
+inline void InitialMessage::clear_msg_id() {
+  _impl_.msg_id_.ClearToEmpty();
+}
+inline const std::string& InitialMessage::msg_id() const {
+  // @@protoc_insertion_point(field_get:InitialMessage.msg_id)
+  return _internal_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InitialMessage::set_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InitialMessage.msg_id)
+}
+inline std::string* InitialMessage::mutable_msg_id() {
+  std::string* _s = _internal_mutable_msg_id();
+  // @@protoc_insertion_point(field_mutable:InitialMessage.msg_id)
+  return _s;
+}
+inline const std::string& InitialMessage::_internal_msg_id() const {
+  return _impl_.msg_id_.Get();
+}
+inline void InitialMessage::_internal_set_msg_id(const std::string& value) {
+  
+  _impl_.msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InitialMessage::_internal_mutable_msg_id() {
+  
+  return _impl_.msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InitialMessage::release_msg_id() {
+  // @@protoc_insertion_point(field_release:InitialMessage.msg_id)
+  return _impl_.msg_id_.Release();
+}
+inline void InitialMessage::set_allocated_msg_id(std::string* msg_id) {
+  if (msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.msg_id_.SetAllocated(msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.msg_id_.IsDefault()) {
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InitialMessage.msg_id)
+}
+
+// int32 max_advance = 2;
+inline void InitialMessage::clear_max_advance() {
+  _impl_.max_advance_ = 0;
+}
+inline int32_t InitialMessage::_internal_max_advance() const {
+  return _impl_.max_advance_;
+}
+inline int32_t InitialMessage::max_advance() const {
+  // @@protoc_insertion_point(field_get:InitialMessage.max_advance)
+  return _internal_max_advance();
+}
+inline void InitialMessage::_internal_set_max_advance(int32_t value) {
+  
+  _impl_.max_advance_ = value;
+}
+inline void InitialMessage::set_max_advance(int32_t value) {
+  _internal_set_max_advance(value);
+  // @@protoc_insertion_point(field_set:InitialMessage.max_advance)
+}
+
+// int32 until = 3;
+inline void InitialMessage::clear_until() {
+  _impl_.until_ = 0;
+}
+inline int32_t InitialMessage::_internal_until() const {
+  return _impl_.until_;
+}
+inline int32_t InitialMessage::until() const {
+  // @@protoc_insertion_point(field_get:InitialMessage.until)
+  return _internal_until();
+}
+inline void InitialMessage::_internal_set_until(int32_t value) {
+  
+  _impl_.until_ = value;
+}
+inline void InitialMessage::set_until(int32_t value) {
+  _internal_set_until(value);
+  // @@protoc_insertion_point(field_set:InitialMessage.until)
+}
+
+// int32 step_size = 4;
+inline void InitialMessage::clear_step_size() {
+  _impl_.step_size_ = 0;
+}
+inline int32_t InitialMessage::_internal_step_size() const {
+  return _impl_.step_size_;
+}
+inline int32_t InitialMessage::step_size() const {
+  // @@protoc_insertion_point(field_get:InitialMessage.step_size)
+  return _internal_step_size();
+}
+inline void InitialMessage::_internal_set_step_size(int32_t value) {
+  
+  _impl_.step_size_ = value;
+}
+inline void InitialMessage::set_step_size(int32_t value) {
+  _internal_set_step_size(value);
+  // @@protoc_insertion_point(field_set:InitialMessage.step_size)
+}
+
+// string logging_level = 5;
+inline void InitialMessage::clear_logging_level() {
+  _impl_.logging_level_.ClearToEmpty();
+}
+inline const std::string& InitialMessage::logging_level() const {
+  // @@protoc_insertion_point(field_get:InitialMessage.logging_level)
+  return _internal_logging_level();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InitialMessage::set_logging_level(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.logging_level_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InitialMessage.logging_level)
+}
+inline std::string* InitialMessage::mutable_logging_level() {
+  std::string* _s = _internal_mutable_logging_level();
+  // @@protoc_insertion_point(field_mutable:InitialMessage.logging_level)
+  return _s;
+}
+inline const std::string& InitialMessage::_internal_logging_level() const {
+  return _impl_.logging_level_.Get();
+}
+inline void InitialMessage::_internal_set_logging_level(const std::string& value) {
+  
+  _impl_.logging_level_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InitialMessage::_internal_mutable_logging_level() {
+  
+  return _impl_.logging_level_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InitialMessage::release_logging_level() {
+  // @@protoc_insertion_point(field_release:InitialMessage.logging_level)
+  return _impl_.logging_level_.Release();
+}
+inline void InitialMessage::set_allocated_logging_level(std::string* logging_level) {
+  if (logging_level != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.logging_level_.SetAllocated(logging_level, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.logging_level_.IsDefault()) {
+    _impl_.logging_level_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InitialMessage.logging_level)
+}
+
+// int32 max_byte_size_per_msg_group = 6;
+inline void InitialMessage::clear_max_byte_size_per_msg_group() {
+  _impl_.max_byte_size_per_msg_group_ = 0;
+}
+inline int32_t InitialMessage::_internal_max_byte_size_per_msg_group() const {
+  return _impl_.max_byte_size_per_msg_group_;
+}
+inline int32_t InitialMessage::max_byte_size_per_msg_group() const {
+  // @@protoc_insertion_point(field_get:InitialMessage.max_byte_size_per_msg_group)
+  return _internal_max_byte_size_per_msg_group();
+}
+inline void InitialMessage::_internal_set_max_byte_size_per_msg_group(int32_t value) {
+  
+  _impl_.max_byte_size_per_msg_group_ = value;
+}
+inline void InitialMessage::set_max_byte_size_per_msg_group(int32_t value) {
+  _internal_set_max_byte_size_per_msg_group(value);
+  // @@protoc_insertion_point(field_set:InitialMessage.max_byte_size_per_msg_group)
+}
+
+// -------------------------------------------------------------------
+
+// InfoMessage
+
+// string msg_id = 1;
+inline void InfoMessage::clear_msg_id() {
+  _impl_.msg_id_.ClearToEmpty();
+}
+inline const std::string& InfoMessage::msg_id() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.msg_id)
+  return _internal_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InfoMessage::set_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InfoMessage.msg_id)
+}
+inline std::string* InfoMessage::mutable_msg_id() {
+  std::string* _s = _internal_mutable_msg_id();
+  // @@protoc_insertion_point(field_mutable:InfoMessage.msg_id)
+  return _s;
+}
+inline const std::string& InfoMessage::_internal_msg_id() const {
+  return _impl_.msg_id_.Get();
+}
+inline void InfoMessage::_internal_set_msg_id(const std::string& value) {
+  
+  _impl_.msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InfoMessage::_internal_mutable_msg_id() {
+  
+  return _impl_.msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InfoMessage::release_msg_id() {
+  // @@protoc_insertion_point(field_release:InfoMessage.msg_id)
+  return _impl_.msg_id_.Release();
+}
+inline void InfoMessage::set_allocated_msg_id(std::string* msg_id) {
+  if (msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.msg_id_.SetAllocated(msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.msg_id_.IsDefault()) {
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InfoMessage.msg_id)
+}
+
+// int32 max_advance = 2;
+inline void InfoMessage::clear_max_advance() {
+  _impl_.max_advance_ = 0;
+}
+inline int32_t InfoMessage::_internal_max_advance() const {
+  return _impl_.max_advance_;
+}
+inline int32_t InfoMessage::max_advance() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.max_advance)
+  return _internal_max_advance();
+}
+inline void InfoMessage::_internal_set_max_advance(int32_t value) {
+  
+  _impl_.max_advance_ = value;
+}
+inline void InfoMessage::set_max_advance(int32_t value) {
+  _internal_set_max_advance(value);
+  // @@protoc_insertion_point(field_set:InfoMessage.max_advance)
+}
+
+// int32 sim_time = 3;
+inline void InfoMessage::clear_sim_time() {
+  _impl_.sim_time_ = 0;
+}
+inline int32_t InfoMessage::_internal_sim_time() const {
+  return _impl_.sim_time_;
+}
+inline int32_t InfoMessage::sim_time() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.sim_time)
+  return _internal_sim_time();
+}
+inline void InfoMessage::_internal_set_sim_time(int32_t value) {
+  
+  _impl_.sim_time_ = value;
+}
+inline void InfoMessage::set_sim_time(int32_t value) {
+  _internal_set_sim_time(value);
+  // @@protoc_insertion_point(field_set:InfoMessage.sim_time)
+}
+
+// string sender = 4;
+inline void InfoMessage::clear_sender() {
+  _impl_.sender_.ClearToEmpty();
+}
+inline const std::string& InfoMessage::sender() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.sender)
+  return _internal_sender();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InfoMessage::set_sender(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.sender_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InfoMessage.sender)
+}
+inline std::string* InfoMessage::mutable_sender() {
+  std::string* _s = _internal_mutable_sender();
+  // @@protoc_insertion_point(field_mutable:InfoMessage.sender)
+  return _s;
+}
+inline const std::string& InfoMessage::_internal_sender() const {
+  return _impl_.sender_.Get();
+}
+inline void InfoMessage::_internal_set_sender(const std::string& value) {
+  
+  _impl_.sender_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InfoMessage::_internal_mutable_sender() {
+  
+  return _impl_.sender_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InfoMessage::release_sender() {
+  // @@protoc_insertion_point(field_release:InfoMessage.sender)
+  return _impl_.sender_.Release();
+}
+inline void InfoMessage::set_allocated_sender(std::string* sender) {
+  if (sender != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.sender_.SetAllocated(sender, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.sender_.IsDefault()) {
+    _impl_.sender_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InfoMessage.sender)
+}
+
+// string receiver = 5;
+inline void InfoMessage::clear_receiver() {
+  _impl_.receiver_.ClearToEmpty();
+}
+inline const std::string& InfoMessage::receiver() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.receiver)
+  return _internal_receiver();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InfoMessage::set_receiver(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.receiver_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InfoMessage.receiver)
+}
+inline std::string* InfoMessage::mutable_receiver() {
+  std::string* _s = _internal_mutable_receiver();
+  // @@protoc_insertion_point(field_mutable:InfoMessage.receiver)
+  return _s;
+}
+inline const std::string& InfoMessage::_internal_receiver() const {
+  return _impl_.receiver_.Get();
+}
+inline void InfoMessage::_internal_set_receiver(const std::string& value) {
+  
+  _impl_.receiver_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InfoMessage::_internal_mutable_receiver() {
+  
+  return _impl_.receiver_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InfoMessage::release_receiver() {
+  // @@protoc_insertion_point(field_release:InfoMessage.receiver)
+  return _impl_.receiver_.Release();
+}
+inline void InfoMessage::set_allocated_receiver(std::string* receiver) {
+  if (receiver != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.receiver_.SetAllocated(receiver, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.receiver_.IsDefault()) {
+    _impl_.receiver_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InfoMessage.receiver)
+}
+
+// int32 size = 6;
+inline void InfoMessage::clear_size() {
+  _impl_.size_ = 0;
+}
+inline int32_t InfoMessage::_internal_size() const {
+  return _impl_.size_;
+}
+inline int32_t InfoMessage::size() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.size)
+  return _internal_size();
+}
+inline void InfoMessage::_internal_set_size(int32_t value) {
+  
+  _impl_.size_ = value;
+}
+inline void InfoMessage::set_size(int32_t value) {
+  _internal_set_size(value);
+  // @@protoc_insertion_point(field_set:InfoMessage.size)
+}
+
+// string content = 7;
+inline void InfoMessage::clear_content() {
+  _impl_.content_.ClearToEmpty();
+}
+inline const std::string& InfoMessage::content() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.content)
+  return _internal_content();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InfoMessage::set_content(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.content_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InfoMessage.content)
+}
+inline std::string* InfoMessage::mutable_content() {
+  std::string* _s = _internal_mutable_content();
+  // @@protoc_insertion_point(field_mutable:InfoMessage.content)
+  return _s;
+}
+inline const std::string& InfoMessage::_internal_content() const {
+  return _impl_.content_.Get();
+}
+inline void InfoMessage::_internal_set_content(const std::string& value) {
+  
+  _impl_.content_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InfoMessage::_internal_mutable_content() {
+  
+  return _impl_.content_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InfoMessage::release_content() {
+  // @@protoc_insertion_point(field_release:InfoMessage.content)
+  return _impl_.content_.Release();
+}
+inline void InfoMessage::set_allocated_content(std::string* content) {
+  if (content != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.content_.SetAllocated(content, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.content_.IsDefault()) {
+    _impl_.content_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InfoMessage.content)
+}
+
+// int32 creation_time = 8;
+inline void InfoMessage::clear_creation_time() {
+  _impl_.creation_time_ = 0;
+}
+inline int32_t InfoMessage::_internal_creation_time() const {
+  return _impl_.creation_time_;
+}
+inline int32_t InfoMessage::creation_time() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.creation_time)
+  return _internal_creation_time();
+}
+inline void InfoMessage::_internal_set_creation_time(int32_t value) {
+  
+  _impl_.creation_time_ = value;
+}
+inline void InfoMessage::set_creation_time(int32_t value) {
+  _internal_set_creation_time(value);
+  // @@protoc_insertion_point(field_set:InfoMessage.creation_time)
+}
+
+// bool is_falsified = 9;
+inline void InfoMessage::clear_is_falsified() {
+  _impl_.is_falsified_ = false;
+}
+inline bool InfoMessage::_internal_is_falsified() const {
+  return _impl_.is_falsified_;
+}
+inline bool InfoMessage::is_falsified() const {
+  // @@protoc_insertion_point(field_get:InfoMessage.is_falsified)
+  return _internal_is_falsified();
+}
+inline void InfoMessage::_internal_set_is_falsified(bool value) {
+  
+  _impl_.is_falsified_ = value;
+}
+inline void InfoMessage::set_is_falsified(bool value) {
+  _internal_set_is_falsified(value);
+  // @@protoc_insertion_point(field_set:InfoMessage.is_falsified)
+}
+
+// -------------------------------------------------------------------
+
+// SynchronisationMessage
+
+// .SynchronisationMessage.MsgType msg_type = 1;
+inline void SynchronisationMessage::clear_msg_type() {
+  _impl_.msg_type_ = 0;
+}
+inline ::SynchronisationMessage_MsgType SynchronisationMessage::_internal_msg_type() const {
+  return static_cast< ::SynchronisationMessage_MsgType >(_impl_.msg_type_);
+}
+inline ::SynchronisationMessage_MsgType SynchronisationMessage::msg_type() const {
+  // @@protoc_insertion_point(field_get:SynchronisationMessage.msg_type)
+  return _internal_msg_type();
+}
+inline void SynchronisationMessage::_internal_set_msg_type(::SynchronisationMessage_MsgType value) {
+  
+  _impl_.msg_type_ = value;
+}
+inline void SynchronisationMessage::set_msg_type(::SynchronisationMessage_MsgType value) {
+  _internal_set_msg_type(value);
+  // @@protoc_insertion_point(field_set:SynchronisationMessage.msg_type)
+}
+
+// string msg_id = 2;
+inline void SynchronisationMessage::clear_msg_id() {
+  _impl_.msg_id_.ClearToEmpty();
+}
+inline const std::string& SynchronisationMessage::msg_id() const {
+  // @@protoc_insertion_point(field_get:SynchronisationMessage.msg_id)
+  return _internal_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void SynchronisationMessage::set_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:SynchronisationMessage.msg_id)
+}
+inline std::string* SynchronisationMessage::mutable_msg_id() {
+  std::string* _s = _internal_mutable_msg_id();
+  // @@protoc_insertion_point(field_mutable:SynchronisationMessage.msg_id)
+  return _s;
+}
+inline const std::string& SynchronisationMessage::_internal_msg_id() const {
+  return _impl_.msg_id_.Get();
+}
+inline void SynchronisationMessage::_internal_set_msg_id(const std::string& value) {
+  
+  _impl_.msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* SynchronisationMessage::_internal_mutable_msg_id() {
+  
+  return _impl_.msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* SynchronisationMessage::release_msg_id() {
+  // @@protoc_insertion_point(field_release:SynchronisationMessage.msg_id)
+  return _impl_.msg_id_.Release();
+}
+inline void SynchronisationMessage::set_allocated_msg_id(std::string* msg_id) {
+  if (msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.msg_id_.SetAllocated(msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.msg_id_.IsDefault()) {
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:SynchronisationMessage.msg_id)
+}
+
+// int32 sim_time = 3;
+inline void SynchronisationMessage::clear_sim_time() {
+  _impl_.sim_time_ = 0;
+}
+inline int32_t SynchronisationMessage::_internal_sim_time() const {
+  return _impl_.sim_time_;
+}
+inline int32_t SynchronisationMessage::sim_time() const {
+  // @@protoc_insertion_point(field_get:SynchronisationMessage.sim_time)
+  return _internal_sim_time();
+}
+inline void SynchronisationMessage::_internal_set_sim_time(int32_t value) {
+  
+  _impl_.sim_time_ = value;
+}
+inline void SynchronisationMessage::set_sim_time(int32_t value) {
+  _internal_set_sim_time(value);
+  // @@protoc_insertion_point(field_set:SynchronisationMessage.sim_time)
+}
+
+// int32 max_advance = 4;
+inline void SynchronisationMessage::clear_max_advance() {
+  _impl_.max_advance_ = 0;
+}
+inline int32_t SynchronisationMessage::_internal_max_advance() const {
+  return _impl_.max_advance_;
+}
+inline int32_t SynchronisationMessage::max_advance() const {
+  // @@protoc_insertion_point(field_get:SynchronisationMessage.max_advance)
+  return _internal_max_advance();
+}
+inline void SynchronisationMessage::_internal_set_max_advance(int32_t value) {
+  
+  _impl_.max_advance_ = value;
+}
+inline void SynchronisationMessage::set_max_advance(int32_t value) {
+  _internal_set_max_advance(value);
+  // @@protoc_insertion_point(field_set:SynchronisationMessage.max_advance)
+}
+
+// bool timeout = 5;
+inline void SynchronisationMessage::clear_timeout() {
+  _impl_.timeout_ = false;
+}
+inline bool SynchronisationMessage::_internal_timeout() const {
+  return _impl_.timeout_;
+}
+inline bool SynchronisationMessage::timeout() const {
+  // @@protoc_insertion_point(field_get:SynchronisationMessage.timeout)
+  return _internal_timeout();
+}
+inline void SynchronisationMessage::_internal_set_timeout(bool value) {
+  
+  _impl_.timeout_ = value;
+}
+inline void SynchronisationMessage::set_timeout(bool value) {
+  _internal_set_timeout(value);
+  // @@protoc_insertion_point(field_set:SynchronisationMessage.timeout)
+}
+
+// string timeout_msg_id = 6;
+inline void SynchronisationMessage::clear_timeout_msg_id() {
+  _impl_.timeout_msg_id_.ClearToEmpty();
+}
+inline const std::string& SynchronisationMessage::timeout_msg_id() const {
+  // @@protoc_insertion_point(field_get:SynchronisationMessage.timeout_msg_id)
+  return _internal_timeout_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void SynchronisationMessage::set_timeout_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.timeout_msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:SynchronisationMessage.timeout_msg_id)
+}
+inline std::string* SynchronisationMessage::mutable_timeout_msg_id() {
+  std::string* _s = _internal_mutable_timeout_msg_id();
+  // @@protoc_insertion_point(field_mutable:SynchronisationMessage.timeout_msg_id)
+  return _s;
+}
+inline const std::string& SynchronisationMessage::_internal_timeout_msg_id() const {
+  return _impl_.timeout_msg_id_.Get();
+}
+inline void SynchronisationMessage::_internal_set_timeout_msg_id(const std::string& value) {
+  
+  _impl_.timeout_msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* SynchronisationMessage::_internal_mutable_timeout_msg_id() {
+  
+  return _impl_.timeout_msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* SynchronisationMessage::release_timeout_msg_id() {
+  // @@protoc_insertion_point(field_release:SynchronisationMessage.timeout_msg_id)
+  return _impl_.timeout_msg_id_.Release();
+}
+inline void SynchronisationMessage::set_allocated_timeout_msg_id(std::string* timeout_msg_id) {
+  if (timeout_msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.timeout_msg_id_.SetAllocated(timeout_msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.timeout_msg_id_.IsDefault()) {
+    _impl_.timeout_msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:SynchronisationMessage.timeout_msg_id)
+}
+
+// -------------------------------------------------------------------
+
+// InfrastructureMessage
+
+// .InfrastructureMessage.MsgType msg_type = 1;
+inline void InfrastructureMessage::clear_msg_type() {
+  _impl_.msg_type_ = 0;
+}
+inline ::InfrastructureMessage_MsgType InfrastructureMessage::_internal_msg_type() const {
+  return static_cast< ::InfrastructureMessage_MsgType >(_impl_.msg_type_);
+}
+inline ::InfrastructureMessage_MsgType InfrastructureMessage::msg_type() const {
+  // @@protoc_insertion_point(field_get:InfrastructureMessage.msg_type)
+  return _internal_msg_type();
+}
+inline void InfrastructureMessage::_internal_set_msg_type(::InfrastructureMessage_MsgType value) {
+  
+  _impl_.msg_type_ = value;
+}
+inline void InfrastructureMessage::set_msg_type(::InfrastructureMessage_MsgType value) {
+  _internal_set_msg_type(value);
+  // @@protoc_insertion_point(field_set:InfrastructureMessage.msg_type)
+}
+
+// string msg_id = 2;
+inline void InfrastructureMessage::clear_msg_id() {
+  _impl_.msg_id_.ClearToEmpty();
+}
+inline const std::string& InfrastructureMessage::msg_id() const {
+  // @@protoc_insertion_point(field_get:InfrastructureMessage.msg_id)
+  return _internal_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InfrastructureMessage::set_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InfrastructureMessage.msg_id)
+}
+inline std::string* InfrastructureMessage::mutable_msg_id() {
+  std::string* _s = _internal_mutable_msg_id();
+  // @@protoc_insertion_point(field_mutable:InfrastructureMessage.msg_id)
+  return _s;
+}
+inline const std::string& InfrastructureMessage::_internal_msg_id() const {
+  return _impl_.msg_id_.Get();
+}
+inline void InfrastructureMessage::_internal_set_msg_id(const std::string& value) {
+  
+  _impl_.msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InfrastructureMessage::_internal_mutable_msg_id() {
+  
+  return _impl_.msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InfrastructureMessage::release_msg_id() {
+  // @@protoc_insertion_point(field_release:InfrastructureMessage.msg_id)
+  return _impl_.msg_id_.Release();
+}
+inline void InfrastructureMessage::set_allocated_msg_id(std::string* msg_id) {
+  if (msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.msg_id_.SetAllocated(msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.msg_id_.IsDefault()) {
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InfrastructureMessage.msg_id)
+}
+
+// int32 sim_time = 3;
+inline void InfrastructureMessage::clear_sim_time() {
+  _impl_.sim_time_ = 0;
+}
+inline int32_t InfrastructureMessage::_internal_sim_time() const {
+  return _impl_.sim_time_;
+}
+inline int32_t InfrastructureMessage::sim_time() const {
+  // @@protoc_insertion_point(field_get:InfrastructureMessage.sim_time)
+  return _internal_sim_time();
+}
+inline void InfrastructureMessage::_internal_set_sim_time(int32_t value) {
+  
+  _impl_.sim_time_ = value;
+}
+inline void InfrastructureMessage::set_sim_time(int32_t value) {
+  _internal_set_sim_time(value);
+  // @@protoc_insertion_point(field_set:InfrastructureMessage.sim_time)
+}
+
+// string change_module = 4;
+inline void InfrastructureMessage::clear_change_module() {
+  _impl_.change_module_.ClearToEmpty();
+}
+inline const std::string& InfrastructureMessage::change_module() const {
+  // @@protoc_insertion_point(field_get:InfrastructureMessage.change_module)
+  return _internal_change_module();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void InfrastructureMessage::set_change_module(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.change_module_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:InfrastructureMessage.change_module)
+}
+inline std::string* InfrastructureMessage::mutable_change_module() {
+  std::string* _s = _internal_mutable_change_module();
+  // @@protoc_insertion_point(field_mutable:InfrastructureMessage.change_module)
+  return _s;
+}
+inline const std::string& InfrastructureMessage::_internal_change_module() const {
+  return _impl_.change_module_.Get();
+}
+inline void InfrastructureMessage::_internal_set_change_module(const std::string& value) {
+  
+  _impl_.change_module_.Set(value, GetArenaForAllocation());
+}
+inline std::string* InfrastructureMessage::_internal_mutable_change_module() {
+  
+  return _impl_.change_module_.Mutable(GetArenaForAllocation());
+}
+inline std::string* InfrastructureMessage::release_change_module() {
+  // @@protoc_insertion_point(field_release:InfrastructureMessage.change_module)
+  return _impl_.change_module_.Release();
+}
+inline void InfrastructureMessage::set_allocated_change_module(std::string* change_module) {
+  if (change_module != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.change_module_.SetAllocated(change_module, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.change_module_.IsDefault()) {
+    _impl_.change_module_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:InfrastructureMessage.change_module)
+}
+
+// bool connection_change_successful = 5;
+inline void InfrastructureMessage::clear_connection_change_successful() {
+  _impl_.connection_change_successful_ = false;
+}
+inline bool InfrastructureMessage::_internal_connection_change_successful() const {
+  return _impl_.connection_change_successful_;
+}
+inline bool InfrastructureMessage::connection_change_successful() const {
+  // @@protoc_insertion_point(field_get:InfrastructureMessage.connection_change_successful)
+  return _internal_connection_change_successful();
+}
+inline void InfrastructureMessage::_internal_set_connection_change_successful(bool value) {
+  
+  _impl_.connection_change_successful_ = value;
+}
+inline void InfrastructureMessage::set_connection_change_successful(bool value) {
+  _internal_set_connection_change_successful(value);
+  // @@protoc_insertion_point(field_set:InfrastructureMessage.connection_change_successful)
+}
+
+// -------------------------------------------------------------------
+
+// TrafficMessage
+
+// string msg_id = 1;
+inline void TrafficMessage::clear_msg_id() {
+  _impl_.msg_id_.ClearToEmpty();
+}
+inline const std::string& TrafficMessage::msg_id() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.msg_id)
+  return _internal_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void TrafficMessage::set_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:TrafficMessage.msg_id)
+}
+inline std::string* TrafficMessage::mutable_msg_id() {
+  std::string* _s = _internal_mutable_msg_id();
+  // @@protoc_insertion_point(field_mutable:TrafficMessage.msg_id)
+  return _s;
+}
+inline const std::string& TrafficMessage::_internal_msg_id() const {
+  return _impl_.msg_id_.Get();
+}
+inline void TrafficMessage::_internal_set_msg_id(const std::string& value) {
+  
+  _impl_.msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* TrafficMessage::_internal_mutable_msg_id() {
+  
+  return _impl_.msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* TrafficMessage::release_msg_id() {
+  // @@protoc_insertion_point(field_release:TrafficMessage.msg_id)
+  return _impl_.msg_id_.Release();
+}
+inline void TrafficMessage::set_allocated_msg_id(std::string* msg_id) {
+  if (msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.msg_id_.SetAllocated(msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.msg_id_.IsDefault()) {
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:TrafficMessage.msg_id)
+}
+
+// int32 sim_time = 2;
+inline void TrafficMessage::clear_sim_time() {
+  _impl_.sim_time_ = 0;
+}
+inline int32_t TrafficMessage::_internal_sim_time() const {
+  return _impl_.sim_time_;
+}
+inline int32_t TrafficMessage::sim_time() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.sim_time)
+  return _internal_sim_time();
+}
+inline void TrafficMessage::_internal_set_sim_time(int32_t value) {
+  
+  _impl_.sim_time_ = value;
+}
+inline void TrafficMessage::set_sim_time(int32_t value) {
+  _internal_set_sim_time(value);
+  // @@protoc_insertion_point(field_set:TrafficMessage.sim_time)
+}
+
+// string source = 3;
+inline void TrafficMessage::clear_source() {
+  _impl_.source_.ClearToEmpty();
+}
+inline const std::string& TrafficMessage::source() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.source)
+  return _internal_source();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void TrafficMessage::set_source(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.source_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:TrafficMessage.source)
+}
+inline std::string* TrafficMessage::mutable_source() {
+  std::string* _s = _internal_mutable_source();
+  // @@protoc_insertion_point(field_mutable:TrafficMessage.source)
+  return _s;
+}
+inline const std::string& TrafficMessage::_internal_source() const {
+  return _impl_.source_.Get();
+}
+inline void TrafficMessage::_internal_set_source(const std::string& value) {
+  
+  _impl_.source_.Set(value, GetArenaForAllocation());
+}
+inline std::string* TrafficMessage::_internal_mutable_source() {
+  
+  return _impl_.source_.Mutable(GetArenaForAllocation());
+}
+inline std::string* TrafficMessage::release_source() {
+  // @@protoc_insertion_point(field_release:TrafficMessage.source)
+  return _impl_.source_.Release();
+}
+inline void TrafficMessage::set_allocated_source(std::string* source) {
+  if (source != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.source_.SetAllocated(source, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.source_.IsDefault()) {
+    _impl_.source_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:TrafficMessage.source)
+}
+
+// string destination = 4;
+inline void TrafficMessage::clear_destination() {
+  _impl_.destination_.ClearToEmpty();
+}
+inline const std::string& TrafficMessage::destination() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.destination)
+  return _internal_destination();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void TrafficMessage::set_destination(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.destination_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:TrafficMessage.destination)
+}
+inline std::string* TrafficMessage::mutable_destination() {
+  std::string* _s = _internal_mutable_destination();
+  // @@protoc_insertion_point(field_mutable:TrafficMessage.destination)
+  return _s;
+}
+inline const std::string& TrafficMessage::_internal_destination() const {
+  return _impl_.destination_.Get();
+}
+inline void TrafficMessage::_internal_set_destination(const std::string& value) {
+  
+  _impl_.destination_.Set(value, GetArenaForAllocation());
+}
+inline std::string* TrafficMessage::_internal_mutable_destination() {
+  
+  return _impl_.destination_.Mutable(GetArenaForAllocation());
+}
+inline std::string* TrafficMessage::release_destination() {
+  // @@protoc_insertion_point(field_release:TrafficMessage.destination)
+  return _impl_.destination_.Release();
+}
+inline void TrafficMessage::set_allocated_destination(std::string* destination) {
+  if (destination != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.destination_.SetAllocated(destination, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.destination_.IsDefault()) {
+    _impl_.destination_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:TrafficMessage.destination)
+}
+
+// int32 start = 5;
+inline void TrafficMessage::clear_start() {
+  _impl_.start_ = 0;
+}
+inline int32_t TrafficMessage::_internal_start() const {
+  return _impl_.start_;
+}
+inline int32_t TrafficMessage::start() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.start)
+  return _internal_start();
+}
+inline void TrafficMessage::_internal_set_start(int32_t value) {
+  
+  _impl_.start_ = value;
+}
+inline void TrafficMessage::set_start(int32_t value) {
+  _internal_set_start(value);
+  // @@protoc_insertion_point(field_set:TrafficMessage.start)
+}
+
+// int32 stop = 6;
+inline void TrafficMessage::clear_stop() {
+  _impl_.stop_ = 0;
+}
+inline int32_t TrafficMessage::_internal_stop() const {
+  return _impl_.stop_;
+}
+inline int32_t TrafficMessage::stop() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.stop)
+  return _internal_stop();
+}
+inline void TrafficMessage::_internal_set_stop(int32_t value) {
+  
+  _impl_.stop_ = value;
+}
+inline void TrafficMessage::set_stop(int32_t value) {
+  _internal_set_stop(value);
+  // @@protoc_insertion_point(field_set:TrafficMessage.stop)
+}
+
+// int32 interval = 7;
+inline void TrafficMessage::clear_interval() {
+  _impl_.interval_ = 0;
+}
+inline int32_t TrafficMessage::_internal_interval() const {
+  return _impl_.interval_;
+}
+inline int32_t TrafficMessage::interval() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.interval)
+  return _internal_interval();
+}
+inline void TrafficMessage::_internal_set_interval(int32_t value) {
+  
+  _impl_.interval_ = value;
+}
+inline void TrafficMessage::set_interval(int32_t value) {
+  _internal_set_interval(value);
+  // @@protoc_insertion_point(field_set:TrafficMessage.interval)
+}
+
+// int32 packet_length = 8;
+inline void TrafficMessage::clear_packet_length() {
+  _impl_.packet_length_ = 0;
+}
+inline int32_t TrafficMessage::_internal_packet_length() const {
+  return _impl_.packet_length_;
+}
+inline int32_t TrafficMessage::packet_length() const {
+  // @@protoc_insertion_point(field_get:TrafficMessage.packet_length)
+  return _internal_packet_length();
+}
+inline void TrafficMessage::_internal_set_packet_length(int32_t value) {
+  
+  _impl_.packet_length_ = value;
+}
+inline void TrafficMessage::set_packet_length(int32_t value) {
+  _internal_set_packet_length(value);
+  // @@protoc_insertion_point(field_set:TrafficMessage.packet_length)
+}
+
+// -------------------------------------------------------------------
+
+// AttackMessage
+
+// .AttackMessage.MsgType msg_type = 1;
+inline void AttackMessage::clear_msg_type() {
+  _impl_.msg_type_ = 0;
+}
+inline ::AttackMessage_MsgType AttackMessage::_internal_msg_type() const {
+  return static_cast< ::AttackMessage_MsgType >(_impl_.msg_type_);
+}
+inline ::AttackMessage_MsgType AttackMessage::msg_type() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.msg_type)
+  return _internal_msg_type();
+}
+inline void AttackMessage::_internal_set_msg_type(::AttackMessage_MsgType value) {
+  
+  _impl_.msg_type_ = value;
+}
+inline void AttackMessage::set_msg_type(::AttackMessage_MsgType value) {
+  _internal_set_msg_type(value);
+  // @@protoc_insertion_point(field_set:AttackMessage.msg_type)
+}
+
+// string msg_id = 2;
+inline void AttackMessage::clear_msg_id() {
+  _impl_.msg_id_.ClearToEmpty();
+}
+inline const std::string& AttackMessage::msg_id() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.msg_id)
+  return _internal_msg_id();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void AttackMessage::set_msg_id(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.msg_id_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:AttackMessage.msg_id)
+}
+inline std::string* AttackMessage::mutable_msg_id() {
+  std::string* _s = _internal_mutable_msg_id();
+  // @@protoc_insertion_point(field_mutable:AttackMessage.msg_id)
+  return _s;
+}
+inline const std::string& AttackMessage::_internal_msg_id() const {
+  return _impl_.msg_id_.Get();
+}
+inline void AttackMessage::_internal_set_msg_id(const std::string& value) {
+  
+  _impl_.msg_id_.Set(value, GetArenaForAllocation());
+}
+inline std::string* AttackMessage::_internal_mutable_msg_id() {
+  
+  return _impl_.msg_id_.Mutable(GetArenaForAllocation());
+}
+inline std::string* AttackMessage::release_msg_id() {
+  // @@protoc_insertion_point(field_release:AttackMessage.msg_id)
+  return _impl_.msg_id_.Release();
+}
+inline void AttackMessage::set_allocated_msg_id(std::string* msg_id) {
+  if (msg_id != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.msg_id_.SetAllocated(msg_id, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.msg_id_.IsDefault()) {
+    _impl_.msg_id_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:AttackMessage.msg_id)
+}
+
+// int32 sim_time = 3;
+inline void AttackMessage::clear_sim_time() {
+  _impl_.sim_time_ = 0;
+}
+inline int32_t AttackMessage::_internal_sim_time() const {
+  return _impl_.sim_time_;
+}
+inline int32_t AttackMessage::sim_time() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.sim_time)
+  return _internal_sim_time();
+}
+inline void AttackMessage::_internal_set_sim_time(int32_t value) {
+  
+  _impl_.sim_time_ = value;
+}
+inline void AttackMessage::set_sim_time(int32_t value) {
+  _internal_set_sim_time(value);
+  // @@protoc_insertion_point(field_set:AttackMessage.sim_time)
+}
+
+// string attacked_module = 4;
+inline void AttackMessage::clear_attacked_module() {
+  _impl_.attacked_module_.ClearToEmpty();
+}
+inline const std::string& AttackMessage::attacked_module() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.attacked_module)
+  return _internal_attacked_module();
+}
+template 
+inline PROTOBUF_ALWAYS_INLINE
+void AttackMessage::set_attacked_module(ArgT0&& arg0, ArgT... args) {
+ 
+ _impl_.attacked_module_.Set(static_cast(arg0), args..., GetArenaForAllocation());
+  // @@protoc_insertion_point(field_set:AttackMessage.attacked_module)
+}
+inline std::string* AttackMessage::mutable_attacked_module() {
+  std::string* _s = _internal_mutable_attacked_module();
+  // @@protoc_insertion_point(field_mutable:AttackMessage.attacked_module)
+  return _s;
+}
+inline const std::string& AttackMessage::_internal_attacked_module() const {
+  return _impl_.attacked_module_.Get();
+}
+inline void AttackMessage::_internal_set_attacked_module(const std::string& value) {
+  
+  _impl_.attacked_module_.Set(value, GetArenaForAllocation());
+}
+inline std::string* AttackMessage::_internal_mutable_attacked_module() {
+  
+  return _impl_.attacked_module_.Mutable(GetArenaForAllocation());
+}
+inline std::string* AttackMessage::release_attacked_module() {
+  // @@protoc_insertion_point(field_release:AttackMessage.attacked_module)
+  return _impl_.attacked_module_.Release();
+}
+inline void AttackMessage::set_allocated_attacked_module(std::string* attacked_module) {
+  if (attacked_module != nullptr) {
+    
+  } else {
+    
+  }
+  _impl_.attacked_module_.SetAllocated(attacked_module, GetArenaForAllocation());
+#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  if (_impl_.attacked_module_.IsDefault()) {
+    _impl_.attacked_module_.Set("", GetArenaForAllocation());
+  }
+#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
+  // @@protoc_insertion_point(field_set_allocated:AttackMessage.attacked_module)
+}
+
+// int32 start = 5;
+inline void AttackMessage::clear_start() {
+  _impl_.start_ = 0;
+}
+inline int32_t AttackMessage::_internal_start() const {
+  return _impl_.start_;
+}
+inline int32_t AttackMessage::start() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.start)
+  return _internal_start();
+}
+inline void AttackMessage::_internal_set_start(int32_t value) {
+  
+  _impl_.start_ = value;
+}
+inline void AttackMessage::set_start(int32_t value) {
+  _internal_set_start(value);
+  // @@protoc_insertion_point(field_set:AttackMessage.start)
+}
+
+// int32 stop = 6;
+inline void AttackMessage::clear_stop() {
+  _impl_.stop_ = 0;
+}
+inline int32_t AttackMessage::_internal_stop() const {
+  return _impl_.stop_;
+}
+inline int32_t AttackMessage::stop() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.stop)
+  return _internal_stop();
+}
+inline void AttackMessage::_internal_set_stop(int32_t value) {
+  
+  _impl_.stop_ = value;
+}
+inline void AttackMessage::set_stop(int32_t value) {
+  _internal_set_stop(value);
+  // @@protoc_insertion_point(field_set:AttackMessage.stop)
+}
+
+// int32 attack_probability = 7;
+inline void AttackMessage::clear_attack_probability() {
+  _impl_.attack_probability_ = 0;
+}
+inline int32_t AttackMessage::_internal_attack_probability() const {
+  return _impl_.attack_probability_;
+}
+inline int32_t AttackMessage::attack_probability() const {
+  // @@protoc_insertion_point(field_get:AttackMessage.attack_probability)
+  return _internal_attack_probability();
+}
+inline void AttackMessage::_internal_set_attack_probability(int32_t value) {
+  
+  _impl_.attack_probability_ = value;
+}
+inline void AttackMessage::set_attack_probability(int32_t value) {
+  _internal_set_attack_probability(value);
+  // @@protoc_insertion_point(field_set:AttackMessage.attack_probability)
+}
+
+// -------------------------------------------------------------------
+
+// CosimaMsgGroup
+
+// repeated .InitialMessage initial_messages = 1;
+inline int CosimaMsgGroup::_internal_initial_messages_size() const {
+  return _impl_.initial_messages_.size();
+}
+inline int CosimaMsgGroup::initial_messages_size() const {
+  return _internal_initial_messages_size();
+}
+inline void CosimaMsgGroup::clear_initial_messages() {
+  _impl_.initial_messages_.Clear();
+}
+inline ::InitialMessage* CosimaMsgGroup::mutable_initial_messages(int index) {
+  // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.initial_messages)
+  return _impl_.initial_messages_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InitialMessage >*
+CosimaMsgGroup::mutable_initial_messages() {
+  // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.initial_messages)
+  return &_impl_.initial_messages_;
+}
+inline const ::InitialMessage& CosimaMsgGroup::_internal_initial_messages(int index) const {
+  return _impl_.initial_messages_.Get(index);
+}
+inline const ::InitialMessage& CosimaMsgGroup::initial_messages(int index) const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.initial_messages)
+  return _internal_initial_messages(index);
+}
+inline ::InitialMessage* CosimaMsgGroup::_internal_add_initial_messages() {
+  return _impl_.initial_messages_.Add();
+}
+inline ::InitialMessage* CosimaMsgGroup::add_initial_messages() {
+  ::InitialMessage* _add = _internal_add_initial_messages();
+  // @@protoc_insertion_point(field_add:CosimaMsgGroup.initial_messages)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InitialMessage >&
+CosimaMsgGroup::initial_messages() const {
+  // @@protoc_insertion_point(field_list:CosimaMsgGroup.initial_messages)
+  return _impl_.initial_messages_;
+}
+
+// repeated .InfoMessage info_messages = 2;
+inline int CosimaMsgGroup::_internal_info_messages_size() const {
+  return _impl_.info_messages_.size();
+}
+inline int CosimaMsgGroup::info_messages_size() const {
+  return _internal_info_messages_size();
+}
+inline void CosimaMsgGroup::clear_info_messages() {
+  _impl_.info_messages_.Clear();
+}
+inline ::InfoMessage* CosimaMsgGroup::mutable_info_messages(int index) {
+  // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.info_messages)
+  return _impl_.info_messages_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfoMessage >*
+CosimaMsgGroup::mutable_info_messages() {
+  // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.info_messages)
+  return &_impl_.info_messages_;
+}
+inline const ::InfoMessage& CosimaMsgGroup::_internal_info_messages(int index) const {
+  return _impl_.info_messages_.Get(index);
+}
+inline const ::InfoMessage& CosimaMsgGroup::info_messages(int index) const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.info_messages)
+  return _internal_info_messages(index);
+}
+inline ::InfoMessage* CosimaMsgGroup::_internal_add_info_messages() {
+  return _impl_.info_messages_.Add();
+}
+inline ::InfoMessage* CosimaMsgGroup::add_info_messages() {
+  ::InfoMessage* _add = _internal_add_info_messages();
+  // @@protoc_insertion_point(field_add:CosimaMsgGroup.info_messages)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfoMessage >&
+CosimaMsgGroup::info_messages() const {
+  // @@protoc_insertion_point(field_list:CosimaMsgGroup.info_messages)
+  return _impl_.info_messages_;
+}
+
+// repeated .SynchronisationMessage synchronisation_messages = 3;
+inline int CosimaMsgGroup::_internal_synchronisation_messages_size() const {
+  return _impl_.synchronisation_messages_.size();
+}
+inline int CosimaMsgGroup::synchronisation_messages_size() const {
+  return _internal_synchronisation_messages_size();
+}
+inline void CosimaMsgGroup::clear_synchronisation_messages() {
+  _impl_.synchronisation_messages_.Clear();
+}
+inline ::SynchronisationMessage* CosimaMsgGroup::mutable_synchronisation_messages(int index) {
+  // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.synchronisation_messages)
+  return _impl_.synchronisation_messages_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::SynchronisationMessage >*
+CosimaMsgGroup::mutable_synchronisation_messages() {
+  // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.synchronisation_messages)
+  return &_impl_.synchronisation_messages_;
+}
+inline const ::SynchronisationMessage& CosimaMsgGroup::_internal_synchronisation_messages(int index) const {
+  return _impl_.synchronisation_messages_.Get(index);
+}
+inline const ::SynchronisationMessage& CosimaMsgGroup::synchronisation_messages(int index) const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.synchronisation_messages)
+  return _internal_synchronisation_messages(index);
+}
+inline ::SynchronisationMessage* CosimaMsgGroup::_internal_add_synchronisation_messages() {
+  return _impl_.synchronisation_messages_.Add();
+}
+inline ::SynchronisationMessage* CosimaMsgGroup::add_synchronisation_messages() {
+  ::SynchronisationMessage* _add = _internal_add_synchronisation_messages();
+  // @@protoc_insertion_point(field_add:CosimaMsgGroup.synchronisation_messages)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::SynchronisationMessage >&
+CosimaMsgGroup::synchronisation_messages() const {
+  // @@protoc_insertion_point(field_list:CosimaMsgGroup.synchronisation_messages)
+  return _impl_.synchronisation_messages_;
+}
+
+// repeated .InfrastructureMessage infrastructure_messages = 4;
+inline int CosimaMsgGroup::_internal_infrastructure_messages_size() const {
+  return _impl_.infrastructure_messages_.size();
+}
+inline int CosimaMsgGroup::infrastructure_messages_size() const {
+  return _internal_infrastructure_messages_size();
+}
+inline void CosimaMsgGroup::clear_infrastructure_messages() {
+  _impl_.infrastructure_messages_.Clear();
+}
+inline ::InfrastructureMessage* CosimaMsgGroup::mutable_infrastructure_messages(int index) {
+  // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.infrastructure_messages)
+  return _impl_.infrastructure_messages_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfrastructureMessage >*
+CosimaMsgGroup::mutable_infrastructure_messages() {
+  // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.infrastructure_messages)
+  return &_impl_.infrastructure_messages_;
+}
+inline const ::InfrastructureMessage& CosimaMsgGroup::_internal_infrastructure_messages(int index) const {
+  return _impl_.infrastructure_messages_.Get(index);
+}
+inline const ::InfrastructureMessage& CosimaMsgGroup::infrastructure_messages(int index) const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.infrastructure_messages)
+  return _internal_infrastructure_messages(index);
+}
+inline ::InfrastructureMessage* CosimaMsgGroup::_internal_add_infrastructure_messages() {
+  return _impl_.infrastructure_messages_.Add();
+}
+inline ::InfrastructureMessage* CosimaMsgGroup::add_infrastructure_messages() {
+  ::InfrastructureMessage* _add = _internal_add_infrastructure_messages();
+  // @@protoc_insertion_point(field_add:CosimaMsgGroup.infrastructure_messages)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::InfrastructureMessage >&
+CosimaMsgGroup::infrastructure_messages() const {
+  // @@protoc_insertion_point(field_list:CosimaMsgGroup.infrastructure_messages)
+  return _impl_.infrastructure_messages_;
+}
+
+// repeated .TrafficMessage traffic_messages = 5;
+inline int CosimaMsgGroup::_internal_traffic_messages_size() const {
+  return _impl_.traffic_messages_.size();
+}
+inline int CosimaMsgGroup::traffic_messages_size() const {
+  return _internal_traffic_messages_size();
+}
+inline void CosimaMsgGroup::clear_traffic_messages() {
+  _impl_.traffic_messages_.Clear();
+}
+inline ::TrafficMessage* CosimaMsgGroup::mutable_traffic_messages(int index) {
+  // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.traffic_messages)
+  return _impl_.traffic_messages_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::TrafficMessage >*
+CosimaMsgGroup::mutable_traffic_messages() {
+  // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.traffic_messages)
+  return &_impl_.traffic_messages_;
+}
+inline const ::TrafficMessage& CosimaMsgGroup::_internal_traffic_messages(int index) const {
+  return _impl_.traffic_messages_.Get(index);
+}
+inline const ::TrafficMessage& CosimaMsgGroup::traffic_messages(int index) const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.traffic_messages)
+  return _internal_traffic_messages(index);
+}
+inline ::TrafficMessage* CosimaMsgGroup::_internal_add_traffic_messages() {
+  return _impl_.traffic_messages_.Add();
+}
+inline ::TrafficMessage* CosimaMsgGroup::add_traffic_messages() {
+  ::TrafficMessage* _add = _internal_add_traffic_messages();
+  // @@protoc_insertion_point(field_add:CosimaMsgGroup.traffic_messages)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::TrafficMessage >&
+CosimaMsgGroup::traffic_messages() const {
+  // @@protoc_insertion_point(field_list:CosimaMsgGroup.traffic_messages)
+  return _impl_.traffic_messages_;
+}
+
+// repeated .AttackMessage attack_messages = 6;
+inline int CosimaMsgGroup::_internal_attack_messages_size() const {
+  return _impl_.attack_messages_.size();
+}
+inline int CosimaMsgGroup::attack_messages_size() const {
+  return _internal_attack_messages_size();
+}
+inline void CosimaMsgGroup::clear_attack_messages() {
+  _impl_.attack_messages_.Clear();
+}
+inline ::AttackMessage* CosimaMsgGroup::mutable_attack_messages(int index) {
+  // @@protoc_insertion_point(field_mutable:CosimaMsgGroup.attack_messages)
+  return _impl_.attack_messages_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::AttackMessage >*
+CosimaMsgGroup::mutable_attack_messages() {
+  // @@protoc_insertion_point(field_mutable_list:CosimaMsgGroup.attack_messages)
+  return &_impl_.attack_messages_;
+}
+inline const ::AttackMessage& CosimaMsgGroup::_internal_attack_messages(int index) const {
+  return _impl_.attack_messages_.Get(index);
+}
+inline const ::AttackMessage& CosimaMsgGroup::attack_messages(int index) const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.attack_messages)
+  return _internal_attack_messages(index);
+}
+inline ::AttackMessage* CosimaMsgGroup::_internal_add_attack_messages() {
+  return _impl_.attack_messages_.Add();
+}
+inline ::AttackMessage* CosimaMsgGroup::add_attack_messages() {
+  ::AttackMessage* _add = _internal_add_attack_messages();
+  // @@protoc_insertion_point(field_add:CosimaMsgGroup.attack_messages)
+  return _add;
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::AttackMessage >&
+CosimaMsgGroup::attack_messages() const {
+  // @@protoc_insertion_point(field_list:CosimaMsgGroup.attack_messages)
+  return _impl_.attack_messages_;
+}
+
+// int32 current_time_step = 7;
+inline void CosimaMsgGroup::clear_current_time_step() {
+  _impl_.current_time_step_ = 0;
+}
+inline int32_t CosimaMsgGroup::_internal_current_time_step() const {
+  return _impl_.current_time_step_;
+}
+inline int32_t CosimaMsgGroup::current_time_step() const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.current_time_step)
+  return _internal_current_time_step();
+}
+inline void CosimaMsgGroup::_internal_set_current_time_step(int32_t value) {
+  
+  _impl_.current_time_step_ = value;
+}
+inline void CosimaMsgGroup::set_current_time_step(int32_t value) {
+  _internal_set_current_time_step(value);
+  // @@protoc_insertion_point(field_set:CosimaMsgGroup.current_time_step)
+}
+
+// int32 number_of_message_groups = 8;
+inline void CosimaMsgGroup::clear_number_of_message_groups() {
+  _impl_.number_of_message_groups_ = 0;
+}
+inline int32_t CosimaMsgGroup::_internal_number_of_message_groups() const {
+  return _impl_.number_of_message_groups_;
+}
+inline int32_t CosimaMsgGroup::number_of_message_groups() const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.number_of_message_groups)
+  return _internal_number_of_message_groups();
+}
+inline void CosimaMsgGroup::_internal_set_number_of_message_groups(int32_t value) {
+  
+  _impl_.number_of_message_groups_ = value;
+}
+inline void CosimaMsgGroup::set_number_of_message_groups(int32_t value) {
+  _internal_set_number_of_message_groups(value);
+  // @@protoc_insertion_point(field_set:CosimaMsgGroup.number_of_message_groups)
+}
+
+// int32 number_of_messages = 9;
+inline void CosimaMsgGroup::clear_number_of_messages() {
+  _impl_.number_of_messages_ = 0;
+}
+inline int32_t CosimaMsgGroup::_internal_number_of_messages() const {
+  return _impl_.number_of_messages_;
+}
+inline int32_t CosimaMsgGroup::number_of_messages() const {
+  // @@protoc_insertion_point(field_get:CosimaMsgGroup.number_of_messages)
+  return _internal_number_of_messages();
+}
+inline void CosimaMsgGroup::_internal_set_number_of_messages(int32_t value) {
+  
+  _impl_.number_of_messages_ = value;
+}
+inline void CosimaMsgGroup::set_number_of_messages(int32_t value) {
+  _internal_set_number_of_messages(value);
+  // @@protoc_insertion_point(field_set:CosimaMsgGroup.number_of_messages)
+}
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic pop
+#endif  // __GNUC__
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+
+PROTOBUF_NAMESPACE_OPEN
+
+template <> struct is_proto_enum< ::SynchronisationMessage_MsgType> : ::std::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::SynchronisationMessage_MsgType>() {
+  return ::SynchronisationMessage_MsgType_descriptor();
+}
+template <> struct is_proto_enum< ::InfrastructureMessage_MsgType> : ::std::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::InfrastructureMessage_MsgType>() {
+  return ::InfrastructureMessage_MsgType_descriptor();
+}
+template <> struct is_proto_enum< ::AttackMessage_MsgType> : ::std::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::AttackMessage_MsgType>() {
+  return ::AttackMessage_MsgType_descriptor();
+}
+
+PROTOBUF_NAMESPACE_CLOSE
+
+// @@protoc_insertion_point(global_scope)
+
+#include 
+#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_message_2eproto
diff --git a/omnetpp/modules/AgentAppTcp.cc b/omnetpp/modules/AgentAppTcp.cc
new file mode 100644
index 0000000..40f3328
--- /dev/null
+++ b/omnetpp/modules/AgentAppTcp.cc
@@ -0,0 +1,742 @@
+/*
+ * AgentAppTcp.cc
+ *
+ *  Created on: 11 Apr 2021
+ *      Author: malin
+ *
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "inet/common/packet/Packet.h"
+#include "inet/networklayer/common/L3AddressResolver.h"
+
+#include "../messages/CosimaSchedulerMessage_m.h"
+#include "AgentAppTcp.h"
+
+#include "../messages/CosimaApplicationChunk_m.h"
+#include "../messages/CosimaCtrlEvent_m.h"
+#include "CosimaScheduler.h"
+#include "omnetpp/cmessage.h"
+#include "omnetpp/simtime.h"
+
+Define_Module(AgentAppTcp);
+
+AgentAppTcp::AgentAppTcp()
+{
+    scheduler = nullptr;
+}
+
+AgentAppTcp::~AgentAppTcp()
+{
+    // delete and cancel all timers used
+    auto iter = timer.begin();
+
+    while (iter != timer.end()) {
+        std::list timerForModule = iter->second;
+        std::list::iterator it;
+        for (it = timerForModule.begin(); it != timerForModule.end(); ++it) {
+            scheduler->log(nameStr + ": cancel timer for client with ID " +
+                             std::to_string(iter->first),
+                           "debug");
+            cancelAndDelete(*it);
+        }
+        ++iter;
+    }
+}
+
+void
+AgentAppTcp::initialize(int stage)
+{
+    TcpAppBase::initialize(stage);
+    if (stage == inet::INITSTAGE_APPLICATION_LAYER) {
+        // get intern socket scheduler from simulation and cast to
+        // CosimaScheduler
+        scheduler =
+          check_and_cast(getSimulation()->getScheduler());
+        // get name of parent module as string for logging
+        nameStr = this->getParentModule()->getName();
+        // register module at scheduler
+        scheduler->registerModule(nameStr, this);
+    }
+}
+
+void
+AgentAppTcp::handleMessageWhenUp(cMessage* msg)
+{
+    if (typeid(*msg) == typeid(Timer)) {
+        // message is timer object in order to send data over the network
+        handleTimer(msg);
+    } else if (msg->isSelfMessage()) {
+        // else if (msg->getKind() == 0 and msg->getArrivalGate() !=
+        // gate("socketIn")) {
+        //  message is an event from the scheduler
+        handleSocketEvent(msg, msg->getArrivalTime().dbl());
+    } else {
+        // message is an event at the socket in the network
+        TcpAppBase::socket.processMessage(msg);
+    }
+}
+
+void
+AgentAppTcp::transmitMessage(CosimaSchedulerMessage* msg,
+                             SimTime sendingTime)
+{
+    auto content = msg->getContent();
+    auto receiverName = msg->getReceiver();
+    auto senderName = msg->getSender();
+    auto msgId = msg->getMsgId();
+    auto msgSize = msg->getSize();
+    auto creation_time = msg->getCreationTime();
+
+    // get corresponding port for receiver name
+    auto receiverPort = scheduler->getPortForModule(receiverName);
+
+    if (receiverPort == -1) {
+        sendTransmissionErrorNotification(receiverName, msgId, false);
+        delete msg;
+        return;
+    }
+    scheduler->log(nameStr + ": send message " + msgId + " to " + receiverName +
+                   " with port " + std::to_string(receiverPort) + " at time " +
+                   sendingTime.str());
+    std::string contentStr = content;
+    // scheduler->log("content is: " + contentStr);
+
+    // make packet
+    auto packet = new inet::Packet();
+    const auto& payload = inet::makeShared();
+    payload->setContent(content);
+    payload->setReceiver(receiverName);
+    payload->setSender(senderName);
+    payload->setChunkLength(inet::B(msgSize));
+    payload->setCreationTimeOmnetpp(sendingTime);
+    payload->setMsgId(msgId);
+    payload->setCreationTimeCoupling(creation_time);
+    payload->setIsTrafficMessage(false);
+    packet->insertAtBack(payload);
+    packet->setTimestamp(sendingTime);
+
+    auto clientId = getModuleIdByName(receiverName);
+    setPacketForModuleId(clientId, packet);
+
+    auto timerMsg = getTimerForModuleId(clientId);
+    // type 0 means connect
+    timerMsg->setTimerType(0);
+    timerMsg->setReceiverName(receiverName);
+    timerMsg->setReceiverPort(receiverPort);
+    timerMsg->setMessageId(msgId);
+
+    // schedule timer as self message
+    scheduleAt(simTime(), timerMsg);
+
+    delete msg;
+}
+
+bool
+AgentAppTcp::handleSocketEvent(cMessage* msg, double couplingSimTime)
+{
+
+    // simTime of coupled framework should have positive value
+    if (couplingSimTime < 0) {
+        delete msg;
+        return false;
+    }
+
+    if (typeid(*msg) == typeid(CosimaCtrlEvent)) {
+        // is traffic event
+        CosimaCtrlEvent* msgCasted = dynamic_cast(msg);
+        auto receiverName = msgCasted->getDestination();
+
+        // get corresponding port for receiver name
+        auto receiverPort = scheduler->getPortForModule(receiverName);
+
+        if (receiverPort == -1) {
+            delete msg;
+            return false;
+        }
+
+        scheduler->log(nameStr + ": send traffic to " + receiverName +
+                         " at time " + simTime().str() + ".",
+                       "info");
+
+        auto packet = new inet::Packet();
+        const auto& payload = inet::makeShared();
+        auto msgSize = msgCasted->getPacketLength();
+        payload->setChunkLength(inet::B(msgSize));
+        payload->setIsTrafficMessage(true);
+        packet->insertAtBack(payload);
+        auto clientId = getModuleIdByName(receiverName);
+        setPacketForModuleId(clientId, packet);
+
+        auto timerMsg = getTimerForModuleId(clientId);
+        // type 0 means connect
+        timerMsg->setTimerType(0);
+        timerMsg->setReceiverName(receiverName);
+        timerMsg->setReceiverPort(receiverPort);
+
+        // schedule timer as self message
+        scheduleAt(simTime(), timerMsg);
+
+        delete msg;
+        return true;
+    }
+
+    // make packet
+    if (typeid(*msg) == typeid(CosimaSchedulerMessage)) {
+        this->transmitMessage(dynamic_cast(msg), couplingSimTime);
+    }
+    delete msg;
+    return false;
+}
+
+Timer*
+AgentAppTcp::getTimerForModuleId(int clientId)
+{
+    auto iter = timer.begin();
+
+    // if timer is already created for client id, return it
+    while (iter != timer.end()) {
+        if (iter->first == clientId) {
+            std::list timerForModule = iter->second;
+            std::list::iterator it;
+            for (it = timerForModule.begin(); it != timerForModule.end();
+                 ++it) {
+                Timer* matchedTimer = *it;
+                if (not matchedTimer->isScheduled()) {
+                    this->take(matchedTimer);
+                    return *it;
+                }
+            }
+            Timer* newTimer = new Timer();
+            timer[clientId].push_back(newTimer);
+            this->take(newTimer);
+            return newTimer;
+        }
+        ++iter;
+    }
+
+    // else create new timer and add it to the timer map
+    Timer* newTimer = new Timer();
+    std::list timerForModule;
+    timerForModule.push_back(newTimer);
+    timer[clientId] = timerForModule;
+    this->take(newTimer);
+    return newTimer;
+}
+
+void
+AgentAppTcp::setPacketForModuleId(int clientId, inet::Packet* packet)
+{
+    packetToClient[clientId].push_back(packet);
+}
+
+inet::Packet*
+AgentAppTcp::getPacketForModuleId(int clientId)
+{
+    auto iter = packetToClient.begin();
+
+    if (packetToClient.count(clientId) and
+        packetToClient[clientId].size() > 0) {
+        auto packet = packetToClient[clientId].front();
+        packetToClient[clientId].pop_front();
+        return packet;
+    }
+    return nullptr;
+}
+
+int
+AgentAppTcp::getModuleIdByName(const char* module_name)
+{
+    if (module_name != nullptr and strlen(module_name) != 0) {
+        auto moduleObject = scheduler->getModuleByEid(module_name);
+        if (moduleObject == nullptr) {
+            return -1;
+        }
+        return moduleObject->getId();
+    }
+    return -1;
+}
+
+void
+AgentAppTcp::handleTimer(cMessage* msg)
+{
+    if (msg != nullptr and typeid(*msg) == typeid(Timer)) {
+        Timer* recvtimer = dynamic_cast(msg);
+        switch (recvtimer->getTimerType()) {
+            case TimerType::NoType:
+                break;
+
+            case TimerType::Connect:
+                connect(recvtimer->getReceiverName(),
+                        recvtimer->getReceiverPort(),
+                        recvtimer->getMessageId());
+                break;
+
+            case TimerType::Send:
+                waitingForPortsToConnectTo.erase(recvtimer->getReceiverPort());
+                sendData(recvtimer->getReceiverName(),
+                         recvtimer->getMessageId());
+                break;
+
+            case TimerType::Close:
+                close();
+                break;
+
+            case TimerType::Renew:
+                renew(recvtimer->getReceiverName());
+                break;
+
+            case TimerType::ConnectTimeout:
+                connectTimeout(recvtimer->getReceiverName(),
+                               recvtimer->getMessageId(),
+                               recvtimer->getReceiverPort());
+                break;
+        }
+    } else {
+        throw cRuntimeError(
+          "AgentAppTcp: called handleTimer with non-Timer object.");
+    }
+}
+
+void
+AgentAppTcp::sendTransmissionErrorNotification(const char* receiverName,
+                                               const char* msgId,
+                                               bool timeout = false)
+{
+    CosimaSchedulerMessage* notification_message = new CosimaSchedulerMessage();
+    notification_message->setTransmission_error(true);
+    notification_message->setSender(this->getParentModule()->getName());
+    notification_message->setReceiver(receiverName);
+    notification_message->setTimeout(timeout);
+    notification_message->setMsgId(msgId);
+    scheduler->sendToCoupledSimulation(notification_message);
+}
+
+void
+AgentAppTcp::connectTimeout(const char* receiverName,
+                            const char* msgId,
+                            int receiverPort)
+{
+    if (std::find(waitingForPortsToConnectTo.begin(),
+                  waitingForPortsToConnectTo.end(),
+                  receiverPort) != waitingForPortsToConnectTo.end()) {
+        scheduler->log(nameStr + " received connect timeout for " +
+                         receiverName + " with message ID " + msgId,
+                       "debug");
+
+        // case 1: called connect because received connect timeout and AgentApp
+        // is still waiting for connect
+        // -> send transmission error to coupled simulation and don't wait any
+        // longer
+        scheduler->log(nameStr + ": received connect timeout information for " +
+                         receiverName + " at time " + simTime().str(),
+                       "debug");
+        sendTransmissionErrorNotification(receiverName, msgId, true);
+        waitingForPortsToConnectTo.erase(receiverPort);
+    }
+}
+
+void
+AgentAppTcp::connect(const char* receiverName,
+                     int receiverPort,
+                     const char* messageId)
+{
+    // case: received "normal" connect timer
+    // -> connect to given receiver
+    inet::TcpSocket clientSocket;
+    int clientId = getModuleIdByName(receiverName);
+    if (clientSockets.find(clientId) != clientSockets.end()) {
+        clientSocket = clientSockets[clientId];
+    } else {
+        const char* localAddress = par("localAddress");
+        int localPort = par("localPort");
+
+        clientSocket.setOutputGate(gate("socketOut"));
+        clientSocket.setCallback(this);
+        clientSocket.bind(localAddress[0] ? inet::L3Address(localAddress)
+                                          : inet::L3Address(),
+                          localPort);
+        auto clientId = getModuleIdByName(receiverName);
+        clientSockets[clientId] = clientSocket;
+    }
+    // we need a new connId if this is not the first connection
+    clientSocket.renewSocket();
+
+    int timeToLive = par("timeToLive");
+    if (timeToLive != -1)
+        clientSocket.setTimeToLive(timeToLive);
+
+    int dscp = par("dscp");
+    if (dscp != -1)
+        clientSocket.setDscp(dscp);
+
+    int tos = par("tos");
+    if (tos != -1)
+        clientSocket.setTos(tos);
+
+    inet::L3Address destination;
+    try {
+        inet::L3AddressResolver().tryResolve(receiverName, destination);
+        if (destination.isUnspecified()) {
+            scheduler->log(nameStr + ": connecting to " + receiverName +
+                             " and port " + std::to_string(receiverPort) +
+                             ": cannot resolve destination address",
+                           "warning");
+        } else {
+            std::string receiverNameStr = receiverName;
+            std::string messageIdStr = messageId;
+            scheduler->log(nameStr + ": connecting to " + receiverNameStr +
+                             "(" + destination.str() + ") and port " +
+                             std::to_string(receiverPort),
+                           "debug");
+
+            clientSocket.connect(destination, receiverPort);
+            waitingForPortsToConnectTo.insert(receiverPort);
+
+            numSessions++;
+            emit(connectSignal, 1L);
+
+            auto timerMsg = getTimerForModuleId(clientId);
+            // type 4 means connectTimeout
+            timerMsg->setTimerType(4);
+            timerMsg->setReceiverName(receiverNameStr.c_str());
+            timerMsg->setReceiverPort(receiverPort);
+            timerMsg->setMessageId(messageIdStr.c_str());
+        }
+        clientSockets[clientId] = clientSocket;
+    } catch (...) {
+        scheduler->log(nameStr + ": Error when trying to resolve L3 address",
+                       "warning");
+        sendTransmissionErrorNotification(receiverName, messageId);
+        waitingForPortsToConnectTo.erase(receiverPort);
+    }
+}
+
+void
+AgentAppTcp::renew(const char* receiver_name)
+{
+    auto clientId = getModuleIdByName(receiver_name);
+    inet::TcpSocket clientSocket = clientSockets[clientId];
+    clientSocket.renewSocket();
+    clientSocket.setOutputGate(gate("socketOut"));
+    clientSocket.setCallback(this);
+    const char* localAddress = par("localAddress");
+    int localPort = par("localPort");
+
+    clientSocket.bind(localAddress[0] ? inet::L3Address(localAddress)
+                                      : inet::L3Address(),
+                      localPort);
+    clientSocket.listen();
+}
+
+void
+AgentAppTcp::socketEstablished(inet::TcpSocket* socket)
+{
+    auto moduleName = scheduler->getModuleNameFromPort(socket->getRemotePort());
+    if (moduleName != "") {
+        auto timerMsg =
+          getTimerForModuleId(getModuleIdByName(moduleName.c_str()));
+        // type 1 means send
+        timerMsg->setTimerType(1);
+        timerMsg->setReceiverName(moduleName.c_str());
+        timerMsg->setReceiverPort(socket->getRemotePort());
+        scheduleAt(simTime(), timerMsg);
+    }
+}
+
+void
+AgentAppTcp::socketDataArrived(inet::TcpSocket* socket,
+                               inet::Packet* msg,
+                               bool urgent)
+{
+    scheduler->log(nameStr + ": socket data arrived.", "debug");
+    auto copy = msg->dup();
+    simtime_t delay;
+    auto delay_d = 0.0;
+    auto replyReceiver = "";
+
+    packetsRcvd++;
+    bytesRcvd += msg->getByteLength();
+    emit(inet::packetReceivedSignal, msg);
+
+    if (msg->getArrivalGate() == gate("socketIn")) {
+
+        inet::Packet* recvPacket = dynamic_cast(copy);
+        if (recvPacket != nullptr) {
+            auto replyContent = "";
+            CosimaSchedulerMessage* answer = new CosimaSchedulerMessage();
+            answer->setTransmission_error(false);
+
+            inet::b offset = inet::b(0); // start from the beginning
+            auto foundApplicationChunk = false;
+
+            while (
+              auto chunk =
+                recvPacket->peekAt(offset)->dupShared()) { // for each chunk
+                if (foundApplicationChunk) {
+                    delete recvPacket;
+                    break;
+                }
+                auto length = chunk->getChunkLength();
+
+                if (chunk->getClassName() == std::string("inet::SliceChunk")) {
+                    auto newPacket = recvPacket->peekData(
+                      inet::Chunk::PeekFlag::PF_ALLOW_REINTERPRETATION);
+                    auto encapsulatedChunk = newPacket->getChunk();
+                    if (encapsulatedChunk->getClassName() !=
+                        std::string("CosimaApplicationChunk")) {
+                        if (encapsulatedChunk->getClassName() ==
+                            std::string("inet::SequenceChunk")) {
+                            inet::SequenceChunk* encapsulatedSequenceChunk =
+                              dynamic_cast(
+                                encapsulatedChunk.get());
+                            auto queue = encapsulatedSequenceChunk->getChunks();
+                            for (int i = 0; i < queue.size(); i++) {
+                                auto item = queue[i];
+                                auto itemget = item.get();
+                                if (itemget->getClassName() ==
+                                    std::string("inet::SliceChunk")) {
+                                    const inet::SliceChunk*
+                                      encapsulatedSliceChunk =
+                                        dynamic_cast(
+                                          itemget);
+                                    auto appChunkInSliceChunk =
+                                      encapsulatedSliceChunk->getChunk();
+                                    auto appChunk = appChunkInSliceChunk->peek<
+                                      CosimaApplicationChunk>(
+                                      inet::b(0),
+                                      appChunkInSliceChunk->getChunkLength(),
+                                      inet::Chunk::PeekFlag::
+                                        PF_ALLOW_REINTERPRETATION);
+                                    if (appChunk->isTrafficMessage()) {
+                                        scheduler->log(nameStr +
+                                                         " received traffic "
+                                                         "message at time " +
+                                                         simTime().str(),
+                                                       "info");
+                                        return;
+                                    } else {
+                                        bool alreadyReceived =
+                                          (std::find(receivedMsgIds.begin(),
+                                                     receivedMsgIds.end(),
+                                                     appChunk->getMsgId()) !=
+                                           receivedMsgIds.end());
+                                        if (alreadyReceived) {
+                                            return;
+                                        }
+                                        answer->setContent(
+                                          appChunk->getContent());
+                                        answer->setReceiver(
+                                          appChunk->getReceiver());
+                                        answer->setFalsified(
+                                          appChunk->isFalsified());
+                                        simtime_t delay =
+                                          simTime() -
+                                          appChunk->getCreationTimeOmnetpp();
+                                        auto delay_i = 0U;
+                                        delay_i = ceil(delay.dbl() * 1000);
+                                        answer->setDelay(delay_i);
+                                        answer->setSender(
+                                          appChunk->getSender());
+                                        answer->setMsgId(appChunk->getMsgId());
+                                        answer->setCreationTime(
+                                          appChunk->getCreationTimeCoupling());
+                                        foundApplicationChunk = true;
+                                        receivedMsgIds.push_back(
+                                          appChunk->getMsgId());
+                                        sendReply(answer);
+                                    }
+                                }
+                            }
+                        }
+                    } else {
+                        auto appChunk =
+                          encapsulatedChunk->peek(
+                            inet::b(0),
+                            encapsulatedChunk->getChunkLength(),
+                            inet::Chunk::PeekFlag::PF_ALLOW_REINTERPRETATION);
+                        if (appChunk->isTrafficMessage()) {
+                            scheduler->log(
+                              nameStr + " received traffic message at time " +
+                                simTime().str(),
+                              "info");
+                            return;
+                        } else {
+                            bool alreadyReceived =
+                              (std::find(receivedMsgIds.begin(),
+                                         receivedMsgIds.end(),
+                                         appChunk->getMsgId()) !=
+                               receivedMsgIds.end());
+                            if (alreadyReceived) {
+                                return;
+                            }
+                            answer->setFalsified(appChunk->isFalsified());
+                            answer->setContent(appChunk->getContent());
+                            answer->setReceiver(appChunk->getReceiver());
+                            simtime_t delay =
+                              simTime() - appChunk->getCreationTimeOmnetpp();
+                            auto delay_i = 0U;
+                            delay_i = ceil(delay.dbl() * 1000);
+                            answer->setDelay(delay_i);
+                            answer->setSender(appChunk->getSender());
+                            answer->setMsgId(appChunk->getMsgId());
+                            answer->setCreationTime(
+                              appChunk->getCreationTimeCoupling());
+                            foundApplicationChunk = true;
+                            receivedMsgIds.push_back(appChunk->getMsgId());
+                            sendReply(answer);
+                        }
+                    }
+                } else if (chunk->getClassName() ==
+                           std::string("CosimaApplicationChunk")) {
+                    auto cosimaApplicationChunk =
+                      recvPacket->peekAt(
+                        offset,
+                        length,
+                        inet::Chunk::PeekFlag::PF_ALLOW_REINTERPRETATION);
+                    if (cosimaApplicationChunk->isTrafficMessage()) {
+                        scheduler->log(nameStr +
+                                         " received traffic message at time " +
+                                         simTime().str(),
+                                       "info");
+                        return;
+                    } else {
+                        replyContent = cosimaApplicationChunk->getContent();
+                        simtime_t delay =
+                          simTime() -
+                          cosimaApplicationChunk->getCreationTimeOmnetpp();
+                        auto delay_i = 0U;
+                        delay_i = ceil(delay.dbl() * 1000);
+                        replyReceiver = cosimaApplicationChunk->getReceiver();
+                        auto replySender = cosimaApplicationChunk->getSender();
+                        auto msgId = cosimaApplicationChunk->getMsgId();
+                        auto creationTime =
+                          cosimaApplicationChunk->getCreationTimeCoupling();
+                        answer->setFalsified(
+                          cosimaApplicationChunk->isFalsified());
+                        answer->setContent(replyContent);
+                        answer->setReceiver(replyReceiver);
+                        answer->setDelay(delay_i);
+                        answer->setSender(replySender);
+                        answer->setMsgId(msgId);
+                        answer->setCreationTime(creationTime);
+                        foundApplicationChunk = true;
+                        receivedMsgIds.push_back(msgId);
+                        sendReply(answer);
+                    }
+
+                } else {
+                    offset += chunk->getChunkLength();
+                    if (offset >= recvPacket->getTotalLength()) {
+                        scheduler->log(
+                          "Couldn't find CosimaApplicationChunk in packet: " +
+                            recvPacket->str(),
+                          "warning");
+                        break;
+                    }
+                    answer->setDelay(delay_d);
+                }
+            }
+            delete answer;
+            delete msg;
+        }
+    }
+}
+
+void
+AgentAppTcp::sendData(const char* receiverName, const char* messageId)
+{
+    int clientId = getModuleIdByName(receiverName);
+    if (clientSockets.find(clientId) != clientSockets.end()) {
+        inet::TcpSocket clientSocket;
+        clientSocket = clientSockets[clientId];
+
+        auto packet = getPacketForModuleId(clientId);
+
+        if (packet == nullptr) {
+            scheduler->log(nameStr + " has not saved packet for clientId " +
+                             std::to_string(clientId),
+                           "warning");
+        }
+
+        if (packet) {
+            inet::Packet* sending;
+            sending = packet->dup();
+            sending->setTimestamp(packet->getTimestamp());
+            int numBytes = sending->getByteLength();
+            emit(inet::packetSentSignal, sending);
+            clientSocket.send(sending);
+            packetsSent++;
+            bytesSent += numBytes;
+            if (packet->getOwner() == this) {
+                delete packet;
+            }
+        }
+    } else {
+        scheduler->log(nameStr + ": socket not connected to " + receiverName,
+                       "warning");
+        connect(
+          receiverName, scheduler->getPortForModule(receiverName), messageId);
+    }
+}
+
+void
+AgentAppTcp::sendReply(CosimaSchedulerMessage* reply)
+{
+    scheduler->sendToCoupledSimulation(reply);
+}
+
+void
+AgentAppTcp::socketClosed(inet::TcpSocket* socket)
+{
+    scheduler->log(nameStr + ": socket closed.", "debug");
+
+    TcpAppBase::socketClosed(socket);
+    if (operationalState == State::STOPPING_OPERATION && !this->socket.isOpen())
+        startActiveOperationExtraTimeOrFinish(par("stopOperationExtraTime"));
+}
+
+void
+AgentAppTcp::socketFailure(inet::TcpSocket* socket, int code)
+{
+    scheduler->log(
+      nameStr + ": socket failure with code:" + std::to_string(code), "debug");
+    TcpAppBase::socketFailure(socket, code);
+}
+
+void
+AgentAppTcp::handleStartOperation(inet::LifecycleOperation* operation)
+{
+    const char* localAddress = par("localAddress");
+    int localPort = par("localPort");
+
+    serverSocket.setOutputGate(gate("socketOut"));
+    serverSocket.setCallback(this);
+    serverSocket.bind(localAddress[0] ? inet::L3Address(localAddress)
+                                      : inet::L3Address(),
+                      localPort);
+    serverSocket.listen();
+}
+
+void
+AgentAppTcp::handleStopOperation(inet::LifecycleOperation* operation)
+{
+    if (socket.isOpen())
+        close();
+    delayActiveOperationFinish(par("stopOperationTimeout"));
+}
+
+void
+AgentAppTcp::handleCrashOperation(inet::LifecycleOperation* operation)
+{
+}
+
+void
+AgentAppTcp::finish()
+{
+}
diff --git a/cosima_omnetpp_project/modules/AgentAppTcp.h b/omnetpp/modules/AgentAppTcp.h
similarity index 95%
rename from cosima_omnetpp_project/modules/AgentAppTcp.h
rename to omnetpp/modules/AgentAppTcp.h
index 27a83df..09a150d 100644
--- a/cosima_omnetpp_project/modules/AgentAppTcp.h
+++ b/omnetpp/modules/AgentAppTcp.h
@@ -20,6 +20,7 @@
 #include "inet/applications/tcpapp/TcpAppBase.h"
 #include "inet/common/lifecycle/LifecycleOperation.h"
 #include "inet/common/lifecycle/NodeStatus.h"
+#include "omnetpp/simtime.h"
 
 using namespace omnetpp;
 
@@ -57,6 +58,11 @@ class AgentAppTcp : public inet::TcpAppBase {
      * Overwrites message of TcpAppBase to be able to receive messages from CosimaScheduler
      */
     void handleMessageWhenUp(cMessage *msg) override;
+    /*
+     * Transmit a message from the coupled simulation through the communication
+     * simulation.
+     */
+    void transmitMessage(CosimaSchedulerMessage*, SimTime);
     /**
      * Handle event from socket to coupled simulation.
      */
diff --git a/cosima_omnetpp_project/modules/AgentAppTcp.ned b/omnetpp/modules/AgentAppTcp.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/AgentAppTcp.ned
rename to omnetpp/modules/AgentAppTcp.ned
diff --git a/omnetpp/modules/AgentAppUdp.cc b/omnetpp/modules/AgentAppUdp.cc
new file mode 100644
index 0000000..fe8a779
--- /dev/null
+++ b/omnetpp/modules/AgentAppUdp.cc
@@ -0,0 +1,207 @@
+/*
+ * AgentAppUdp.cc
+ *
+ *  Created on: 11 Apr 2021
+ *      Author: malin
+ *
+ *  The AgentAppUdp represents the implementation of the application layer (and
+ * transport layer) of the end devices, which represent the agents in mosaik on
+ * the OMNeT++ side. The AgentAppUdp sends messages in OMNeT++ over UDP.
+ *
+ */
+
+#include "AgentAppUdp.h"
+
+#include 
+#include 
+#include 
+#include 
+
+#include "../messages/CosimaApplicationChunk_m.h"
+#include "../messages/CosimaCtrlEvent_m.h"
+#include "../messages/CosimaSchedulerMessage_m.h"
+#include "../modules/CosimaScheduler.h"
+#include "inet/common/packet/chunk/ByteCountChunk.h"
+#include "inet/common/packet/chunk/BytesChunk.h"
+#include "inet/networklayer/common/L3AddressResolver.h"
+#include "inet/transportlayer/contract/udp/UdpSocket.h"
+#include "omnetpp/checkandcast.h"
+#include "../util.h"
+
+using namespace inet;
+using namespace omnetpp;
+
+Define_Module(AgentAppUdp);
+
+AgentAppUdp::~AgentAppUdp()
+{
+    scheduler = nullptr;
+}
+
+void
+AgentAppUdp::initialize(int stage)
+{
+    // get name of parent module as string for logging
+    clientName = this->getParentModule()->getName();
+
+    if (stage != inet::INITSTAGE_APPLICATION_LAYER)
+        return;
+
+    // get intern socket scheduler from simulation and cast to CosimaScheduler
+    scheduler =
+      check_and_cast(getSimulation()->getScheduler());
+    // register module at scheduler
+    scheduler->registerModule(clientName, this);
+    // initialize socket in simulation in OMNeT++ and bind to local port
+    // local port can be set in .ini file
+    socketudp.setOutputGate(gate("socketOut"));
+    int localPort = par("localPort");
+    socketudp.bind(localPort);
+}
+
+void
+AgentAppUdp::handleMessage(cMessage* msg)
+{
+    // message can be from scheduler -> call handleSchedulerEvent()
+    // or message from network -> handle message
+
+    if (msg->getArrivalGate() != gate("socketIn")) {
+        handleSchedulerMessage(check_and_cast(msg));
+        return;
+    }
+
+    inet::Packet* packet = check_and_cast(msg);
+    auto replyContent = "";
+    auto answer = new CosimaSchedulerMessage();
+
+    // calculate delay
+    simtime_t delay =
+      scheduler->getSimulation()->getSimTime() - msg->getCreationTime();
+    scheduler->log(clientName + ": received message at time " + simTime().str() +
+                   " with delay " + delay.str());
+    int delay_i = to_mosaik_time(delay);
+
+    // handle reply to scheduler
+    inet::b offset = inet::b(0); // start from the beginning
+    auto foundApplicationChunk = false;
+
+    while (auto chunk = packet->peekAt(offset)->dupShared()) { // for each chunk
+        if (foundApplicationChunk) {
+            // message is from other SocketAgent
+            delete packet;
+            break;
+        }
+        auto length = chunk->getChunkLength();
+
+        if (chunk->getClassName() == std::string("inet::SliceChunk")) {
+            auto newPacket = packet->peekData(0);
+            auto encapsulatedChunk = newPacket->getChunk();
+            auto appChunk = encapsulatedChunk->peek(
+              inet::b(0), encapsulatedChunk->getChunkLength());
+            answer->setContent(appChunk->getContent());
+            answer->setReceiver(appChunk->getReceiver());
+            simtime_t delay = simTime() - appChunk->getCreationTimeOmnetpp();
+            auto delay_i = 0U;
+            delay_i = to_mosaik_time(delay);
+            answer->setDelay(delay_i);
+            answer->setSender(appChunk->getSender());
+            answer->setMsgId(appChunk->getMsgId());
+            answer->setCreationTime(appChunk->getCreationTimeCoupling());
+            foundApplicationChunk = true;
+
+        } else if (chunk->getClassName() ==
+                   std::string("CosimaApplicationChunk")) {
+            replyContent =
+              packet->peekAt(offset, length)
+                ->getContent();
+            auto replyReceiver =
+              packet->peekAt(offset, length)
+                ->getReceiver();
+            auto replySender =
+              packet->peekAt(offset, length)
+                ->getSender();
+            auto msgId = packet->peekAt(offset, length)
+                           ->getMsgId();
+            auto creationTime =
+              packet->peekAt(offset, length)
+                ->getCreationTimeCoupling();
+            answer->setContent(replyContent);
+            answer->setReceiver(replyReceiver);
+            answer->setDelay(delay_i);
+            answer->setSender(replySender);
+            answer->setMsgId(msgId);
+            answer->setCreationTime(creationTime);
+            foundApplicationChunk = true;
+        } else {
+            offset += chunk->getChunkLength();
+            if (offset >= packet->getTotalLength()) {
+                scheduler->log(
+                  "Couldn't find CosimaApplicationChunk in packet: " +
+                    packet->str(),
+                  "warning");
+                break;
+            }
+            answer->setDelay(delay_i);
+        }
+    }
+    sendReply(answer);
+    delete answer;
+}
+
+void
+AgentAppUdp::handleSchedulerMessage(CosimaSchedulerMessage* msg)
+{
+    // get content from message
+    std::string content = msg->getContent();
+    auto receiverName = msg->getReceiver();
+    auto senderName = msg->getSender();
+    auto msgId = msg->getMsgId();
+    auto msgSize = msg->getSize();
+    auto creationTime = msg->getCreationTime();
+
+    // get corresponding port for receiver name
+    int receiverPort = scheduler->getPortForModule(receiverName);
+
+    scheduler->log(clientName + ": send message " + msgId + +" to " +
+                     receiverName + " with port " +
+                     std::to_string(receiverPort) + " at time " +
+                     std::to_string(creationTime),
+                   "info");
+    // scheduler->log("content is: " + contentStr);
+
+    // make packet
+    auto packet = new inet::Packet();
+    const auto& payload = inet::makeShared();
+    payload->setContent(content.c_str());
+    payload->setReceiver(receiverName);
+    payload->setSender(senderName);
+    payload->setChunkLength(inet::B(msgSize));
+    payload->setCreationTimeOmnetpp(simTime());
+    payload->setMsgId(msgId);
+    payload->setCreationTimeCoupling(creationTime);
+    packet->insertAtBack(payload);
+
+    // get destination
+    inet::L3Address destAddress;
+    try {
+        destAddress = inet::L3AddressResolver().resolve(receiverName);
+        // send packet
+        socketudp.sendTo(packet, destAddress, receiverPort);
+    } catch (...) {
+        scheduler->log(clientName + ": Error when trying to resolve L3 address",
+                       "warning");
+        CosimaSchedulerMessage* notificationMessage =
+          new CosimaSchedulerMessage();
+        notificationMessage->setTransmission_error(true);
+        notificationMessage->setSender(clientName.c_str());
+        notificationMessage->setReceiver(receiverName);
+        scheduler->sendToCoupledSimulation(notificationMessage);
+    }
+    delete msg;
+}
+
+void
+AgentAppUdp::sendReply(CosimaSchedulerMessage* reply)
+{
+    scheduler->sendToCoupledSimulation(reply);
+}
diff --git a/cosima_omnetpp_project/modules/AgentAppUdp.h b/omnetpp/modules/AgentAppUdp.h
similarity index 90%
rename from cosima_omnetpp_project/modules/AgentAppUdp.h
rename to omnetpp/modules/AgentAppUdp.h
index a805b6e..3c50c55 100644
--- a/cosima_omnetpp_project/modules/AgentAppUdp.h
+++ b/omnetpp/modules/AgentAppUdp.h
@@ -16,7 +16,7 @@ class AgentAppUdp : public cSimpleModule {
 
     cGate *connectGate;
 
-    std::string nameStr;
+    std::string clientName;
 
 public:
     AgentAppUdp(){}
@@ -36,7 +36,7 @@ class AgentAppUdp : public cSimpleModule {
      * a message from the scheduler. In that case the message is now
      * forwarded over the network in OMNeT++.
      */
-    void handleSocketEvent(cMessage *msg);
+    void handleSchedulerMessage(CosimaSchedulerMessage *msg);
     /**
      * Send a reply to the scheduler after sending a message
      * over the network.
@@ -51,9 +51,6 @@ class AgentAppUdp : public cSimpleModule {
      *      * Returns the number of init stages.
      */
     int numInitStages() const override { return (inet::NUM_INIT_STAGES); }
-    /**
-     * Called when data arrives at socket.
-     */
 
 };
 
diff --git a/cosima_omnetpp_project/modules/AgentAppUdp.ned b/omnetpp/modules/AgentAppUdp.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/AgentAppUdp.ned
rename to omnetpp/modules/AgentAppUdp.ned
diff --git a/cosima_omnetpp_project/modules/CosimaScenarioManager.cc b/omnetpp/modules/CosimaScenarioManager.cc
similarity index 99%
rename from cosima_omnetpp_project/modules/CosimaScenarioManager.cc
rename to omnetpp/modules/CosimaScenarioManager.cc
index 9bdf7af..352110c 100644
--- a/cosima_omnetpp_project/modules/CosimaScenarioManager.cc
+++ b/omnetpp/modules/CosimaScenarioManager.cc
@@ -38,7 +38,7 @@ void CosimaScenarioManager::handleMessage(cMessage *msg) {
     if (typeid(*msg) == typeid(CosimaCtrlEvent)) {
         CosimaCtrlEvent *event = dynamic_cast(msg);
         if (event->getCtrlType() == 6) {
-            cModule *receiverModule = scheduler->getReceiverModule(event->getSource());
+            cModule *receiverModule = scheduler->getModuleByEid(event->getSource());
             if (receiverModule == nullptr) {
                 throw cRuntimeError("CosimaScenarioManager: Can't resolve traffic sender module.");
             }
diff --git a/cosima_omnetpp_project/modules/CosimaScenarioManager.h b/omnetpp/modules/CosimaScenarioManager.h
similarity index 100%
rename from cosima_omnetpp_project/modules/CosimaScenarioManager.h
rename to omnetpp/modules/CosimaScenarioManager.h
diff --git a/cosima_omnetpp_project/modules/CosimaScenarioManager.ned b/omnetpp/modules/CosimaScenarioManager.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/CosimaScenarioManager.ned
rename to omnetpp/modules/CosimaScenarioManager.ned
diff --git a/omnetpp/modules/CosimaScheduler.cc b/omnetpp/modules/CosimaScheduler.cc
new file mode 100644
index 0000000..a02eed0
--- /dev/null
+++ b/omnetpp/modules/CosimaScheduler.cc
@@ -0,0 +1,1187 @@
+/*
+ * CosimaScheduler.cc
+ *
+ *  Created on: 11 Apr 2021
+ *      Author: malin
+ */
+#include "CosimaScheduler.h"
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "../colors.h"
+#include "../messages/AttackEvent_m.h"
+#include "../messages/AttackType_m.h"
+#include "../messages/ControlType_m.h"
+#include "../messages/CosimaApplicationChunk_m.h"
+#include "../messages/CosimaCtrlEvent_m.h"
+#include "../messages/message.pb.h"
+#include "../util.h"
+#include "CosimaScenarioManager.h"
+#include "CosimaSchedulerModule.h"
+#include "inet/common/packet/Packet.h"
+#include "inet/networklayer/common/L3AddressResolver.h"
+#include "inet/networklayer/ipv4/Ipv4Header_m.h"
+#include "omnetpp/cexception.h"
+#include "omnetpp/clog.h"
+#include "omnetpp/cmodule.h"
+#include "omnetpp/csimplemodule.h"
+#include "omnetpp/csimulation.h"
+#include "omnetpp/simtime.h"
+
+using std::chrono::duration_cast;
+using std::chrono::microseconds;
+using std::chrono::milliseconds;
+using std::chrono::seconds;
+using std::chrono::system_clock;
+
+Register_Class(CosimaScheduler);
+
+using namespace omnetpp;
+
+const int SELF_MESSAGE = -1;
+
+auto MAX_BYTE_SIZE_PER_MSG = 100000;
+
+// counter for messages
+auto maxAdvanceCounter = 0U;
+auto errorCounter = 0U;
+auto disconnectCounter = 0U;
+auto reconnectCounter = 0U;
+auto messageCounter = 0U;
+
+// parameter from coupled simulation
+auto stepSize = 1.0;
+SimTime until;
+auto untilReached =
+  false; // indicates whether simulation end is reached in coupled simulation
+auto initialMessageReceived = false;
+
+auto receiveUntilLock = false;
+
+auto eventScheduled = false;
+
+auto currentStepInMessage = 0U;
+auto lastStepInMessage = 0U;
+
+std::string loggingLevel;
+
+class Message
+{
+    /*
+     * This is a class, that may represent all used kinds of protocol buffer
+     * messages used in this project. It is used for lists of messages that
+     * might be of any type.
+     */
+    SynchronisationMessage
+      syncMessage; // SynchronisationMessages are used for time
+                   // synchronisation between coupled simulation and OMNeT++.
+    InfoMessage infoMessage; // InfoMessages contain messages, that need to be
+                             // simulated in the OMNeT++ network.
+    InfrastructureMessage
+      infrastructureMessage; // InfrastructureMessages are used for dynamic
+                             // changes in the infrastructure of the OMNeT++
+                             // network.
+
+    enum
+    {
+        SYNCHRONISATION_MESSAGE,
+        INFO_MESSAGE,
+        INFRASTRUCTURE_MESSAGE
+    } messageType;
+
+  public:
+    Message() {}
+
+    void setMessage(SynchronisationMessage syncMessage)
+    {
+        this->syncMessage = syncMessage;
+        this->messageType = SYNCHRONISATION_MESSAGE;
+    }
+    void setMessage(InfoMessage infoMessage)
+    {
+        this->infoMessage = infoMessage;
+        this->messageType = INFO_MESSAGE;
+    }
+    void setMessage(InfrastructureMessage infrastructureMessage)
+    {
+        this->infrastructureMessage = infrastructureMessage;
+        this->messageType = INFRASTRUCTURE_MESSAGE;
+    }
+    void printInfo()
+    {
+        if (this->messageType == INFO_MESSAGE) {
+            this->infoMessage.PrintDebugString();
+        } else if (this->messageType == SYNCHRONISATION_MESSAGE) {
+            this->syncMessage.PrintDebugString();
+        } else if (this->messageType == INFRASTRUCTURE_MESSAGE) {
+            this->infrastructureMessage.PrintDebugString();
+        }
+    }
+    int getByteSize()
+    {
+        if (this->messageType == INFO_MESSAGE) {
+            return this->infoMessage.ByteSize();
+        } else if (this->messageType == SYNCHRONISATION_MESSAGE) {
+            return this->syncMessage.ByteSize();
+        } else if (this->messageType == INFRASTRUCTURE_MESSAGE) {
+            return this->infrastructureMessage.ByteSize();
+        }
+        return -1;
+    }
+    CosimaMsgGroup addMessageToMsgGroup(CosimaMsgGroup msgGroup)
+    {
+        if (this->messageType == INFO_MESSAGE) {
+            InfoMessage* infoMessage = msgGroup.add_info_messages();
+            infoMessage->CopyFrom(this->infoMessage);
+        } else if (this->messageType == SYNCHRONISATION_MESSAGE) {
+            SynchronisationMessage* syncMessage =
+              msgGroup.add_synchronisation_messages();
+            syncMessage->CopyFrom(this->syncMessage);
+        } else if (this->messageType == INFRASTRUCTURE_MESSAGE) {
+            InfrastructureMessage* infrastructureMessage =
+              msgGroup.add_infrastructure_messages();
+            infrastructureMessage->CopyFrom(this->infrastructureMessage);
+        }
+        return msgGroup;
+    }
+};
+
+std::list messages;
+
+int
+CosimaScheduler::getNumberOfSavedMessages()
+{
+    int size = messages.size();
+    return size;
+}
+
+struct Receiver
+{
+    std::vector operator()(SOCKET listenerSocket)
+    {
+        std::vector buf(MAX_BYTE_SIZE_PER_MSG);
+
+        // accept connection, and store FD in connSocket
+        if (untilReached) {
+            return buf;
+        }
+        sockaddr_in sinRemote;
+        int addrSize = sizeof(sinRemote);
+        SOCKET sock =
+          accept(listenerSocket, (sockaddr*)&sinRemote, (socklen_t*)&addrSize);
+        if (sock == INVALID_SOCKET)
+            throw cRuntimeError(
+              "CosimaScheduler: accept() failed. Invalid Socket!");
+        EV << "CosimaScheduler: connected!\n" << endl;
+        int bytes = recv(sock, buf.data(), buf.size(), 0);
+        return buf;
+    }
+};
+
+CosimaScheduler::CosimaScheduler()
+  : cScheduler()
+{
+    // variables for socket connection to coupled simulation
+    listenerSocket = INVALID_SOCKET;
+}
+
+CosimaScheduler::~CosimaScheduler() = default;
+
+std::string
+CosimaScheduler::str() const
+{
+    return ("scheduler with socket option for integration of other simulation "
+            "framework");
+}
+
+void
+CosimaScheduler::startRun()
+{
+    if (initsocketlibonce() != 0)
+        throw cRuntimeError(
+          "CosimaScheduler: Cannot initialize socket library");
+    setupListener();
+}
+
+void
+CosimaScheduler::setupListener()
+{
+    listenerSocket = socket(AF_INET, SOCK_STREAM, 0);
+    if (listenerSocket == INVALID_SOCKET)
+        throw cRuntimeError(
+          "CosimaScheduler: cannot create socket. Socket is invalid");
+
+    int enable = 1;
+    if (setsockopt(listenerSocket,
+                   SOL_SOCKET,
+                   SO_REUSEADDR,
+                   (const char*)&enable,
+                   sizeof(int)) < 0)
+        throw cRuntimeError(
+          "CosimaScheduler: cannot set socket option. Socket is invalid");
+
+    sockaddr_in sinInterface;
+    sinInterface.sin_family = AF_INET;
+    sinInterface.sin_addr.s_addr = INADDR_ANY;
+    sinInterface.sin_port = htons(PORT);
+    if (bind(listenerSocket, (sockaddr*)&sinInterface, sizeof(sockaddr_in)) ==
+        SOCKET_ERROR)
+        throw cRuntimeError(
+          "CosimaScheduler: socket bind() failed. Please check if another "
+          "instance of the simulation is already running.");
+
+    listen(listenerSocket, SOMAXCONN);
+}
+
+void
+CosimaScheduler::endRun()
+{
+    close(listenerSocket);
+    endSimulation();
+}
+
+void
+CosimaScheduler::executionResumed()
+{
+    cScheduler::executionResumed();
+}
+
+void
+CosimaScheduler::printCurrentTime()
+{
+    std::cout << getCurrentTime() << " ";
+}
+
+std::string
+CosimaScheduler::getCurrentTime()
+{
+    timeval curTime;
+    gettimeofday(&curTime, NULL);
+    int usec = curTime.tv_usec;
+
+    time_t rawtime;
+    struct tm* timeinfo;
+    char buffer[80];
+
+    time(&rawtime);
+    timeinfo = localtime(&rawtime);
+
+    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);
+
+    char currentTime[84] = "";
+    sprintf(currentTime, "%s:%d", buffer, usec);
+    return currentTime;
+}
+
+void
+CosimaScheduler::log(std::string info, std::string logLevel)
+{
+    if (logLevel.compare("warning") == 0) {
+        printCurrentTime();
+        std::cout << FRED(" | WARNING | OMNeT++: ");
+        std::cout << info << endl;
+    }
+    if ((logLevel.compare("info")) == 0 and
+        (loggingLevel.compare("info") == 0 or
+         loggingLevel.compare("debug") == 0)) {
+        printCurrentTime();
+        std::cout << FBLU(" | INFO    | OMNeT++: ");
+        std::cout << info << endl;
+    }
+    if (loggingLevel.compare("debug") == 0) {
+        printCurrentTime();
+        std::cout << " | DEBUG   | OMNeT++: ";
+        std::cout << info << endl;
+    }
+
+    auto written = false;
+    while (not written) {
+        try {
+            std::fstream f;
+
+            // opening file using ofstream
+            f.open("../log.txt", std::ios::app);
+            if (!f) {
+                return;
+            } else {
+                f << getCurrentTime() << " OMNeT++: " << info << "\n";
+                f.close();
+                written = true;
+            }
+        } catch (...) {
+        }
+    }
+}
+
+void
+CosimaScheduler::log(std::string info)
+{
+    log(info, "debug");
+}
+
+void
+CosimaScheduler::setSchedulerModule(CosimaSchedulerModule* mod)
+{
+    if (mod == nullptr) {
+        throw cRuntimeError(
+          "CosimaScheduler: setInterfaceModule() not called with "
+          "a module object");
+    }
+    this->schedulerModule = mod;
+}
+
+void
+CosimaScheduler::setScenarioManager(CosimaScenarioManager* manager)
+{
+    log("CosimaScheduler: registered ScenarioManager.");
+    scenarioManager = manager;
+}
+
+void
+CosimaScheduler::setAttackNetworkLayer(omnetpp::cModule* networkLayerModule)
+{
+    attackModules.push_back(networkLayerModule);
+}
+
+void
+CosimaScheduler::registerModule(std::string eid, cSimpleModule* mod)
+{
+    this->modules.insert({ eid, mod });
+}
+
+int
+CosimaScheduler::getPortForModule(std::string module_name)
+{
+    if (module_name == "") {
+        return -1;
+    }
+    cModule* submod = getModuleByEid(module_name);
+    if (submod != nullptr and submod->hasPar("localPort")) {
+        return (submod->par("localPort"));
+    }
+    return -1;
+}
+
+std::string
+CosimaScheduler::getModuleNameFromPort(int port)
+{
+    for (auto const& [eid, module] : modules) {
+        if (module->par("localPort").intValue() == port) {
+            return eid;
+            // Was the following, which I think does the same.
+            // return module->getParentModule()->getName();
+        }
+    }
+    throw cRuntimeError("No module registered for port %i", port);
+}
+
+cSimpleModule*
+CosimaScheduler::getModuleByEid(std::string eid)
+{
+    return this->modules.at(eid);
+}
+
+cModule*
+CosimaScheduler::getAttackNetworkLayerModule(std::string module_name)
+{
+    // get corresponding module to server name
+    cModule* matchingModule = nullptr;
+    for (auto const& module : attackModules) {
+        std::string moduleNameCheck =
+          std::string(module->getParentModule()->getParentModule()->getName());
+        if (moduleNameCheck.compare(module_name) == 0) {
+            matchingModule = module;
+        }
+    }
+    if (matchingModule == nullptr) {
+        throw cRuntimeError("No network layer module found, that implements "
+                            "attack functionality. "
+                            "Make sure to use the special AttackUe module.");
+    }
+    return (matchingModule);
+}
+
+void
+CosimaScheduler::handleInitialMessage(InitialMessage initialMessage)
+{
+    initialMessageReceived = true;
+    until = from_mosaik_time(initialMessage.until());
+    this->schedulerModule->cancelUntilEvent();
+    // schedule until event
+    this->schedulerModule->untilEvent->setArrival(
+      schedulerModule->getId(), SELF_MESSAGE, until);
+    getSimulation()->getFES()->insert(this->schedulerModule->untilEvent);
+    log("CosimaScheduler: until event inserted for time " + until.str() +
+          " at simtime " + simTime().str(),
+        "info");
+
+    stepSize = initialMessage.step_size();
+    auto loggingLevelMsg = initialMessage.logging_level();
+    std::string loggingLevelStr = loggingLevelMsg;
+    loggingLevel = loggingLevelStr;
+    log("Setting logging level to: " + loggingLevelStr, "info");
+    MAX_BYTE_SIZE_PER_MSG = initialMessage.max_byte_size_per_msg_group();
+    log("Setting max byte size per message to " +
+        std::to_string(MAX_BYTE_SIZE_PER_MSG));
+
+    // schedule max advance event
+    auto maxAdvance = from_mosaik_time(initialMessage.max_advance());
+    this->schedulerModule->cancelMaxAdvanceEvent();
+    this->schedulerModule->maxAdvEvent->setCtrlType(ControlType::MaxAdvance);
+    if (maxAdvance >= simTime().dbl()) {
+        this->schedulerModule->maxAdvEvent->setArrival(
+          schedulerModule->getId(), SELF_MESSAGE, maxAdvance);
+        getSimulation()->getFES()->insert(this->schedulerModule->maxAdvEvent);
+        log("CosimaScheduler: max advanced event inserted for time " +
+            maxAdvance.str() + " at simtime " + simTime().str());
+    } else {
+        log("max advance " + maxAdvance.str() + " at time " + simTime().str() +
+            " not inserted");
+    }
+}
+
+void
+CosimaScheduler::handleInfoMessage(InfoMessage infoMessage)
+{
+    std::string msgId = infoMessage.msg_id();
+    SimTime maxAdvance = from_mosaik_time(infoMessage.max_advance());
+    std::string sender_name = infoMessage.sender();
+    std::string receiver_name = infoMessage.receiver();
+    auto size = infoMessage.size();
+    std::string content = infoMessage.content();
+    auto msgCreationTime = infoMessage.creation_time();
+
+    // increase messageCounter for snapshot
+    messageCounter += 1;
+
+    // look for receiver module in registered modules
+    cModule* sender = getModuleByEid(sender_name);
+    if (!sender) {
+        throw cRuntimeError(
+          "CosimaScheduler: Can't find module '%s' in modules array. Please "
+          "make sure that the number of agents matches the number of modules "
+          "in the scenario.",
+          sender_name.c_str());
+    }
+
+    // create message with parameters from coupled simulation
+    CosimaSchedulerMessage* msg = new CosimaSchedulerMessage();
+    msg->setSender(sender_name.c_str());
+    msg->setReceiver(receiver_name.c_str());
+    msg->setSize(size);
+    msg->setContent(content.c_str());
+    msg->setMsgId(msgId.c_str());
+    msg->setCreationTime(msgCreationTime);
+
+    SimTime adjustedCouplingSimTime = from_mosaik_time(infoMessage.sim_time());
+
+    log("Cosima Scheduler received message with sender: " + sender_name +
+        " for simTime " + adjustedCouplingSimTime.str() + " and id " + msgId);
+
+    // schedule message as an event at the sender module
+    msg->setArrival(sender->getId(), SELF_MESSAGE, adjustedCouplingSimTime);
+    getSimulation()->getFES()->insert(msg);
+    eventScheduled = true;
+    log("CosimaScheduler: message with sender " + sender_name + " and id " +
+        msgId + " inserted.");
+    // schedule max advance event
+    this->schedulerModule->cancelMaxAdvanceEvent();
+    this->schedulerModule->maxAdvEvent->setCtrlType(ControlType::MaxAdvance);
+    if (maxAdvance >= simTime().dbl()) {
+        this->schedulerModule->maxAdvEvent->setArrival(
+          this->schedulerModule->getId(), SELF_MESSAGE, maxAdvance);
+        getSimulation()->getFES()->insert(this->schedulerModule->maxAdvEvent);
+        log("CosimaScheduler: max advanced event inserted for time " +
+            maxAdvance.str() + " at simtime " + simTime().str());
+    } else {
+        log("max advance " + maxAdvance.str() + " at time " + simTime().str() +
+            " not inserted");
+    }
+}
+
+void
+CosimaScheduler::handleSynchronizationMessage(
+  SynchronisationMessage syncMessage)
+{
+    if (syncMessage.msg_type() == SynchronisationMessage_MsgType_WAITING) {
+        std::string msgId = syncMessage.msg_id();
+        log("CosimaScheduler: received waiting message with Id " + msgId);
+        // Pretend to have an inserted event to not longer wait for messages
+        auto waitingMsgTime = from_mosaik_time(syncMessage.sim_time());
+        auto maxAdvance = from_mosaik_time(syncMessage.max_advance());
+        log("waiting msg time " + waitingMsgTime.str() + " sim time " +
+            simTime().str() + " max advance " + maxAdvance.str());
+
+        // schedule max advance event
+        schedulerModule->cancelMaxAdvanceEvent();
+        schedulerModule->maxAdvEvent->setCtrlType(ControlType::MaxAdvance);
+        if (maxAdvance >= simTime().dbl()) {
+            schedulerModule->maxAdvEvent->setArrival(
+              schedulerModule->getId(), -1, maxAdvance);
+            getSimulation()->getFES()->insert(schedulerModule->maxAdvEvent);
+            log("CosimaScheduler: max advanced event inserted for time " +
+                maxAdvance.str() + " at simtime " + simTime().str());
+            if (waitingMsgTime >= simTime().dbl() or untilReached) {
+                log("CosimaScheduler: continue simulation.");
+                eventScheduled = true;
+            } else {
+                log("CosimaScheduler: continue waiting at time " +
+                    simTime().str());
+                informCoupledSimulationAboutWaiting();
+            }
+        } else {
+            log("max advance " + maxAdvance.str() + " at time " +
+                simTime().str() + " not inserted");
+            log("CosimaScheduler: continue waiting at time " + simTime().str());
+            informCoupledSimulationAboutWaiting();
+        }
+    }
+}
+
+void
+CosimaScheduler::handleInfrastructureMessage(
+  InfrastructureMessage infrastructureMessage,
+  std::vector disconnectModules,
+  std::vector reconnectModules)
+{
+    auto adjustedCouplingSimTime =
+      from_mosaik_time(infrastructureMessage.sim_time());
+    auto msgId = infrastructureMessage.msg_id();
+    switch (infrastructureMessage.msg_type()) {
+        case InfrastructureMessage_MsgType_DISCONNECT:
+            log("CosimaScheduler: disconnect event inserted for simtime " +
+                adjustedCouplingSimTime.str() + " for " +
+                infrastructureMessage.change_module() + ".");
+            disconnectModules.push_back(infrastructureMessage.change_module());
+            break;
+
+        case InfrastructureMessage_MsgType_RECONNECT:
+            log("CosimaScheduler: reconnect event inserted for simtime " +
+                adjustedCouplingSimTime.str() + " for " +
+                infrastructureMessage.change_module() + ".");
+            reconnectModules.push_back(infrastructureMessage.change_module());
+            break;
+
+        default:
+            break;
+    }
+}
+
+void
+CosimaScheduler::handleTrafficMessage(TrafficMessage trafficMessage)
+{
+    CosimaCtrlEvent* trafficEvent = new CosimaCtrlEvent();
+    trafficEvent->setCtrlType(Traffic);
+    trafficEvent->setSource(trafficMessage.source().c_str());
+    trafficEvent->setDestination(trafficMessage.destination().c_str());
+    trafficEvent->setStart(trafficMessage.start());
+    trafficEvent->setStop(trafficMessage.stop());
+    trafficEvent->setInterval(trafficMessage.interval());
+    trafficEvent->setPacketLength(trafficMessage.packet_length());
+    auto arrivalTime = from_mosaik_time(trafficMessage.start());
+    trafficEvent->setArrival(
+      scenarioManager->getId(), SELF_MESSAGE, arrivalTime);
+    log("CosimaScheduler: traffic event inserted for simtime " +
+        arrivalTime.str() + " for " + trafficMessage.source() + " to " +
+        trafficMessage.destination() + ".");
+    getSimulation()->getFES()->insert(trafficEvent);
+    eventScheduled = true;
+}
+
+void
+CosimaScheduler::handleAttackMessage(AttackMessage attackMessage)
+{
+    AttackEvent* attackEvent = new AttackEvent();
+    if (attackMessage.msg_type() == AttackMessage_MsgType_PACKET_DELAY) {
+        attackEvent->setAttackType(PacketDelay);
+    } else if (attackMessage.msg_type() == AttackMessage_MsgType_PACKET_DROP) {
+        attackEvent->setAttackType(PacketDrop);
+    } else if (attackMessage.msg_type() ==
+               AttackMessage_MsgType_PACKET_FALSIFICATION) {
+        attackEvent->setAttackType(PacketFalsification);
+    }
+    attackEvent->setAttacked_module(attackMessage.attacked_module().c_str());
+    attackEvent->setStart(attackMessage.start());
+    attackEvent->setStop(attackMessage.stop());
+    double attackProbability = attackMessage.attack_probability();
+    attackEvent->setProbability(attackProbability);
+    attackEvent->setArrival(scenarioManager->getId(), SELF_MESSAGE, simTime());
+    getSimulation()->getFES()->insert(attackEvent);
+}
+
+int
+CosimaScheduler::handleMsgFromCoupledSimulation(std::vector data)
+{
+    if (data.size() == 0) {
+        return 0;
+    }
+    GOOGLE_PROTOBUF_VERIFY_VERSION;
+    CosimaMsgGroup pmsg_group;
+    auto success = pmsg_group.ParseFromString(data.data());
+
+    std::vector disconnectModules;
+    std::vector reconnectModules;
+
+    auto adjustedCouplingSimTime = 0.0;
+
+    for (InitialMessage msg : pmsg_group.initial_messages()) {
+        this->handleInitialMessage(msg);
+    }
+
+    for (InfoMessage msg : pmsg_group.info_messages()) {
+        this->handleInfoMessage(msg);
+    }
+
+    for (SynchronisationMessage msg : pmsg_group.synchronisation_messages()) {
+        this->handleSynchronizationMessage(msg);
+    }
+
+    for (InfrastructureMessage msg : pmsg_group.infrastructure_messages()) {
+        this->handleInfrastructureMessage(
+          msg, disconnectModules, reconnectModules);
+    }
+
+    for (TrafficMessage msg : pmsg_group.traffic_messages()) {
+        this->handleTrafficMessage(msg);
+    }
+
+    for (AttackMessage msg : pmsg_group.attack_messages()) {
+        this->handleAttackMessage(msg);
+    }
+
+    if (disconnectModules.size() > 0) {
+        CosimaCtrlEvent* disconnectEvent = new CosimaCtrlEvent();
+        disconnectEvent->setModuleNamesArraySize(disconnectModules.size());
+        disconnectEvent->setCtrlType(Disconnect);
+        auto counter = 0;
+        for (const auto& module : disconnectModules) {
+            disconnectEvent->setModuleNames(counter, module.c_str());
+            counter++;
+        }
+        // TODO: Get `adjustedCouplingSimTime` from the relevant messages
+        disconnectEvent->setArrival(
+          this->scenarioManager->getId(), -1, adjustedCouplingSimTime);
+        getSimulation()->getFES()->insert(disconnectEvent);
+        eventScheduled = true;
+    }
+
+    if (reconnectModules.size() > 0) {
+        CosimaCtrlEvent* reconnectEvent = new CosimaCtrlEvent();
+        reconnectEvent->setCtrlType(Reconnect);
+        reconnectEvent->setModuleNamesArraySize(reconnectModules.size());
+        auto counter = 0;
+        for (const auto& module : reconnectModules) {
+            reconnectEvent->setModuleNames(counter, module.c_str());
+            counter++;
+        }
+        // TODO: Get `adjustedCouplingSimTime` from the relevant messages
+        reconnectEvent->setArrival(
+          scenarioManager->getId(), -1, adjustedCouplingSimTime);
+        getSimulation()->getFES()->insert(reconnectEvent);
+        eventScheduled = true;
+    }
+
+    return (pmsg_group.number_of_message_groups());
+}
+
+void
+CosimaScheduler::informCoupledSimulationAboutWaiting()
+{
+    CosimaCtrlEvent* waitingEvent = new CosimaCtrlEvent();
+    waitingEvent->setCtrlType(ContinueWaiting);
+    sendToCoupledSimulation(waitingEvent);
+}
+
+void
+CosimaScheduler::receive()
+{
+    while (true) {
+        auto returnValue =
+          std::async(std::launch::async, Receiver(), listenerSocket).get();
+        if (strlen(returnValue.data()) != 0) {
+            int numberOfMsgGroups = handleMsgFromCoupledSimulation(returnValue);
+            for (int i = 0; i < numberOfMsgGroups - 1; i++) {
+                auto returnValue =
+                  std::async(std::launch::async, Receiver(), listenerSocket)
+                    .get();
+                handleMsgFromCoupledSimulation(returnValue);
+            }
+            return;
+        }
+    }
+}
+
+cEvent*
+CosimaScheduler::guessNextEvent()
+{
+    return (sim->getFES()->peekFirst());
+}
+
+void
+CosimaScheduler::handleIcmpError(omnetpp::cEvent* event)
+{
+    log("error msg received");
+    if (event->isMessage()) {
+        omnetpp::cMessage* msg = dynamic_cast(event);
+        if (typeid(*msg) == typeid(inet::Packet)) {
+            inet::Packet* packet;
+            packet = dynamic_cast(msg);
+            inet::b offset = inet::b(0); // start from the beginning
+            bool foundHeader = false;
+            while (auto chunk =
+                     packet->peekAt(offset)->dupShared()) { // for each chunk
+                if (foundHeader) {
+                    break;
+                }
+                auto length = chunk->getChunkLength();
+                if (chunk->getClassName() == std::string("inet::Ipv4Header")) {
+                    foundHeader = true;
+                    int id = packet->peekAt(offset, length)
+                               ->getIdentification();
+                    inet::L3AddressResolver addressResolver;
+                    cModule* sourceModule = addressResolver.findHostWithAddress(
+                      packet->peekAt(offset, length)
+                        ->getSourceAddress());
+                    if (sourceModule != nullptr) {
+                        log("ICMP error: id: " + std::to_string(id) +
+                            " address: " +
+                            packet->peekAt(offset, length)
+                              ->getSourceAddress()
+                              .str() +
+                            " module: " + sourceModule->getName());
+                        if (getModuleByEid(sourceModule->getName()) ==
+                            nullptr) {
+                            break;
+                        }
+                        log("CosimaScheduler: There was an error. "
+                            "Send notification "
+                            "message to coupled simulation. ");
+                        CosimaSchedulerMessage* notification_message =
+                          new CosimaSchedulerMessage();
+                        notification_message->setTransmission_error(true);
+                        notification_message->setConnection_change_successful(
+                          true);
+                        notification_message->setSender(
+                          sourceModule->getName());
+                        sendToCoupledSimulation(notification_message);
+                    }
+
+                } else {
+                    offset += chunk->getChunkLength();
+                }
+            }
+        }
+    }
+}
+
+cEvent*
+CosimaScheduler::takeNextEvent()
+{
+    if (!initialMessageReceived) {
+        log("Waiting for connection");
+        std::this_thread::sleep_for(std::chrono::milliseconds(10));
+        return nullptr;
+    }
+
+    // calculate target time
+    cEvent* event = sim->getFES()->peekFirst();
+    if (!event) {
+        if (untilReached) {
+            log("CosimaScheduler: reached until time in coupled simulation.");
+            endSimulation();
+        }
+        return nullptr;
+    }
+
+    try {
+        // type 3 means: destination unreachable
+        // code 0 means: destination network unreachable
+        if (strcmp(event->getName(), "ICMP-error-#1-type3-code0") == 0) {
+            handleIcmpError(event);
+        };
+    } catch (...) {
+        log("CosimaScheduler: couldn't find host");
+    }
+
+    // use time of next event
+    simtime_t eventSimtime = event->getArrivalTime();
+    if (eventSimtime < lastEventTime) {
+        log("ATTENTION! CosimaScheduler: try to execute event for "
+            "simtime " +
+            eventSimtime.str() + ", but last event was at time " +
+            lastEventTime.str());
+        throw cRuntimeError("Wrong simulation order. Please contact the "
+                            "Cosima Developer Team: "
+                            "https://cosima.offis.de/pages/contact");
+    }
+    lastEventTime = eventSimtime;
+
+    if (not eventScheduled) {
+        receive();
+    }
+
+
+    // remove event from FES and return it
+    cEvent* tmp = sim->getFES()->removeFirst();
+    ASSERT(tmp == event);
+    return (event);
+}
+
+void
+CosimaScheduler::putBackEvent(cEvent* event)
+{
+    sim->getFES()->putBackFirst(event);
+}
+
+void
+CosimaScheduler::writeSimulationSnapshot()
+{
+    // write snapshot to file
+    eventnumber_t eventNumber = getSimulation()->getEventNumber();
+    std::ofstream snapshotFile;
+    snapshotFile.open("../tests/integration_tests/snapshot.txt");
+    snapshotFile << eventNumber << " " << messageCounter << " " << errorCounter
+                 << " " << maxAdvanceCounter << " " << disconnectCounter << " "
+                 << reconnectCounter << " " << lastEventTime.str();
+    snapshotFile.close();
+}
+
+void
+CosimaScheduler::endSimulation()
+{
+    writeSimulationSnapshot();
+    log("CosimaScheduler: end simulation");
+    getSimulation()->callFinish();
+    getSimulation()->getActiveEnvir()->alert("End of simulation");
+}
+
+void
+CosimaScheduler::sendMsgGroupToCoupledSimulation(bool isWaitingMsg)
+{
+    std::list msgGroups;
+    CosimaMsgGroup msgGroup;
+
+    msgGroup.set_current_time_step(currentStepInMessage);
+
+    std::list newMessagesList;
+    if (isWaitingMsg) {
+        newMessagesList.push_back(messages.back());
+    } else {
+        std::copy(messages.begin(),
+                  messages.end(),
+                  std::back_inserter(newMessagesList));
+        messages.clear();
+        lastStepInMessage = currentStepInMessage;
+    }
+
+    auto length = newMessagesList.size();
+    if (length == 0) {
+        return;
+    }
+
+    int index = 0;
+
+    int sock = 0, valread, client_fd;
+    struct sockaddr_in serv_addr;
+
+    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+        printf("\n Socket creation error \n");
+        return;
+    }
+
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_port = htons(4243);
+
+    // Convert IPv4 and IPv6 addresses from text to binary
+    // form
+    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
+        printf("\nInvalid address/ Address not supported \n");
+        return;
+    }
+
+    if ((client_fd = connect(
+           sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))) < 0) {
+        printf("\nConnection Failed \n");
+        return;
+    }
+    for (auto message : newMessagesList) {
+        auto byteSize = message.getByteSize();
+
+        if (msgGroup.ByteSize() + byteSize >=
+            (MAX_BYTE_SIZE_PER_MSG -
+             100)) { // 3 bytes for "END" and 3 bytes for size
+            // message size is outside boundaries -> add message group to list
+            // and make new message group
+            CosimaMsgGroup msgGroupCopy;
+            msgGroupCopy.CopyFrom(msgGroup);
+            msgGroups.push_back(msgGroupCopy);
+            msgGroup.Clear();
+            msgGroup.set_current_time_step(currentStepInMessage);
+        }
+        msgGroup = message.addMessageToMsgGroup(msgGroup);
+        msgGroup.set_number_of_messages(length);
+        if (index == length - 1) {
+            // is last saved message -> set flag and add to list
+            msgGroups.push_back(msgGroup);
+        }
+        index++;
+    }
+    for (auto msgGroup : msgGroups) {
+        msgGroup.set_number_of_message_groups(msgGroups.size());
+
+        // serialize message
+        std::string msg;
+        msgGroup.SerializeToString(&msg);
+        msg += "END";
+        int numOfBytesbefore = strlen(msg.c_str());
+
+        msg.insert(msg.end(), MAX_BYTE_SIZE_PER_MSG - msg.size(), ' ');
+        int numOfBytes = strlen(msg.c_str());
+
+        if ((numOfBytes) != MAX_BYTE_SIZE_PER_MSG) {
+            throw cRuntimeError("CosimaScheduler: number of bytes is not max "
+                                "byte size per msg");
+        }
+
+        // send message over TCP socket
+        std::future asyncSend =
+          std::async(send, sock, msg.c_str(), numOfBytes, 0);
+        size_t size = asyncSend.get();
+        msg.clear();
+        std::this_thread::sleep_for(std::chrono::milliseconds(100));
+    }
+    close(sock);
+    receive();
+}
+
+void
+CosimaScheduler::setUntilReached(bool untilReachedValue)
+{
+    untilReached = untilReachedValue;
+}
+
+bool
+CosimaScheduler::getUntilReached()
+{
+    return untilReached;
+}
+
+void
+CosimaScheduler::setInitialMessageReceived(bool value)
+{
+    initialMessageReceived = value;
+}
+
+void
+CosimaScheduler::sendToCoupledSimulation(cMessage* reply)
+{
+    if (reply == nullptr) {
+        throw cRuntimeError("CosimaScheduler: Message is nullptr");
+    }
+    // round up current simTime
+    auto currentStep = 0U;
+    currentStep = ceil(simTime().dbl() * 1000);
+    auto currentStep_d = (currentStep * 1.0) / 1000;
+    CosimaCtrlEvent* replyEvent;
+
+    auto scheduleMessage = true;
+    if (typeid(*reply) == typeid(CosimaCtrlEvent)) {
+        replyEvent = dynamic_cast(reply);
+        if (replyEvent->getCtrlType() == ContinueWaiting) {
+            scheduleMessage = false;
+        }
+    }
+    if (scheduleMessage) {
+        if (currentStep == lastStepInMessage) {
+            currentStep += 1;
+            currentStep_d = (currentStep * 1.0) / 1000;
+        }
+        if (currentStepInMessage == currentStep) {
+            log("CosimaScheduler: request to send message for the same step " +
+                std::to_string(currentStep) + " back to coupled simulation.");
+        } else {
+            // get scheduler module
+            CosimaSchedulerModule* schedulerModuleObject =
+              dynamic_cast(schedulerModule);
+            CosimaCtrlEvent* endOfStepEvent =
+              new CosimaCtrlEvent("send message to coupled simulation");
+            endOfStepEvent->setCtrlType(ControlType::EndOfStep);
+            endOfStepEvent->setArrival(
+              schedulerModule->getId(), -1, currentStep_d);
+            getSimulation()->getFES()->insert(endOfStepEvent);
+            currentStepInMessage = currentStep;
+            log("CosimaScheduler: insert event 'send message to coupled "
+                "simulation' "
+                "for time " +
+                std::to_string(currentStep_d));
+        }
+    }
+
+    if (typeid(*reply) == typeid(CosimaSchedulerMessage)) {
+        CosimaSchedulerMessage* replyMsg =
+          dynamic_cast(reply);
+
+        // get message content
+        auto sender = replyMsg->getSender();
+        auto receiver = replyMsg->getReceiver();
+        auto content = replyMsg->getContent();
+        auto msgId = replyMsg->getMsgId();
+        auto creationTime = replyMsg->getCreationTime();
+        auto isFalsified = replyMsg->getFalsified();
+
+        std::stringstream logContent;
+
+        if (replyMsg->getTransmission_error()) {
+            SynchronisationMessage syncMessage;
+            // SynchronisationMessage* syncMessage =
+            // pmsg_group.add_synchronisation_messages();
+
+            syncMessage.set_msg_type(
+              SynchronisationMessage_MsgType_TRANSMISSION_ERROR);
+            syncMessage.set_timeout(replyMsg->getTimeout());
+            syncMessage.set_timeout_msg_id(replyMsg->getMsgId());
+
+            std::stringstream errorCounterStr;
+            errorCounterStr << errorCounter;
+            auto mId = "ErrorMessage_" + errorCounterStr.str();
+            syncMessage.set_msg_id(mId);
+            errorCounter += 1;
+
+            Message message;
+            message.setMessage(syncMessage);
+            messages.push_back(message);
+
+            logContent
+              << "CosimaScheduler: send notification for transmission error "
+                 "for message with sender "
+              << sender << " and receiver " << receiver << " and messageId "
+              << replyMsg->getMsgId() << " as message " << mId
+              << " back to coupled simulation. ";
+            log(logContent.str());
+            logContent.str("");
+        } else if (replyMsg->getDisconnected_event()) {
+            InfrastructureMessage infrastructureMessage;
+
+            infrastructureMessage.set_msg_type(
+              InfrastructureMessage_MsgType_DISCONNECT);
+
+            std::stringstream disconnectCounterStr;
+            disconnectCounterStr << disconnectCounter;
+            auto mId =
+              "DisconnectNotificationMessage_" + disconnectCounterStr.str();
+            infrastructureMessage.set_msg_id(mId);
+            infrastructureMessage.set_sim_time(currentStep);
+            infrastructureMessage.set_connection_change_successful(
+              replyMsg->getConnection_change_successful());
+            disconnectCounter += 1;
+
+            Message message;
+            message.setMessage(infrastructureMessage);
+            messages.push_back(message);
+
+            logContent << "CosimaScheduler: send notification for disconnect "
+                          "for client "
+                       << sender << " and id " << mId
+                       << " back to coupled simulation. ";
+            log(logContent.str());
+            logContent.str("");
+        } else if (replyMsg->getReconnected_event()) {
+            InfrastructureMessage infrastructureMessage;
+
+            infrastructureMessage.set_msg_type(
+              InfrastructureMessage_MsgType_RECONNECT);
+            std::stringstream reconnectCounterStr;
+            reconnectCounterStr << reconnectCounter;
+            auto mId =
+              "ReconnectNotificationMessage_" + reconnectCounterStr.str();
+            infrastructureMessage.set_msg_id(mId);
+            infrastructureMessage.set_sim_time(currentStep);
+            infrastructureMessage.set_connection_change_successful(
+              replyMsg->getConnection_change_successful());
+            reconnectCounter += 1;
+
+            Message message;
+            message.setMessage(infrastructureMessage);
+            messages.push_back(message);
+
+            logContent << "CosimaScheduler: send notification for reconnect "
+                          "for client "
+                       << sender << " and id " << mId
+                       << " back to coupled simulation. ";
+            log(logContent.str());
+            logContent.str("");
+        } else {
+            InfoMessage infoMessage;
+
+            infoMessage.set_sender(sender);
+            infoMessage.set_receiver(receiver);
+            infoMessage.set_content(content);
+            infoMessage.set_sim_time(currentStep);
+            infoMessage.set_msg_id(msgId);
+            infoMessage.set_creation_time(creationTime);
+            infoMessage.set_is_falsified(isFalsified);
+
+            Message message;
+            message.setMessage(infoMessage);
+            messages.push_back(message);
+
+            logContent << "CosimaScheduler: send message with sender " << sender
+                       << " and current step " << currentStep
+                       << " back to coupled simulation.";
+            log(logContent.str());
+        }
+
+    } else if (typeid(*reply) == typeid(CosimaCtrlEvent)) {
+        if (replyEvent->getCtrlType() == ContinueWaiting) {
+            SynchronisationMessage syncMessage;
+
+            syncMessage.set_msg_type(SynchronisationMessage_MsgType_WAITING);
+            syncMessage.set_sim_time(currentStep);
+
+            Message message;
+            message.setMessage(syncMessage);
+            messages.push_back(message);
+
+            log("CosimaScheduler: send message with waiting info back to "
+                "coupled "
+                "simulation");
+            sendMsgGroupToCoupledSimulation(false);
+
+        } else if (replyEvent->getCtrlType() == MaxAdvance) {
+            SynchronisationMessage syncMessage;
+
+            syncMessage.set_msg_type(
+              SynchronisationMessage_MsgType_MAX_ADVANCE);
+
+            std::stringstream maxAdvanceCounterStr;
+            maxAdvanceCounterStr << maxAdvanceCounter;
+            auto mId = "MaxAdvanceMessage_" + maxAdvanceCounterStr.str();
+            syncMessage.set_msg_id(mId);
+            syncMessage.set_sim_time(currentStep);
+            maxAdvanceCounter += 1;
+
+            Message message;
+            message.setMessage(syncMessage);
+            messages.push_back(message);
+
+            log("CosimaScheduler: send message with max advance info back to "
+                "coupled "
+                "simulation with Message id " +
+                mId);
+        }
+    }
+}
diff --git a/cosima_omnetpp_project/modules/CosimaScheduler.h b/omnetpp/modules/CosimaScheduler.h
similarity index 71%
rename from cosima_omnetpp_project/modules/CosimaScheduler.h
rename to omnetpp/modules/CosimaScheduler.h
index 109a0e9..fc4ae42 100644
--- a/cosima_omnetpp_project/modules/CosimaScheduler.h
+++ b/omnetpp/modules/CosimaScheduler.h
@@ -10,7 +10,9 @@
  *  can be inserted into the simulation as events.
  *
  */
+#pragma once
 
+#include 
 #ifndef __COSIMASCHEDULER_H__
 #define __COSIMASCHEDULER_H__
 
@@ -18,6 +20,10 @@
 #include 
 
 #include "../messages/CosimaSchedulerMessage_m.h"
+#include "../messages/message.pb.h"
+
+class CosimaSchedulerModule;
+class CosimaScenarioManager;
 
 class CosimaScheduler : public omnetpp::cScheduler
 {
@@ -31,12 +37,12 @@ class CosimaScheduler : public omnetpp::cScheduler
      * Helper functions for testing.
      */
     std::list getModuleList();
-    omnetpp::cModule *getSchedulerModule() { return schedulerModule; }
+    CosimaSchedulerModule *getSchedulerModule() { return schedulerModule; }
     bool socketToCoupledSimulationInitialized() { return listenerSocket != -1; }
 
 protected:
-    omnetpp::cModule *schedulerModule;
-    omnetpp::cModule *scenarioManager;
+    CosimaSchedulerModule *schedulerModule;
+    CosimaScenarioManager *scenarioManager;
 
     // save time of last event
     omnetpp::simtime_t lastEventTime;
@@ -47,15 +53,10 @@ class CosimaScheduler : public omnetpp::cScheduler
     SOCKET listenerSocket;
 
     // registered modules that represent agents in coupled simulation
-    int numModules;
-    std::list modules = {};
+    std::map modules = {};
 
     std::list attackModules = {};
 
-    // event at socket
-    omnetpp::cMessage *socketEvent;
-
-
     /**
      * Initialize socket in order to listen to incoming connections from coupled simulation.
      */
@@ -80,7 +81,7 @@ class CosimaScheduler : public omnetpp::cScheduler
     /**
      * Return a description for the GUI.
      */
-    virtual std::string info() const override;
+    virtual std::string str() const override;
 
     /**
      * Called at the beginning of a simulation run.
@@ -108,11 +109,11 @@ class CosimaScheduler : public omnetpp::cScheduler
     void log(std::string info, std::string logLevel);
 
     /**
-     * To be called from the module which wishes to receive data from the
-     * socket. The method must be called from the module's initialize()
-     * function.
+     * Use the given `CosimaSchedulerModule` as the scheduler module for this
+     * simulation. This method should be called once from a
+     * `CosimaSchedulerModule`'s `initialize` method.
      */
-    virtual void setInterfaceModule(omnetpp::cModule *module, bool isCosimaSchedulerModule);
+    virtual void setSchedulerModule(CosimaSchedulerModule* mod);
 
     /***
      * Register network layer for attack at CosimaScheduler.
@@ -123,12 +124,16 @@ class CosimaScheduler : public omnetpp::cScheduler
     /**
      * Register scenario manager at scheduler module.
      */
-    virtual void setScenarioManager(omnetpp::cModule *manager);
+    virtual void setScenarioManager(CosimaScenarioManager *manager);
 
     /**
-     * To be called within the scheduler to add module to list of modules.
+     * Make a simple module available to mosaik using the entity ID `eid`.
+     * Whenever data arrives for that entity, it will be scheduled as a self-
+     * message of type `CosimaSchedulerMessage` at the given module.
+     * This method should be called in the registered module's `initialize`
+     * method.
      */
-    virtual void addModule(omnetpp::cModule *module);
+    virtual void registerModule(std::string eid, omnetpp::cSimpleModule *module);
 
     /**
      * Searches in registered modules for module with given port and returns name of module.
@@ -138,9 +143,10 @@ class CosimaScheduler : public omnetpp::cScheduler
     virtual std::string getModuleNameFromPort(int port);
 
     /**
-     * To be called to get receiver module from message.
+     * Find the (registered) App module based on the name of the client
+     * containing it.
      */
-    virtual omnetpp::cModule *getReceiverModule(std::string module_name);
+    virtual omnetpp::cSimpleModule *getModuleByEid(std::string module_name);
     omnetpp::cModule *getAttackNetworkLayerModule(std::string module_name);
 
 
@@ -194,6 +200,16 @@ class CosimaScheduler : public omnetpp::cScheduler
      */
     bool getUntilReached();
 
+private:
+    void handleInitialMessage(InitialMessage);
+    void handleInfoMessage(InfoMessage);
+    void handleSynchronizationMessage(SynchronisationMessage);
+    void handleInfrastructureMessage(InfrastructureMessage, std::vector, std::vector);
+    void handleTrafficMessage(TrafficMessage);
+    void handleAttackMessage(AttackMessage);
+
+    void handleIcmpError(omnetpp::cEvent*);
+
 };
 
 #endif
diff --git a/cosima_omnetpp_project/modules/CosimaSchedulerModule.cc b/omnetpp/modules/CosimaSchedulerModule.cc
similarity index 59%
rename from cosima_omnetpp_project/modules/CosimaSchedulerModule.cc
rename to omnetpp/modules/CosimaSchedulerModule.cc
index 6b1bdc3..ee2f15a 100644
--- a/cosima_omnetpp_project/modules/CosimaSchedulerModule.cc
+++ b/omnetpp/modules/CosimaSchedulerModule.cc
@@ -4,15 +4,14 @@
  */
 #include "CosimaSchedulerModule.h"
 
-#include 
 #include 
 
 #include "../modules/CosimaScheduler.h"
-#include "../messages/CosimaSchedulerMessage_m.h"
 
 Define_Module(CosimaSchedulerModule);
 
-CosimaSchedulerModule::CosimaSchedulerModule() {
+CosimaSchedulerModule::CosimaSchedulerModule()
+{
     scheduler = nullptr;
     maxAdvEvent = new CosimaCtrlEvent("hello max advanced");
     maxAdvEvent->setCtrlType(ControlType::MaxAdvance);
@@ -20,26 +19,33 @@ CosimaSchedulerModule::CosimaSchedulerModule() {
     untilEvent->setCtrlType(ControlType::Until);
 }
 
-CosimaSchedulerModule::~CosimaSchedulerModule() {
+CosimaSchedulerModule::~CosimaSchedulerModule()
+{
     cancelMaxAdvanceEvent();
-    delete(maxAdvEvent);
+    delete (maxAdvEvent);
     cancelUntilEvent();
-    delete(untilEvent);
+    delete (untilEvent);
 }
 
-
-void CosimaSchedulerModule::initialize(int stage){
-    scheduler = check_and_cast(getSimulation()->getScheduler());
+void
+CosimaSchedulerModule::initialize(int stage)
+{
+    scheduler =
+      check_and_cast(getSimulation()->getScheduler());
     // register module at scheduler
-    scheduler->setInterfaceModule(this, true);
+    scheduler->setSchedulerModule(this);
 }
 
-void CosimaSchedulerModule::handleMessage(cMessage *msg){
+void
+CosimaSchedulerModule::handleMessage(cMessage* msg)
+{
     if (typeid(*msg) == typeid(CosimaCtrlEvent)) {
-        CosimaCtrlEvent *event = dynamic_cast(msg);
+        CosimaCtrlEvent* event = dynamic_cast(msg);
         if (event->getCtrlType() == 0) {
             // is max advance event
-            scheduler->log("CosimaSchedulerModule: received max advance event at time " + simTime().str());
+            scheduler->log(
+              "CosimaSchedulerModule: received max advance event at time " +
+              simTime().str());
             scheduler->sendToCoupledSimulation(msg);
         } else if (event->getCtrlType() == 2) {
             // is until event
@@ -48,25 +54,29 @@ void CosimaSchedulerModule::handleMessage(cMessage *msg){
             scheduler->setUntilReached(true);
         } else {
             // is message group event
-            scheduler->log("CosimaSchedulerModule: received event in order to send info back to coupled simulation at time " + simTime().str());
+            scheduler->log("CosimaSchedulerModule: received event in order to "
+                           "send info back to coupled simulation at time " +
+                           simTime().str());
             auto currentStep = 0U;
-            currentStep = ceil(simTime().dbl()*1000);
+            currentStep = ceil(simTime().dbl() * 1000);
             scheduler->sendMsgGroupToCoupledSimulation(false);
             delete msg;
         }
     } else {
-        scheduler->log("CosimaSchedulerModule: received unknown message.", "warning");
+        scheduler->log("CosimaSchedulerModule: received unknown message.",
+                       "warning");
         delete msg;
     }
-
-
 }
 
-void CosimaSchedulerModule::cancelMaxAdvanceEvent() {
+void
+CosimaSchedulerModule::cancelMaxAdvanceEvent()
+{
     cancelEvent(maxAdvEvent);
 }
 
-void CosimaSchedulerModule::cancelUntilEvent() {
+void
+CosimaSchedulerModule::cancelUntilEvent()
+{
     cancelEvent(untilEvent);
 }
-
diff --git a/cosima_omnetpp_project/modules/CosimaSchedulerModule.h b/omnetpp/modules/CosimaSchedulerModule.h
similarity index 98%
rename from cosima_omnetpp_project/modules/CosimaSchedulerModule.h
rename to omnetpp/modules/CosimaSchedulerModule.h
index 16c2c00..4333fe4 100644
--- a/cosima_omnetpp_project/modules/CosimaSchedulerModule.h
+++ b/omnetpp/modules/CosimaSchedulerModule.h
@@ -5,6 +5,7 @@
  *  This is needed in order to schedule the max advance event.
  *
  */
+#pragma once
 
 #ifndef COSIMASCHEDULERMODULE_H_
 #define COSIMASCHEDULERMODULE_H_
diff --git a/cosima_omnetpp_project/modules/CosimaSchedulerModule.ned b/omnetpp/modules/CosimaSchedulerModule.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/CosimaSchedulerModule.ned
rename to omnetpp/modules/CosimaSchedulerModule.ned
diff --git a/cosima_omnetpp_project/modules/attacks/Attacked_Ue.ned b/omnetpp/modules/attacks/Attacked_Ue.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/attacks/Attacked_Ue.ned
rename to omnetpp/modules/attacks/Attacked_Ue.ned
diff --git a/cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.cc b/omnetpp/modules/attacks/network_layer/AttackIpv4.cc
similarity index 99%
rename from cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.cc
rename to omnetpp/modules/attacks/network_layer/AttackIpv4.cc
index 18da6fd..41b7183 100644
--- a/cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.cc
+++ b/omnetpp/modules/attacks/network_layer/AttackIpv4.cc
@@ -88,7 +88,7 @@ void AttackIpv4::handleMessageWhenUp(cMessage *msg) {
                         auto length = chunk->getChunkLength();
 
                         if (chunk->getClassName() == std::string("MosaikApplicationChunk")) {
-                            auto cosimaApplicationChunk = recvPacket->peekAt(offset, length, inet::Chunk::PeekFlag::PF_ALLOW_SERIALIZATION).get();
+                            auto cosimaApplicationChunk = recvPacket->peekAt(offset, length, inet::Chunk::PeekFlag::PF_ALLOW_REINTERPRETATION).get();
                             scheduler->log("Falsification of the message. ", "info");
                             numFalsifictions = numFalsifictions + 1;
                             const auto &payload = inet::makeShared();
diff --git a/cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.h b/omnetpp/modules/attacks/network_layer/AttackIpv4.h
similarity index 100%
rename from cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.h
rename to omnetpp/modules/attacks/network_layer/AttackIpv4.h
diff --git a/cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.ned b/omnetpp/modules/attacks/network_layer/AttackIpv4.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/attacks/network_layer/AttackIpv4.ned
rename to omnetpp/modules/attacks/network_layer/AttackIpv4.ned
diff --git a/cosima_omnetpp_project/modules/attacks/network_layer/Attack_Ipv4NetworkLayer.ned b/omnetpp/modules/attacks/network_layer/Attack_Ipv4NetworkLayer.ned
similarity index 100%
rename from cosima_omnetpp_project/modules/attacks/network_layer/Attack_Ipv4NetworkLayer.ned
rename to omnetpp/modules/attacks/network_layer/Attack_Ipv4NetworkLayer.ned
diff --git a/cosima_omnetpp_project/networks/AdHocNetwork.ned b/omnetpp/networks/AdHocNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/AdHocNetwork.ned
rename to omnetpp/networks/AdHocNetwork.ned
diff --git a/cosima_omnetpp_project/networks/AttackNetwork.ned b/omnetpp/networks/AttackNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/AttackNetwork.ned
rename to omnetpp/networks/AttackNetwork.ned
diff --git a/cosima_omnetpp_project/networks/CloudNetwork.ned b/omnetpp/networks/CloudNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/CloudNetwork.ned
rename to omnetpp/networks/CloudNetwork.ned
diff --git a/cosima_omnetpp_project/networks/DERNetwork.ned b/omnetpp/networks/DERNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/DERNetwork.ned
rename to omnetpp/networks/DERNetwork.ned
diff --git a/cosima_omnetpp_project/networks/LTE450Network.ned b/omnetpp/networks/LTE450Network.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/LTE450Network.ned
rename to omnetpp/networks/LTE450Network.ned
diff --git a/cosima_omnetpp_project/networks/LargeLTENetwork.ned b/omnetpp/networks/LargeLTENetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/LargeLTENetwork.ned
rename to omnetpp/networks/LargeLTENetwork.ned
diff --git a/cosima_omnetpp_project/networks/RingTopologyNetwork.ned b/omnetpp/networks/RingTopologyNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/RingTopologyNetwork.ned
rename to omnetpp/networks/RingTopologyNetwork.ned
diff --git a/cosima_omnetpp_project/networks/SimpleNetwork.ned b/omnetpp/networks/SimpleNetwork.ned
similarity index 93%
rename from cosima_omnetpp_project/networks/SimpleNetwork.ned
rename to omnetpp/networks/SimpleNetwork.ned
index 01cc063..db164f1 100644
--- a/cosima_omnetpp_project/networks/SimpleNetwork.ned
+++ b/omnetpp/networks/SimpleNetwork.ned
@@ -17,16 +17,16 @@ package networks;
 import inet.common.scenario.ScenarioManager;
 import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator;
 import inet.node.ethernet.Eth10M;
-import inet.node.ethernet.EtherLink;
-import inet.node.ethernet.EtherSwitch;
+import inet.node.ethernet.EthernetLink;
+import inet.node.ethernet.EthernetSwitch;
 import inet.node.inet.Router;
 import inet.node.inet.StandardHost;
-import inet.visualizer.integrated.IntegratedCanvasVisualizer;
+import inet.visualizer.canvas.integrated.IntegratedCanvasVisualizer;
 import modules.CosimaSchedulerModule;
 import modules.CosimaScenarioManager;
 
 
-channel MyEth10M extends EtherLink
+channel MyEth10M extends EthernetLink
 {
     datarate = 10Mbps;
 }
@@ -65,10 +65,10 @@ network SimpleNetwork
         router1: Router {
             @display("p=300.3,452.4");
         }
-        switch0: EtherSwitch {
+        switch0: EthernetSwitch {
             @display("p=800.8,657.8");
         }
-        switch1: EtherSwitch {
+        switch1: EthernetSwitch {
             @display("p=495.3,109.2");
         }
 
@@ -85,13 +85,13 @@ network SimpleNetwork
         router4: Router {
             @display("p=284.69998,128.7");
         }
-        switch2: EtherSwitch {
+        switch2: EthernetSwitch {
             @display("p=613.6,315.9");
         }
         client3: StandardHost {
             @display("p=1030.9,942.5");
         }
-        switch3: EtherSwitch {
+        switch3: EthernetSwitch {
             @display("p=688.32007,876.82263");
         }
     connections:
@@ -142,10 +142,10 @@ network DisconnectedClient2_SimpleNetwork
         router1: Router {
             @display("p=300.3,452.4");
         }
-        switch0: EtherSwitch {
+        switch0: EthernetSwitch {
             @display("p=800.8,657.8");
         }
-        switch1: EtherSwitch {
+        switch1: EthernetSwitch {
             @display("p=495.3,109.2");
         }
 
@@ -162,7 +162,7 @@ network DisconnectedClient2_SimpleNetwork
         router4: Router {
             @display("p=284.69998,128.7");
         }
-        switch2: EtherSwitch {
+        switch2: EthernetSwitch {
             @display("p=613.6,315.9");
         }
     connections:
@@ -210,10 +210,10 @@ network DisconnectedClient1_SimpleNetwork
         router1: Router {
             @display("p=300.3,452.4");
         }
-        switch0: EtherSwitch {
+        switch0: EthernetSwitch {
             @display("p=800.8,657.8");
         }
-        switch1: EtherSwitch {
+        switch1: EthernetSwitch {
             @display("p=495.3,109.2");
         }
 
@@ -230,7 +230,7 @@ network DisconnectedClient1_SimpleNetwork
         router4: Router {
             @display("p=284.69998,128.7");
         }
-        switch2: EtherSwitch {
+        switch2: EthernetSwitch {
             @display("p=613.6,315.9");
         }
     connections:
@@ -276,10 +276,10 @@ network SmallNetwork
         router0: Router {
             @display("p=463,359");
         }
-        switch0: EtherSwitch {
+        switch0: EthernetSwitch {
             @display("p=582,358");
         }
-        switch1: EtherSwitch {
+        switch1: EthernetSwitch {
             @display("p=307,341");
         }
 
@@ -287,7 +287,7 @@ network SmallNetwork
             @display("p=98,209");
         }
 
-        switch2: EtherSwitch {
+        switch2: EthernetSwitch {
             @display("p=543,477");
         }
     connections:
diff --git a/cosima_omnetpp_project/networks/SingleCellLTE.ned b/omnetpp/networks/SingleCellLTE.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/SingleCellLTE.ned
rename to omnetpp/networks/SingleCellLTE.ned
diff --git a/cosima_omnetpp_project/networks/StarTopologyNetwork.ned b/omnetpp/networks/StarTopologyNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/StarTopologyNetwork.ned
rename to omnetpp/networks/StarTopologyNetwork.ned
diff --git a/cosima_omnetpp_project/networks/TrafficNetwork.ned b/omnetpp/networks/TrafficNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/TrafficNetwork.ned
rename to omnetpp/networks/TrafficNetwork.ned
diff --git a/cosima_omnetpp_project/networks/WifiNetwork.ned b/omnetpp/networks/WifiNetwork.ned
similarity index 100%
rename from cosima_omnetpp_project/networks/WifiNetwork.ned
rename to omnetpp/networks/WifiNetwork.ned
diff --git a/cosima_omnetpp_project/networks/basement.xml b/omnetpp/networks/basement.xml
similarity index 100%
rename from cosima_omnetpp_project/networks/basement.xml
rename to omnetpp/networks/basement.xml
diff --git a/cosima_omnetpp_project/networks/demo.xml b/omnetpp/networks/demo.xml
similarity index 100%
rename from cosima_omnetpp_project/networks/demo.xml
rename to omnetpp/networks/demo.xml
diff --git a/cosima_omnetpp_project/networks/internetCloud.xml b/omnetpp/networks/internetCloud.xml
similarity index 100%
rename from cosima_omnetpp_project/networks/internetCloud.xml
rename to omnetpp/networks/internetCloud.xml
diff --git a/cosima_omnetpp_project/networks/lte450.xml b/omnetpp/networks/lte450.xml
similarity index 100%
rename from cosima_omnetpp_project/networks/lte450.xml
rename to omnetpp/networks/lte450.xml
diff --git a/cosima_omnetpp_project/networks/lte450_environment.xml b/omnetpp/networks/lte450_environment.xml
similarity index 100%
rename from cosima_omnetpp_project/networks/lte450_environment.xml
rename to omnetpp/networks/lte450_environment.xml
diff --git a/cosima_omnetpp_project/tests/gtest/AgentAppTcpTest.cc b/omnetpp/tests/gtest/AgentAppTcpTest.cc
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/AgentAppTcpTest.cc
rename to omnetpp/tests/gtest/AgentAppTcpTest.cc
diff --git a/cosima_omnetpp_project/tests/gtest/AgentAppUdpTest.cc b/omnetpp/tests/gtest/AgentAppUdpTest.cc
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/AgentAppUdpTest.cc
rename to omnetpp/tests/gtest/AgentAppUdpTest.cc
diff --git a/cosima_omnetpp_project/tests/gtest/MosaikScenarioManagerTest.cc b/omnetpp/tests/gtest/MosaikScenarioManagerTest.cc
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/MosaikScenarioManagerTest.cc
rename to omnetpp/tests/gtest/MosaikScenarioManagerTest.cc
diff --git a/cosima_omnetpp_project/tests/gtest/MosaikSchedulerModuleTest.cc b/omnetpp/tests/gtest/MosaikSchedulerModuleTest.cc
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/MosaikSchedulerModuleTest.cc
rename to omnetpp/tests/gtest/MosaikSchedulerModuleTest.cc
diff --git a/cosima_omnetpp_project/tests/gtest/MosaikSchedulerTest.cc b/omnetpp/tests/gtest/MosaikSchedulerTest.cc
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/MosaikSchedulerTest.cc
rename to omnetpp/tests/gtest/MosaikSchedulerTest.cc
diff --git a/cosima_omnetpp_project/tests/gtest/main_test.cc b/omnetpp/tests/gtest/main_test.cc
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/main_test.cc
rename to omnetpp/tests/gtest/main_test.cc
diff --git a/cosima_omnetpp_project/tests/gtest/main_test.h b/omnetpp/tests/gtest/main_test.h
similarity index 100%
rename from cosima_omnetpp_project/tests/gtest/main_test.h
rename to omnetpp/tests/gtest/main_test.h
diff --git a/omnetpp/util.h b/omnetpp/util.h
new file mode 100644
index 0000000..374b23b
--- /dev/null
+++ b/omnetpp/util.h
@@ -0,0 +1,10 @@
+#include 
+#include "omnetpp/simtime.h"
+
+inline omnetpp::SimTime from_mosaik_time(int mosaik_time) {
+    return mosaik_time / 1000.0;
+}
+
+inline int to_mosaik_time(omnetpp::SimTime time) {
+    return ceil(time.dbl() * 1000.0);
+}
diff --git a/cosima_core/messages/message.proto b/protobuf/message.proto
similarity index 100%
rename from cosima_core/messages/message.proto
rename to protobuf/message.proto
diff --git a/requirements.txt b/requirements.txt
index 2324adc..57b6d3f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -13,5 +13,3 @@ pytest_check==1.3.0
 setuptools==65.6.3
 simpy==3.0.13
 termcolor==2.1.1
-mango-agents==1.2.0
-mango-library==1.1.0
diff --git a/setup.py b/setup.py
index 39dc9b0..516577c 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@
     required = f.read().splitlines()
 
 this_directory = Path(__file__).parent
-long_description = (this_directory / "description_pypi.md").read_text()
+long_description = (this_directory / "README.md").read_text()
 
 setuptools.setup(
     name="cosima",
diff --git a/tests/integration_tests/snapshot.txt b/tests/integration_tests/snapshot.txt
index 670a3a8..4a21a3e 100644
--- a/tests/integration_tests/snapshot.txt
+++ b/tests/integration_tests/snapshot.txt
@@ -1 +1 @@
-631562 1495 0 1087 0 0 2.045
\ No newline at end of file
+0 0 0 0 0 0 0
\ No newline at end of file

From 7e083cdc57985910ea2c19a09adfc5df69abbc16 Mon Sep 17 00:00:00 2001
From: Eike 
Date: Mon, 7 Apr 2025 10:45:55 +0200
Subject: [PATCH 2/2] Continue refactor

---
 cosima_core/messages/message_pb2.py           | 711 ------------------
 mosaik/.python-version                        |   1 +
 cosima_core/__init__.py => mosaik/README.md   |   0
 {cosima_core/messages => mosaik}/__init__.py  |   0
 mosaik/pyproject.toml                         |  41 +
 .../results/result_1645085479.8887444.csv     |   0
 run.py => mosaik/run.py                       |   4 +-
 .../scenario_config.py                        |   0
 .../mango_communication_network.py            |   0
 mosaik/src/cosima/messages/__init__.py        |   2 +
 .../src/cosima}/messages/mango_messages.py    |   0
 mosaik/src/cosima/messages/message_pb2.py     |  54 ++
 mosaik/src/cosima/messages/message_pb2.pyi    | 157 ++++
 .../src/cosima/messages/message_pb2_grpc.py   |  24 +
 .../__init__.py => mosaik/src/cosima/py.typed |   0
 .../src/cosima/scenarios}/__init__.py         |   0
 .../scenarios/communication_scenario.py       |   0
 .../scenarios/mango/mango_cohda_scenario.py   |   0
 .../mango_direct_connection_cohda_scenario.py |   0
 .../mango/mango_direct_connection_scenario.py |   0
 .../scenarios/mango/mango_simple_scenario.py  |   0
 .../scenarios/mango/mango_units_scenario.py   |   0
 .../cosima}/scenarios/negotiation_scenario.py |   0
 .../01_simulators_and_connection_to_omnet.py  |   0
 .../02_scenario_helper_and_scenario_config.py |   0
 ...3_integrating_the_agent_framework_mango.py |   0
 .../src/cosima/simulators}/__init__.py        |   0
 .../src/cosima}/simulators/collector.py       |   0
 .../simulators/communication_simulator.py     |   8 +-
 .../simulators/ict_controller_simulator.py    |   0
 .../simulators/mango_example}/__init__.py     |   0
 .../simulators/mango_example/container_sim.py |   0
 .../simulators/mango_example/unit_agent.py    |   0
 .../simulators/mango_example/unit_role.py     |   0
 .../negotiation_example/agent_simulator.py    |   0
 .../cosima}/simulators/omnetpp_connection.py  |   0
 .../simulators/statistics_simulator.py        |   0
 .../tic_toc_example/agent_simulator.py        |   0
 .../simulators/tic_toc_example/content.csv    |   0
 .../simulators/tic_toc_example/mosaik_csv.py  |   0
 .../cosima/simulators/tutorial/__init__.py    |   0
 .../tutorial/simple_agent_simulator.py        |   0
 .../simulators/tutorial/simple_roles.py       |   0
 .../src/cosima}/util/build_omnet_project.py   |   0
 .../src/cosima}/util/general_config.py        |   0
 .../util/pysimmods_schedule_generator.py      |   0
 .../src/cosima/util/run_by_command_line.txt   |   0
 .../src/cosima}/util/scenario_setup_util.py   |   0
 .../src/cosima}/util/track_performance.py     |   0
 .../src/cosima}/util/util_functions.py        |   0
 mosaik/uv.lock                                | 565 ++++++++++++++
 .clang-format => omnetpp/.clang-format        |   0
 omnetpp/modules/CosimaScheduler.cc            |  33 +-
 omnetpp/modules/CosimaScheduler.h             |  13 +
 requirements.txt                              |  15 -
 setup.py                                      |  28 -
 56 files changed, 883 insertions(+), 773 deletions(-)
 delete mode 100644 cosima_core/messages/message_pb2.py
 create mode 100644 mosaik/.python-version
 rename cosima_core/__init__.py => mosaik/README.md (100%)
 rename {cosima_core/messages => mosaik}/__init__.py (100%)
 create mode 100644 mosaik/pyproject.toml
 rename {cosima_core => mosaik}/results/result_1645085479.8887444.csv (100%)
 rename run.py => mosaik/run.py (92%)
 rename scenario_config.py => mosaik/scenario_config.py (100%)
 rename {cosima_core => mosaik/src/cosima}/mango_direct_connection/mango_communication_network.py (100%)
 create mode 100644 mosaik/src/cosima/messages/__init__.py
 rename {cosima_core => mosaik/src/cosima}/messages/mango_messages.py (100%)
 create mode 100644 mosaik/src/cosima/messages/message_pb2.py
 create mode 100644 mosaik/src/cosima/messages/message_pb2.pyi
 create mode 100644 mosaik/src/cosima/messages/message_pb2_grpc.py
 rename cosima_core/scenarios/__init__.py => mosaik/src/cosima/py.typed (100%)
 rename {cosima_core/simulators => mosaik/src/cosima/scenarios}/__init__.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/communication_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/mango/mango_cohda_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/mango/mango_direct_connection_cohda_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/mango/mango_direct_connection_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/mango/mango_simple_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/mango/mango_units_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/negotiation_scenario.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/tutorial/01_simulators_and_connection_to_omnet.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/tutorial/02_scenario_helper_and_scenario_config.py (100%)
 rename {cosima_core => mosaik/src/cosima}/scenarios/tutorial/03_integrating_the_agent_framework_mango.py (100%)
 rename {cosima_core/simulators/mango_example => mosaik/src/cosima/simulators}/__init__.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/collector.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/communication_simulator.py (97%)
 rename {cosima_core => mosaik/src/cosima}/simulators/ict_controller_simulator.py (100%)
 rename {cosima_core/simulators/tutorial => mosaik/src/cosima/simulators/mango_example}/__init__.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/mango_example/container_sim.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/mango_example/unit_agent.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/mango_example/unit_role.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/negotiation_example/agent_simulator.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/omnetpp_connection.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/statistics_simulator.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/tic_toc_example/agent_simulator.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/tic_toc_example/content.csv (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/tic_toc_example/mosaik_csv.py (100%)
 rename cosima_core/util/run_by_command_line.txt => mosaik/src/cosima/simulators/tutorial/__init__.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/tutorial/simple_agent_simulator.py (100%)
 rename {cosima_core => mosaik/src/cosima}/simulators/tutorial/simple_roles.py (100%)
 rename {cosima_core => mosaik/src/cosima}/util/build_omnet_project.py (100%)
 rename {cosima_core => mosaik/src/cosima}/util/general_config.py (100%)
 rename {cosima_core => mosaik/src/cosima}/util/pysimmods_schedule_generator.py (100%)
 create mode 100644 mosaik/src/cosima/util/run_by_command_line.txt
 rename {cosima_core => mosaik/src/cosima}/util/scenario_setup_util.py (100%)
 rename {cosima_core => mosaik/src/cosima}/util/track_performance.py (100%)
 rename {cosima_core => mosaik/src/cosima}/util/util_functions.py (100%)
 create mode 100644 mosaik/uv.lock
 rename .clang-format => omnetpp/.clang-format (100%)
 delete mode 100644 requirements.txt
 delete mode 100644 setup.py

diff --git a/cosima_core/messages/message_pb2.py b/cosima_core/messages/message_pb2.py
deleted file mode 100644
index 0e947bf..0000000
--- a/cosima_core/messages/message_pb2.py
+++ /dev/null
@@ -1,711 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: message.proto
-
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='message.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\rmessage.proto\"\x93\x01\n\x0eInitialMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\r\n\x05until\x18\x03 \x01(\x05\x12\x11\n\tstep_size\x18\x04 \x01(\x05\x12\x15\n\rlogging_level\x18\x05 \x01(\t\x12#\n\x1bmax_byte_size_per_msg_group\x18\x06 \x01(\x05\"\xb2\x01\n\x0bInfoMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x0e\n\x06sender\x18\x04 \x01(\t\x12\x10\n\x08receiver\x18\x05 \x01(\t\x12\x0c\n\x04size\x18\x06 \x01(\x05\x12\x0f\n\x07\x63ontent\x18\x07 \x01(\t\x12\x15\n\rcreation_time\x18\x08 \x01(\x05\x12\x14\n\x0cis_falsified\x18\t \x01(\x08\"\xec\x01\n\x16SynchronisationMessage\x12\x31\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1f.SynchronisationMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x13\n\x0bmax_advance\x18\x04 \x01(\x05\x12\x0f\n\x07timeout\x18\x05 \x01(\x08\x12\x16\n\x0etimeout_msg_id\x18\x06 \x01(\t\"?\n\x07MsgType\x12\x0f\n\x0bMAX_ADVANCE\x10\x00\x12\x0b\n\x07WAITING\x10\x01\x12\x16\n\x12TRANSMISSION_ERROR\x10\x02\"\xd2\x01\n\x15InfrastructureMessage\x12\x30\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1e.InfrastructureMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x15\n\rchange_module\x18\x04 \x01(\t\x12$\n\x1c\x63onnection_change_successful\x18\x05 \x01(\x08\"(\n\x07MsgType\x12\x0e\n\nDISCONNECT\x10\x00\x12\r\n\tRECONNECT\x10\x01\"\x9d\x01\n\x0eTrafficMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x10\n\x08sim_time\x18\x02 \x01(\x05\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x10\n\x08interval\x18\x07 \x01(\x05\x12\x15\n\rpacket_length\x18\x08 \x01(\x05\"\xf5\x01\n\rAttackMessage\x12(\n\x08msg_type\x18\x01 \x01(\x0e\x32\x16.AttackMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x17\n\x0f\x61ttacked_module\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x1a\n\x12\x61ttack_probability\x18\x07 \x01(\x05\"F\n\x07MsgType\x12\x0f\n\x0bPACKET_DROP\x10\x00\x12\x18\n\x14PACKET_FALSIFICATION\x10\x01\x12\x10\n\x0cPACKET_DELAY\x10\x02\"\x81\x03\n\x0e\x43osimaMsgGroup\x12)\n\x10initial_messages\x18\x01 \x03(\x0b\x32\x0f.InitialMessage\x12#\n\rinfo_messages\x18\x02 \x03(\x0b\x32\x0c.InfoMessage\x12\x39\n\x18synchronisation_messages\x18\x03 \x03(\x0b\x32\x17.SynchronisationMessage\x12\x37\n\x17infrastructure_messages\x18\x04 \x03(\x0b\x32\x16.InfrastructureMessage\x12)\n\x10traffic_messages\x18\x05 \x03(\x0b\x32\x0f.TrafficMessage\x12\'\n\x0f\x61ttack_messages\x18\x06 \x03(\x0b\x32\x0e.AttackMessage\x12\x19\n\x11\x63urrent_time_step\x18\x07 \x01(\x05\x12 \n\x18number_of_message_groups\x18\x08 \x01(\x05\x12\x1a\n\x12number_of_messages\x18\t \x01(\x05\x62\x06proto3'
-)
-
-
-
-_SYNCHRONISATIONMESSAGE_MSGTYPE = _descriptor.EnumDescriptor(
-  name='MsgType',
-  full_name='SynchronisationMessage.MsgType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='MAX_ADVANCE', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='WAITING', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='TRANSMISSION_ERROR', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=522,
-  serialized_end=585,
-)
-_sym_db.RegisterEnumDescriptor(_SYNCHRONISATIONMESSAGE_MSGTYPE)
-
-_INFRASTRUCTUREMESSAGE_MSGTYPE = _descriptor.EnumDescriptor(
-  name='MsgType',
-  full_name='InfrastructureMessage.MsgType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DISCONNECT', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='RECONNECT', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=758,
-  serialized_end=798,
-)
-_sym_db.RegisterEnumDescriptor(_INFRASTRUCTUREMESSAGE_MSGTYPE)
-
-_ATTACKMESSAGE_MSGTYPE = _descriptor.EnumDescriptor(
-  name='MsgType',
-  full_name='AttackMessage.MsgType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='PACKET_DROP', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='PACKET_FALSIFICATION', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='PACKET_DELAY', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=1136,
-  serialized_end=1206,
-)
-_sym_db.RegisterEnumDescriptor(_ATTACKMESSAGE_MSGTYPE)
-
-
-_INITIALMESSAGE = _descriptor.Descriptor(
-  name='InitialMessage',
-  full_name='InitialMessage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg_id', full_name='InitialMessage.msg_id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='max_advance', full_name='InitialMessage.max_advance', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='until', full_name='InitialMessage.until', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='step_size', full_name='InitialMessage.step_size', index=3,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='logging_level', full_name='InitialMessage.logging_level', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='max_byte_size_per_msg_group', full_name='InitialMessage.max_byte_size_per_msg_group', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=18,
-  serialized_end=165,
-)
-
-
-_INFOMESSAGE = _descriptor.Descriptor(
-  name='InfoMessage',
-  full_name='InfoMessage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg_id', full_name='InfoMessage.msg_id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='max_advance', full_name='InfoMessage.max_advance', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sim_time', full_name='InfoMessage.sim_time', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sender', full_name='InfoMessage.sender', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='receiver', full_name='InfoMessage.receiver', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='size', full_name='InfoMessage.size', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='content', full_name='InfoMessage.content', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='creation_time', full_name='InfoMessage.creation_time', index=7,
-      number=8, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='is_falsified', full_name='InfoMessage.is_falsified', index=8,
-      number=9, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=168,
-  serialized_end=346,
-)
-
-
-_SYNCHRONISATIONMESSAGE = _descriptor.Descriptor(
-  name='SynchronisationMessage',
-  full_name='SynchronisationMessage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg_type', full_name='SynchronisationMessage.msg_type', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='msg_id', full_name='SynchronisationMessage.msg_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sim_time', full_name='SynchronisationMessage.sim_time', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='max_advance', full_name='SynchronisationMessage.max_advance', index=3,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timeout', full_name='SynchronisationMessage.timeout', index=4,
-      number=5, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timeout_msg_id', full_name='SynchronisationMessage.timeout_msg_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _SYNCHRONISATIONMESSAGE_MSGTYPE,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=349,
-  serialized_end=585,
-)
-
-
-_INFRASTRUCTUREMESSAGE = _descriptor.Descriptor(
-  name='InfrastructureMessage',
-  full_name='InfrastructureMessage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg_type', full_name='InfrastructureMessage.msg_type', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='msg_id', full_name='InfrastructureMessage.msg_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sim_time', full_name='InfrastructureMessage.sim_time', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='change_module', full_name='InfrastructureMessage.change_module', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='connection_change_successful', full_name='InfrastructureMessage.connection_change_successful', index=4,
-      number=5, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _INFRASTRUCTUREMESSAGE_MSGTYPE,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=588,
-  serialized_end=798,
-)
-
-
-_TRAFFICMESSAGE = _descriptor.Descriptor(
-  name='TrafficMessage',
-  full_name='TrafficMessage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg_id', full_name='TrafficMessage.msg_id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sim_time', full_name='TrafficMessage.sim_time', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='source', full_name='TrafficMessage.source', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='destination', full_name='TrafficMessage.destination', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='start', full_name='TrafficMessage.start', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='stop', full_name='TrafficMessage.stop', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='interval', full_name='TrafficMessage.interval', index=6,
-      number=7, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='packet_length', full_name='TrafficMessage.packet_length', index=7,
-      number=8, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=801,
-  serialized_end=958,
-)
-
-
-_ATTACKMESSAGE = _descriptor.Descriptor(
-  name='AttackMessage',
-  full_name='AttackMessage',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg_type', full_name='AttackMessage.msg_type', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='msg_id', full_name='AttackMessage.msg_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sim_time', full_name='AttackMessage.sim_time', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='attacked_module', full_name='AttackMessage.attacked_module', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='start', full_name='AttackMessage.start', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='stop', full_name='AttackMessage.stop', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='attack_probability', full_name='AttackMessage.attack_probability', index=6,
-      number=7, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _ATTACKMESSAGE_MSGTYPE,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=961,
-  serialized_end=1206,
-)
-
-
-_COSIMAMSGGROUP = _descriptor.Descriptor(
-  name='CosimaMsgGroup',
-  full_name='CosimaMsgGroup',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='initial_messages', full_name='CosimaMsgGroup.initial_messages', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='info_messages', full_name='CosimaMsgGroup.info_messages', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='synchronisation_messages', full_name='CosimaMsgGroup.synchronisation_messages', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='infrastructure_messages', full_name='CosimaMsgGroup.infrastructure_messages', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='traffic_messages', full_name='CosimaMsgGroup.traffic_messages', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='attack_messages', full_name='CosimaMsgGroup.attack_messages', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='current_time_step', full_name='CosimaMsgGroup.current_time_step', index=6,
-      number=7, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='number_of_message_groups', full_name='CosimaMsgGroup.number_of_message_groups', index=7,
-      number=8, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='number_of_messages', full_name='CosimaMsgGroup.number_of_messages', index=8,
-      number=9, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1209,
-  serialized_end=1594,
-)
-
-_SYNCHRONISATIONMESSAGE.fields_by_name['msg_type'].enum_type = _SYNCHRONISATIONMESSAGE_MSGTYPE
-_SYNCHRONISATIONMESSAGE_MSGTYPE.containing_type = _SYNCHRONISATIONMESSAGE
-_INFRASTRUCTUREMESSAGE.fields_by_name['msg_type'].enum_type = _INFRASTRUCTUREMESSAGE_MSGTYPE
-_INFRASTRUCTUREMESSAGE_MSGTYPE.containing_type = _INFRASTRUCTUREMESSAGE
-_ATTACKMESSAGE.fields_by_name['msg_type'].enum_type = _ATTACKMESSAGE_MSGTYPE
-_ATTACKMESSAGE_MSGTYPE.containing_type = _ATTACKMESSAGE
-_COSIMAMSGGROUP.fields_by_name['initial_messages'].message_type = _INITIALMESSAGE
-_COSIMAMSGGROUP.fields_by_name['info_messages'].message_type = _INFOMESSAGE
-_COSIMAMSGGROUP.fields_by_name['synchronisation_messages'].message_type = _SYNCHRONISATIONMESSAGE
-_COSIMAMSGGROUP.fields_by_name['infrastructure_messages'].message_type = _INFRASTRUCTUREMESSAGE
-_COSIMAMSGGROUP.fields_by_name['traffic_messages'].message_type = _TRAFFICMESSAGE
-_COSIMAMSGGROUP.fields_by_name['attack_messages'].message_type = _ATTACKMESSAGE
-DESCRIPTOR.message_types_by_name['InitialMessage'] = _INITIALMESSAGE
-DESCRIPTOR.message_types_by_name['InfoMessage'] = _INFOMESSAGE
-DESCRIPTOR.message_types_by_name['SynchronisationMessage'] = _SYNCHRONISATIONMESSAGE
-DESCRIPTOR.message_types_by_name['InfrastructureMessage'] = _INFRASTRUCTUREMESSAGE
-DESCRIPTOR.message_types_by_name['TrafficMessage'] = _TRAFFICMESSAGE
-DESCRIPTOR.message_types_by_name['AttackMessage'] = _ATTACKMESSAGE
-DESCRIPTOR.message_types_by_name['CosimaMsgGroup'] = _COSIMAMSGGROUP
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-InitialMessage = _reflection.GeneratedProtocolMessageType('InitialMessage', (_message.Message,), {
-  'DESCRIPTOR' : _INITIALMESSAGE,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:InitialMessage)
-  })
-_sym_db.RegisterMessage(InitialMessage)
-
-InfoMessage = _reflection.GeneratedProtocolMessageType('InfoMessage', (_message.Message,), {
-  'DESCRIPTOR' : _INFOMESSAGE,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:InfoMessage)
-  })
-_sym_db.RegisterMessage(InfoMessage)
-
-SynchronisationMessage = _reflection.GeneratedProtocolMessageType('SynchronisationMessage', (_message.Message,), {
-  'DESCRIPTOR' : _SYNCHRONISATIONMESSAGE,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:SynchronisationMessage)
-  })
-_sym_db.RegisterMessage(SynchronisationMessage)
-
-InfrastructureMessage = _reflection.GeneratedProtocolMessageType('InfrastructureMessage', (_message.Message,), {
-  'DESCRIPTOR' : _INFRASTRUCTUREMESSAGE,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:InfrastructureMessage)
-  })
-_sym_db.RegisterMessage(InfrastructureMessage)
-
-TrafficMessage = _reflection.GeneratedProtocolMessageType('TrafficMessage', (_message.Message,), {
-  'DESCRIPTOR' : _TRAFFICMESSAGE,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:TrafficMessage)
-  })
-_sym_db.RegisterMessage(TrafficMessage)
-
-AttackMessage = _reflection.GeneratedProtocolMessageType('AttackMessage', (_message.Message,), {
-  'DESCRIPTOR' : _ATTACKMESSAGE,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:AttackMessage)
-  })
-_sym_db.RegisterMessage(AttackMessage)
-
-CosimaMsgGroup = _reflection.GeneratedProtocolMessageType('CosimaMsgGroup', (_message.Message,), {
-  'DESCRIPTOR' : _COSIMAMSGGROUP,
-  '__module__' : 'message_pb2'
-  # @@protoc_insertion_point(class_scope:CosimaMsgGroup)
-  })
-_sym_db.RegisterMessage(CosimaMsgGroup)
-
-
-# @@protoc_insertion_point(module_scope)
diff --git a/mosaik/.python-version b/mosaik/.python-version
new file mode 100644
index 0000000..e4fba21
--- /dev/null
+++ b/mosaik/.python-version
@@ -0,0 +1 @@
+3.12
diff --git a/cosima_core/__init__.py b/mosaik/README.md
similarity index 100%
rename from cosima_core/__init__.py
rename to mosaik/README.md
diff --git a/cosima_core/messages/__init__.py b/mosaik/__init__.py
similarity index 100%
rename from cosima_core/messages/__init__.py
rename to mosaik/__init__.py
diff --git a/mosaik/pyproject.toml b/mosaik/pyproject.toml
new file mode 100644
index 0000000..af3b450
--- /dev/null
+++ b/mosaik/pyproject.toml
@@ -0,0 +1,41 @@
+[project]
+name = "cosima"
+version = "0.4.0"
+description = "COmmunication SIMulation with Agents"
+readme = "README.md"
+authors = [{ name = "Cosima Team", email = "emilie.frost@offis.de" }]
+requires-python = ">=3.8"
+dependencies = [
+    "arrow==1.2.3",
+    "json-tricks==3.16.1",
+    "matplotlib==3.6.2",
+    "mosaik==3.1.0",
+    "mosaik_api==3.0.3",
+    "mosaik-householdsim==2.1.0",
+    "numpy>1.24.0",
+    "pandas==1.5.2",
+    "protobuf==3.13.0",
+    "psutil==5.9.4",
+    "pytest==7.2.0",
+    "pytest_check==1.3.0",
+    "setuptools==65.6.3",
+    "simpy==3.0.13",
+    "termcolor==2.1.1",
+]
+classifiers = [
+    "Programming Language :: Python :: 3",
+    "Operating System :: OS Independent",
+    "License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)",
+]
+
+[project.urls]
+Repository = "https://gitlab.com/mosaik/examples/cosima.git"
+
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[tool.hatch.build.hooks.protobuf]
+dependencies = ["hatch-protobuf"]
+proto_paths = ["../protobuf"]
+output_path = "src/cosima/messages"
diff --git a/cosima_core/results/result_1645085479.8887444.csv b/mosaik/results/result_1645085479.8887444.csv
similarity index 100%
rename from cosima_core/results/result_1645085479.8887444.csv
rename to mosaik/results/result_1645085479.8887444.csv
diff --git a/run.py b/mosaik/run.py
similarity index 92%
rename from run.py
rename to mosaik/run.py
index 8214781..be37192 100644
--- a/run.py
+++ b/mosaik/run.py
@@ -3,8 +3,8 @@
 import argparse
 
 import scenario_config
-from cosima_core.scenarios import communication_scenario, negotiation_scenario
-from cosima_core.scenarios.mango import mango_cohda_scenario, mango_simple_scenario, mango_units_scenario, \
+from cosima.scenarios import communication_scenario, negotiation_scenario
+from cosima.scenarios.mango import mango_cohda_scenario, mango_simple_scenario, mango_units_scenario, \
     mango_direct_connection_scenario, mango_direct_connection_cohda_scenario
 
 
diff --git a/scenario_config.py b/mosaik/scenario_config.py
similarity index 100%
rename from scenario_config.py
rename to mosaik/scenario_config.py
diff --git a/cosima_core/mango_direct_connection/mango_communication_network.py b/mosaik/src/cosima/mango_direct_connection/mango_communication_network.py
similarity index 100%
rename from cosima_core/mango_direct_connection/mango_communication_network.py
rename to mosaik/src/cosima/mango_direct_connection/mango_communication_network.py
diff --git a/mosaik/src/cosima/messages/__init__.py b/mosaik/src/cosima/messages/__init__.py
new file mode 100644
index 0000000..620a1b1
--- /dev/null
+++ b/mosaik/src/cosima/messages/__init__.py
@@ -0,0 +1,2 @@
+def hello() -> str:
+    return "Hello from mosaik!"
diff --git a/cosima_core/messages/mango_messages.py b/mosaik/src/cosima/messages/mango_messages.py
similarity index 100%
rename from cosima_core/messages/mango_messages.py
rename to mosaik/src/cosima/messages/mango_messages.py
diff --git a/mosaik/src/cosima/messages/message_pb2.py b/mosaik/src/cosima/messages/message_pb2.py
new file mode 100644
index 0000000..f5a16e6
--- /dev/null
+++ b/mosaik/src/cosima/messages/message_pb2.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
+# source: message.proto
+# Protobuf Python Version: 5.29.0
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
+_runtime_version.ValidateProtobufRuntimeVersion(
+    _runtime_version.Domain.PUBLIC,
+    5,
+    29,
+    0,
+    '',
+    'message.proto'
+)
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rmessage.proto\"\x93\x01\n\x0eInitialMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\r\n\x05until\x18\x03 \x01(\x05\x12\x11\n\tstep_size\x18\x04 \x01(\x05\x12\x15\n\rlogging_level\x18\x05 \x01(\t\x12#\n\x1bmax_byte_size_per_msg_group\x18\x06 \x01(\x05\"\xb2\x01\n\x0bInfoMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x13\n\x0bmax_advance\x18\x02 \x01(\x05\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x0e\n\x06sender\x18\x04 \x01(\t\x12\x10\n\x08receiver\x18\x05 \x01(\t\x12\x0c\n\x04size\x18\x06 \x01(\x05\x12\x0f\n\x07\x63ontent\x18\x07 \x01(\t\x12\x15\n\rcreation_time\x18\x08 \x01(\x05\x12\x14\n\x0cis_falsified\x18\t \x01(\x08\"\xec\x01\n\x16SynchronisationMessage\x12\x31\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1f.SynchronisationMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x13\n\x0bmax_advance\x18\x04 \x01(\x05\x12\x0f\n\x07timeout\x18\x05 \x01(\x08\x12\x16\n\x0etimeout_msg_id\x18\x06 \x01(\t\"?\n\x07MsgType\x12\x0f\n\x0bMAX_ADVANCE\x10\x00\x12\x0b\n\x07WAITING\x10\x01\x12\x16\n\x12TRANSMISSION_ERROR\x10\x02\"\xd2\x01\n\x15InfrastructureMessage\x12\x30\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1e.InfrastructureMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x15\n\rchange_module\x18\x04 \x01(\t\x12$\n\x1c\x63onnection_change_successful\x18\x05 \x01(\x08\"(\n\x07MsgType\x12\x0e\n\nDISCONNECT\x10\x00\x12\r\n\tRECONNECT\x10\x01\"\x9d\x01\n\x0eTrafficMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\t\x12\x10\n\x08sim_time\x18\x02 \x01(\x05\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x10\n\x08interval\x18\x07 \x01(\x05\x12\x15\n\rpacket_length\x18\x08 \x01(\x05\"\xf5\x01\n\rAttackMessage\x12(\n\x08msg_type\x18\x01 \x01(\x0e\x32\x16.AttackMessage.MsgType\x12\x0e\n\x06msg_id\x18\x02 \x01(\t\x12\x10\n\x08sim_time\x18\x03 \x01(\x05\x12\x17\n\x0f\x61ttacked_module\x18\x04 \x01(\t\x12\r\n\x05start\x18\x05 \x01(\x05\x12\x0c\n\x04stop\x18\x06 \x01(\x05\x12\x1a\n\x12\x61ttack_probability\x18\x07 \x01(\x05\"F\n\x07MsgType\x12\x0f\n\x0bPACKET_DROP\x10\x00\x12\x18\n\x14PACKET_FALSIFICATION\x10\x01\x12\x10\n\x0cPACKET_DELAY\x10\x02\"\x81\x03\n\x0e\x43osimaMsgGroup\x12)\n\x10initial_messages\x18\x01 \x03(\x0b\x32\x0f.InitialMessage\x12#\n\rinfo_messages\x18\x02 \x03(\x0b\x32\x0c.InfoMessage\x12\x39\n\x18synchronisation_messages\x18\x03 \x03(\x0b\x32\x17.SynchronisationMessage\x12\x37\n\x17infrastructure_messages\x18\x04 \x03(\x0b\x32\x16.InfrastructureMessage\x12)\n\x10traffic_messages\x18\x05 \x03(\x0b\x32\x0f.TrafficMessage\x12\'\n\x0f\x61ttack_messages\x18\x06 \x03(\x0b\x32\x0e.AttackMessage\x12\x19\n\x11\x63urrent_time_step\x18\x07 \x01(\x05\x12 \n\x18number_of_message_groups\x18\x08 \x01(\x05\x12\x1a\n\x12number_of_messages\x18\t \x01(\x05\x62\x06proto3')
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'message_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+  DESCRIPTOR._loaded_options = None
+  _globals['_INITIALMESSAGE']._serialized_start=18
+  _globals['_INITIALMESSAGE']._serialized_end=165
+  _globals['_INFOMESSAGE']._serialized_start=168
+  _globals['_INFOMESSAGE']._serialized_end=346
+  _globals['_SYNCHRONISATIONMESSAGE']._serialized_start=349
+  _globals['_SYNCHRONISATIONMESSAGE']._serialized_end=585
+  _globals['_SYNCHRONISATIONMESSAGE_MSGTYPE']._serialized_start=522
+  _globals['_SYNCHRONISATIONMESSAGE_MSGTYPE']._serialized_end=585
+  _globals['_INFRASTRUCTUREMESSAGE']._serialized_start=588
+  _globals['_INFRASTRUCTUREMESSAGE']._serialized_end=798
+  _globals['_INFRASTRUCTUREMESSAGE_MSGTYPE']._serialized_start=758
+  _globals['_INFRASTRUCTUREMESSAGE_MSGTYPE']._serialized_end=798
+  _globals['_TRAFFICMESSAGE']._serialized_start=801
+  _globals['_TRAFFICMESSAGE']._serialized_end=958
+  _globals['_ATTACKMESSAGE']._serialized_start=961
+  _globals['_ATTACKMESSAGE']._serialized_end=1206
+  _globals['_ATTACKMESSAGE_MSGTYPE']._serialized_start=1136
+  _globals['_ATTACKMESSAGE_MSGTYPE']._serialized_end=1206
+  _globals['_COSIMAMSGGROUP']._serialized_start=1209
+  _globals['_COSIMAMSGGROUP']._serialized_end=1594
+# @@protoc_insertion_point(module_scope)
diff --git a/mosaik/src/cosima/messages/message_pb2.pyi b/mosaik/src/cosima/messages/message_pb2.pyi
new file mode 100644
index 0000000..5a24a9c
--- /dev/null
+++ b/mosaik/src/cosima/messages/message_pb2.pyi
@@ -0,0 +1,157 @@
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class InitialMessage(_message.Message):
+    __slots__ = ("msg_id", "max_advance", "until", "step_size", "logging_level", "max_byte_size_per_msg_group")
+    MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    MAX_ADVANCE_FIELD_NUMBER: _ClassVar[int]
+    UNTIL_FIELD_NUMBER: _ClassVar[int]
+    STEP_SIZE_FIELD_NUMBER: _ClassVar[int]
+    LOGGING_LEVEL_FIELD_NUMBER: _ClassVar[int]
+    MAX_BYTE_SIZE_PER_MSG_GROUP_FIELD_NUMBER: _ClassVar[int]
+    msg_id: str
+    max_advance: int
+    until: int
+    step_size: int
+    logging_level: str
+    max_byte_size_per_msg_group: int
+    def __init__(self, msg_id: _Optional[str] = ..., max_advance: _Optional[int] = ..., until: _Optional[int] = ..., step_size: _Optional[int] = ..., logging_level: _Optional[str] = ..., max_byte_size_per_msg_group: _Optional[int] = ...) -> None: ...
+
+class InfoMessage(_message.Message):
+    __slots__ = ("msg_id", "max_advance", "sim_time", "sender", "receiver", "size", "content", "creation_time", "is_falsified")
+    MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    MAX_ADVANCE_FIELD_NUMBER: _ClassVar[int]
+    SIM_TIME_FIELD_NUMBER: _ClassVar[int]
+    SENDER_FIELD_NUMBER: _ClassVar[int]
+    RECEIVER_FIELD_NUMBER: _ClassVar[int]
+    SIZE_FIELD_NUMBER: _ClassVar[int]
+    CONTENT_FIELD_NUMBER: _ClassVar[int]
+    CREATION_TIME_FIELD_NUMBER: _ClassVar[int]
+    IS_FALSIFIED_FIELD_NUMBER: _ClassVar[int]
+    msg_id: str
+    max_advance: int
+    sim_time: int
+    sender: str
+    receiver: str
+    size: int
+    content: str
+    creation_time: int
+    is_falsified: bool
+    def __init__(self, msg_id: _Optional[str] = ..., max_advance: _Optional[int] = ..., sim_time: _Optional[int] = ..., sender: _Optional[str] = ..., receiver: _Optional[str] = ..., size: _Optional[int] = ..., content: _Optional[str] = ..., creation_time: _Optional[int] = ..., is_falsified: bool = ...) -> None: ...
+
+class SynchronisationMessage(_message.Message):
+    __slots__ = ("msg_type", "msg_id", "sim_time", "max_advance", "timeout", "timeout_msg_id")
+    class MsgType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+        __slots__ = ()
+        MAX_ADVANCE: _ClassVar[SynchronisationMessage.MsgType]
+        WAITING: _ClassVar[SynchronisationMessage.MsgType]
+        TRANSMISSION_ERROR: _ClassVar[SynchronisationMessage.MsgType]
+    MAX_ADVANCE: SynchronisationMessage.MsgType
+    WAITING: SynchronisationMessage.MsgType
+    TRANSMISSION_ERROR: SynchronisationMessage.MsgType
+    MSG_TYPE_FIELD_NUMBER: _ClassVar[int]
+    MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    SIM_TIME_FIELD_NUMBER: _ClassVar[int]
+    MAX_ADVANCE_FIELD_NUMBER: _ClassVar[int]
+    TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+    TIMEOUT_MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    msg_type: SynchronisationMessage.MsgType
+    msg_id: str
+    sim_time: int
+    max_advance: int
+    timeout: bool
+    timeout_msg_id: str
+    def __init__(self, msg_type: _Optional[_Union[SynchronisationMessage.MsgType, str]] = ..., msg_id: _Optional[str] = ..., sim_time: _Optional[int] = ..., max_advance: _Optional[int] = ..., timeout: bool = ..., timeout_msg_id: _Optional[str] = ...) -> None: ...
+
+class InfrastructureMessage(_message.Message):
+    __slots__ = ("msg_type", "msg_id", "sim_time", "change_module", "connection_change_successful")
+    class MsgType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+        __slots__ = ()
+        DISCONNECT: _ClassVar[InfrastructureMessage.MsgType]
+        RECONNECT: _ClassVar[InfrastructureMessage.MsgType]
+    DISCONNECT: InfrastructureMessage.MsgType
+    RECONNECT: InfrastructureMessage.MsgType
+    MSG_TYPE_FIELD_NUMBER: _ClassVar[int]
+    MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    SIM_TIME_FIELD_NUMBER: _ClassVar[int]
+    CHANGE_MODULE_FIELD_NUMBER: _ClassVar[int]
+    CONNECTION_CHANGE_SUCCESSFUL_FIELD_NUMBER: _ClassVar[int]
+    msg_type: InfrastructureMessage.MsgType
+    msg_id: str
+    sim_time: int
+    change_module: str
+    connection_change_successful: bool
+    def __init__(self, msg_type: _Optional[_Union[InfrastructureMessage.MsgType, str]] = ..., msg_id: _Optional[str] = ..., sim_time: _Optional[int] = ..., change_module: _Optional[str] = ..., connection_change_successful: bool = ...) -> None: ...
+
+class TrafficMessage(_message.Message):
+    __slots__ = ("msg_id", "sim_time", "source", "destination", "start", "stop", "interval", "packet_length")
+    MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    SIM_TIME_FIELD_NUMBER: _ClassVar[int]
+    SOURCE_FIELD_NUMBER: _ClassVar[int]
+    DESTINATION_FIELD_NUMBER: _ClassVar[int]
+    START_FIELD_NUMBER: _ClassVar[int]
+    STOP_FIELD_NUMBER: _ClassVar[int]
+    INTERVAL_FIELD_NUMBER: _ClassVar[int]
+    PACKET_LENGTH_FIELD_NUMBER: _ClassVar[int]
+    msg_id: str
+    sim_time: int
+    source: str
+    destination: str
+    start: int
+    stop: int
+    interval: int
+    packet_length: int
+    def __init__(self, msg_id: _Optional[str] = ..., sim_time: _Optional[int] = ..., source: _Optional[str] = ..., destination: _Optional[str] = ..., start: _Optional[int] = ..., stop: _Optional[int] = ..., interval: _Optional[int] = ..., packet_length: _Optional[int] = ...) -> None: ...
+
+class AttackMessage(_message.Message):
+    __slots__ = ("msg_type", "msg_id", "sim_time", "attacked_module", "start", "stop", "attack_probability")
+    class MsgType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+        __slots__ = ()
+        PACKET_DROP: _ClassVar[AttackMessage.MsgType]
+        PACKET_FALSIFICATION: _ClassVar[AttackMessage.MsgType]
+        PACKET_DELAY: _ClassVar[AttackMessage.MsgType]
+    PACKET_DROP: AttackMessage.MsgType
+    PACKET_FALSIFICATION: AttackMessage.MsgType
+    PACKET_DELAY: AttackMessage.MsgType
+    MSG_TYPE_FIELD_NUMBER: _ClassVar[int]
+    MSG_ID_FIELD_NUMBER: _ClassVar[int]
+    SIM_TIME_FIELD_NUMBER: _ClassVar[int]
+    ATTACKED_MODULE_FIELD_NUMBER: _ClassVar[int]
+    START_FIELD_NUMBER: _ClassVar[int]
+    STOP_FIELD_NUMBER: _ClassVar[int]
+    ATTACK_PROBABILITY_FIELD_NUMBER: _ClassVar[int]
+    msg_type: AttackMessage.MsgType
+    msg_id: str
+    sim_time: int
+    attacked_module: str
+    start: int
+    stop: int
+    attack_probability: int
+    def __init__(self, msg_type: _Optional[_Union[AttackMessage.MsgType, str]] = ..., msg_id: _Optional[str] = ..., sim_time: _Optional[int] = ..., attacked_module: _Optional[str] = ..., start: _Optional[int] = ..., stop: _Optional[int] = ..., attack_probability: _Optional[int] = ...) -> None: ...
+
+class CosimaMsgGroup(_message.Message):
+    __slots__ = ("initial_messages", "info_messages", "synchronisation_messages", "infrastructure_messages", "traffic_messages", "attack_messages", "current_time_step", "number_of_message_groups", "number_of_messages")
+    INITIAL_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    INFO_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    SYNCHRONISATION_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    INFRASTRUCTURE_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    TRAFFIC_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    ATTACK_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    CURRENT_TIME_STEP_FIELD_NUMBER: _ClassVar[int]
+    NUMBER_OF_MESSAGE_GROUPS_FIELD_NUMBER: _ClassVar[int]
+    NUMBER_OF_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+    initial_messages: _containers.RepeatedCompositeFieldContainer[InitialMessage]
+    info_messages: _containers.RepeatedCompositeFieldContainer[InfoMessage]
+    synchronisation_messages: _containers.RepeatedCompositeFieldContainer[SynchronisationMessage]
+    infrastructure_messages: _containers.RepeatedCompositeFieldContainer[InfrastructureMessage]
+    traffic_messages: _containers.RepeatedCompositeFieldContainer[TrafficMessage]
+    attack_messages: _containers.RepeatedCompositeFieldContainer[AttackMessage]
+    current_time_step: int
+    number_of_message_groups: int
+    number_of_messages: int
+    def __init__(self, initial_messages: _Optional[_Iterable[_Union[InitialMessage, _Mapping]]] = ..., info_messages: _Optional[_Iterable[_Union[InfoMessage, _Mapping]]] = ..., synchronisation_messages: _Optional[_Iterable[_Union[SynchronisationMessage, _Mapping]]] = ..., infrastructure_messages: _Optional[_Iterable[_Union[InfrastructureMessage, _Mapping]]] = ..., traffic_messages: _Optional[_Iterable[_Union[TrafficMessage, _Mapping]]] = ..., attack_messages: _Optional[_Iterable[_Union[AttackMessage, _Mapping]]] = ..., current_time_step: _Optional[int] = ..., number_of_message_groups: _Optional[int] = ..., number_of_messages: _Optional[int] = ...) -> None: ...
diff --git a/mosaik/src/cosima/messages/message_pb2_grpc.py b/mosaik/src/cosima/messages/message_pb2_grpc.py
new file mode 100644
index 0000000..93a67cc
--- /dev/null
+++ b/mosaik/src/cosima/messages/message_pb2_grpc.py
@@ -0,0 +1,24 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+import warnings
+
+
+GRPC_GENERATED_VERSION = '1.71.0'
+GRPC_VERSION = grpc.__version__
+_version_not_supported = False
+
+try:
+    from grpc._utilities import first_version_is_lower
+    _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
+except ImportError:
+    _version_not_supported = True
+
+if _version_not_supported:
+    raise RuntimeError(
+        f'The grpc package installed is at version {GRPC_VERSION},'
+        + f' but the generated code in message_pb2_grpc.py depends on'
+        + f' grpcio>={GRPC_GENERATED_VERSION}.'
+        + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
+        + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
+    )
diff --git a/cosima_core/scenarios/__init__.py b/mosaik/src/cosima/py.typed
similarity index 100%
rename from cosima_core/scenarios/__init__.py
rename to mosaik/src/cosima/py.typed
diff --git a/cosima_core/simulators/__init__.py b/mosaik/src/cosima/scenarios/__init__.py
similarity index 100%
rename from cosima_core/simulators/__init__.py
rename to mosaik/src/cosima/scenarios/__init__.py
diff --git a/cosima_core/scenarios/communication_scenario.py b/mosaik/src/cosima/scenarios/communication_scenario.py
similarity index 100%
rename from cosima_core/scenarios/communication_scenario.py
rename to mosaik/src/cosima/scenarios/communication_scenario.py
diff --git a/cosima_core/scenarios/mango/mango_cohda_scenario.py b/mosaik/src/cosima/scenarios/mango/mango_cohda_scenario.py
similarity index 100%
rename from cosima_core/scenarios/mango/mango_cohda_scenario.py
rename to mosaik/src/cosima/scenarios/mango/mango_cohda_scenario.py
diff --git a/cosima_core/scenarios/mango/mango_direct_connection_cohda_scenario.py b/mosaik/src/cosima/scenarios/mango/mango_direct_connection_cohda_scenario.py
similarity index 100%
rename from cosima_core/scenarios/mango/mango_direct_connection_cohda_scenario.py
rename to mosaik/src/cosima/scenarios/mango/mango_direct_connection_cohda_scenario.py
diff --git a/cosima_core/scenarios/mango/mango_direct_connection_scenario.py b/mosaik/src/cosima/scenarios/mango/mango_direct_connection_scenario.py
similarity index 100%
rename from cosima_core/scenarios/mango/mango_direct_connection_scenario.py
rename to mosaik/src/cosima/scenarios/mango/mango_direct_connection_scenario.py
diff --git a/cosima_core/scenarios/mango/mango_simple_scenario.py b/mosaik/src/cosima/scenarios/mango/mango_simple_scenario.py
similarity index 100%
rename from cosima_core/scenarios/mango/mango_simple_scenario.py
rename to mosaik/src/cosima/scenarios/mango/mango_simple_scenario.py
diff --git a/cosima_core/scenarios/mango/mango_units_scenario.py b/mosaik/src/cosima/scenarios/mango/mango_units_scenario.py
similarity index 100%
rename from cosima_core/scenarios/mango/mango_units_scenario.py
rename to mosaik/src/cosima/scenarios/mango/mango_units_scenario.py
diff --git a/cosima_core/scenarios/negotiation_scenario.py b/mosaik/src/cosima/scenarios/negotiation_scenario.py
similarity index 100%
rename from cosima_core/scenarios/negotiation_scenario.py
rename to mosaik/src/cosima/scenarios/negotiation_scenario.py
diff --git a/cosima_core/scenarios/tutorial/01_simulators_and_connection_to_omnet.py b/mosaik/src/cosima/scenarios/tutorial/01_simulators_and_connection_to_omnet.py
similarity index 100%
rename from cosima_core/scenarios/tutorial/01_simulators_and_connection_to_omnet.py
rename to mosaik/src/cosima/scenarios/tutorial/01_simulators_and_connection_to_omnet.py
diff --git a/cosima_core/scenarios/tutorial/02_scenario_helper_and_scenario_config.py b/mosaik/src/cosima/scenarios/tutorial/02_scenario_helper_and_scenario_config.py
similarity index 100%
rename from cosima_core/scenarios/tutorial/02_scenario_helper_and_scenario_config.py
rename to mosaik/src/cosima/scenarios/tutorial/02_scenario_helper_and_scenario_config.py
diff --git a/cosima_core/scenarios/tutorial/03_integrating_the_agent_framework_mango.py b/mosaik/src/cosima/scenarios/tutorial/03_integrating_the_agent_framework_mango.py
similarity index 100%
rename from cosima_core/scenarios/tutorial/03_integrating_the_agent_framework_mango.py
rename to mosaik/src/cosima/scenarios/tutorial/03_integrating_the_agent_framework_mango.py
diff --git a/cosima_core/simulators/mango_example/__init__.py b/mosaik/src/cosima/simulators/__init__.py
similarity index 100%
rename from cosima_core/simulators/mango_example/__init__.py
rename to mosaik/src/cosima/simulators/__init__.py
diff --git a/cosima_core/simulators/collector.py b/mosaik/src/cosima/simulators/collector.py
similarity index 100%
rename from cosima_core/simulators/collector.py
rename to mosaik/src/cosima/simulators/collector.py
diff --git a/cosima_core/simulators/communication_simulator.py b/mosaik/src/cosima/simulators/communication_simulator.py
similarity index 97%
rename from cosima_core/simulators/communication_simulator.py
rename to mosaik/src/cosima/simulators/communication_simulator.py
index 06e0a08..fe6d55c 100644
--- a/cosima_core/simulators/communication_simulator.py
+++ b/mosaik/src/cosima/simulators/communication_simulator.py
@@ -1,11 +1,11 @@
 import mosaik_api
 
-from cosima_core.util.general_config import MAX_BYTE_SIZE_PER_MSG_GROUP
+from cosima.util.general_config import MAX_BYTE_SIZE_PER_MSG_GROUP
 import scenario_config
-from cosima_core.messages.message_pb2 import InitialMessage, InfoMessage, SynchronisationMessage, \
+from cosima.messages.message_pb2 import InitialMessage, InfoMessage, SynchronisationMessage, \
     InfrastructureMessage, TrafficMessage, AttackMessage
-from cosima_core.simulators.omnetpp_connection import OmnetppConnection
-from cosima_core.util.util_functions import log, create_protobuf_messages, get_dict_from_protobuf_message, SynchronizationError
+from cosima.simulators.omnetpp_connection import OmnetppConnection
+from cosima.util.util_functions import log, create_protobuf_messages, get_dict_from_protobuf_message, SynchronizationError
 
 META = {
     'models': {
diff --git a/cosima_core/simulators/ict_controller_simulator.py b/mosaik/src/cosima/simulators/ict_controller_simulator.py
similarity index 100%
rename from cosima_core/simulators/ict_controller_simulator.py
rename to mosaik/src/cosima/simulators/ict_controller_simulator.py
diff --git a/cosima_core/simulators/tutorial/__init__.py b/mosaik/src/cosima/simulators/mango_example/__init__.py
similarity index 100%
rename from cosima_core/simulators/tutorial/__init__.py
rename to mosaik/src/cosima/simulators/mango_example/__init__.py
diff --git a/cosima_core/simulators/mango_example/container_sim.py b/mosaik/src/cosima/simulators/mango_example/container_sim.py
similarity index 100%
rename from cosima_core/simulators/mango_example/container_sim.py
rename to mosaik/src/cosima/simulators/mango_example/container_sim.py
diff --git a/cosima_core/simulators/mango_example/unit_agent.py b/mosaik/src/cosima/simulators/mango_example/unit_agent.py
similarity index 100%
rename from cosima_core/simulators/mango_example/unit_agent.py
rename to mosaik/src/cosima/simulators/mango_example/unit_agent.py
diff --git a/cosima_core/simulators/mango_example/unit_role.py b/mosaik/src/cosima/simulators/mango_example/unit_role.py
similarity index 100%
rename from cosima_core/simulators/mango_example/unit_role.py
rename to mosaik/src/cosima/simulators/mango_example/unit_role.py
diff --git a/cosima_core/simulators/negotiation_example/agent_simulator.py b/mosaik/src/cosima/simulators/negotiation_example/agent_simulator.py
similarity index 100%
rename from cosima_core/simulators/negotiation_example/agent_simulator.py
rename to mosaik/src/cosima/simulators/negotiation_example/agent_simulator.py
diff --git a/cosima_core/simulators/omnetpp_connection.py b/mosaik/src/cosima/simulators/omnetpp_connection.py
similarity index 100%
rename from cosima_core/simulators/omnetpp_connection.py
rename to mosaik/src/cosima/simulators/omnetpp_connection.py
diff --git a/cosima_core/simulators/statistics_simulator.py b/mosaik/src/cosima/simulators/statistics_simulator.py
similarity index 100%
rename from cosima_core/simulators/statistics_simulator.py
rename to mosaik/src/cosima/simulators/statistics_simulator.py
diff --git a/cosima_core/simulators/tic_toc_example/agent_simulator.py b/mosaik/src/cosima/simulators/tic_toc_example/agent_simulator.py
similarity index 100%
rename from cosima_core/simulators/tic_toc_example/agent_simulator.py
rename to mosaik/src/cosima/simulators/tic_toc_example/agent_simulator.py
diff --git a/cosima_core/simulators/tic_toc_example/content.csv b/mosaik/src/cosima/simulators/tic_toc_example/content.csv
similarity index 100%
rename from cosima_core/simulators/tic_toc_example/content.csv
rename to mosaik/src/cosima/simulators/tic_toc_example/content.csv
diff --git a/cosima_core/simulators/tic_toc_example/mosaik_csv.py b/mosaik/src/cosima/simulators/tic_toc_example/mosaik_csv.py
similarity index 100%
rename from cosima_core/simulators/tic_toc_example/mosaik_csv.py
rename to mosaik/src/cosima/simulators/tic_toc_example/mosaik_csv.py
diff --git a/cosima_core/util/run_by_command_line.txt b/mosaik/src/cosima/simulators/tutorial/__init__.py
similarity index 100%
rename from cosima_core/util/run_by_command_line.txt
rename to mosaik/src/cosima/simulators/tutorial/__init__.py
diff --git a/cosima_core/simulators/tutorial/simple_agent_simulator.py b/mosaik/src/cosima/simulators/tutorial/simple_agent_simulator.py
similarity index 100%
rename from cosima_core/simulators/tutorial/simple_agent_simulator.py
rename to mosaik/src/cosima/simulators/tutorial/simple_agent_simulator.py
diff --git a/cosima_core/simulators/tutorial/simple_roles.py b/mosaik/src/cosima/simulators/tutorial/simple_roles.py
similarity index 100%
rename from cosima_core/simulators/tutorial/simple_roles.py
rename to mosaik/src/cosima/simulators/tutorial/simple_roles.py
diff --git a/cosima_core/util/build_omnet_project.py b/mosaik/src/cosima/util/build_omnet_project.py
similarity index 100%
rename from cosima_core/util/build_omnet_project.py
rename to mosaik/src/cosima/util/build_omnet_project.py
diff --git a/cosima_core/util/general_config.py b/mosaik/src/cosima/util/general_config.py
similarity index 100%
rename from cosima_core/util/general_config.py
rename to mosaik/src/cosima/util/general_config.py
diff --git a/cosima_core/util/pysimmods_schedule_generator.py b/mosaik/src/cosima/util/pysimmods_schedule_generator.py
similarity index 100%
rename from cosima_core/util/pysimmods_schedule_generator.py
rename to mosaik/src/cosima/util/pysimmods_schedule_generator.py
diff --git a/mosaik/src/cosima/util/run_by_command_line.txt b/mosaik/src/cosima/util/run_by_command_line.txt
new file mode 100644
index 0000000..e69de29
diff --git a/cosima_core/util/scenario_setup_util.py b/mosaik/src/cosima/util/scenario_setup_util.py
similarity index 100%
rename from cosima_core/util/scenario_setup_util.py
rename to mosaik/src/cosima/util/scenario_setup_util.py
diff --git a/cosima_core/util/track_performance.py b/mosaik/src/cosima/util/track_performance.py
similarity index 100%
rename from cosima_core/util/track_performance.py
rename to mosaik/src/cosima/util/track_performance.py
diff --git a/cosima_core/util/util_functions.py b/mosaik/src/cosima/util/util_functions.py
similarity index 100%
rename from cosima_core/util/util_functions.py
rename to mosaik/src/cosima/util/util_functions.py
diff --git a/mosaik/uv.lock b/mosaik/uv.lock
new file mode 100644
index 0000000..8cea8ef
--- /dev/null
+++ b/mosaik/uv.lock
@@ -0,0 +1,565 @@
+version = 1
+requires-python = ">=3.12"
+
+[[package]]
+name = "arrow"
+version = "1.2.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7f/c0/c601ea7811f422700ef809f167683899cdfddec5aa3f83597edf97349962/arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1", size = 127552 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/67/67/4bca5a595e2f89bff271724ddb1098e6c9e16f7f3d018d120255e3c30313/arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2", size = 66391 },
+]
+
+[[package]]
+name = "attrs"
+version = "25.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
+]
+
+[[package]]
+name = "contourpy"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "numpy" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 },
+    { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 },
+    { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 },
+    { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 },
+    { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 },
+    { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 },
+    { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 },
+    { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 },
+    { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 },
+    { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 },
+    { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 },
+    { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 },
+    { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 },
+    { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 },
+    { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 },
+    { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 },
+    { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 },
+    { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 },
+    { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 },
+    { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 },
+    { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 },
+    { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 },
+    { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 },
+    { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 },
+    { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 },
+    { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 },
+    { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 },
+    { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 },
+    { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 },
+    { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 },
+]
+
+[[package]]
+name = "cosima"
+version = "0.4.0"
+source = { editable = "." }
+dependencies = [
+    { name = "arrow" },
+    { name = "json-tricks" },
+    { name = "matplotlib" },
+    { name = "mosaik" },
+    { name = "mosaik-api" },
+    { name = "mosaik-householdsim" },
+    { name = "numpy" },
+    { name = "pandas" },
+    { name = "protobuf" },
+    { name = "psutil" },
+    { name = "pytest" },
+    { name = "pytest-check" },
+    { name = "setuptools" },
+    { name = "simpy" },
+    { name = "termcolor" },
+]
+
+[package.metadata]
+requires-dist = [
+    { name = "arrow", specifier = "==1.2.3" },
+    { name = "json-tricks", specifier = "==3.16.1" },
+    { name = "matplotlib", specifier = "==3.6.2" },
+    { name = "mosaik", specifier = "==3.1.0" },
+    { name = "mosaik-api", specifier = "==3.0.3" },
+    { name = "mosaik-householdsim", specifier = "==2.1.0" },
+    { name = "numpy", specifier = ">1.24.0" },
+    { name = "pandas", specifier = "==1.5.2" },
+    { name = "protobuf", specifier = "==3.13.0" },
+    { name = "psutil", specifier = "==5.9.4" },
+    { name = "pytest", specifier = "==7.2.0" },
+    { name = "pytest-check", specifier = "==1.3.0" },
+    { name = "setuptools", specifier = "==65.6.3" },
+    { name = "simpy", specifier = "==3.0.13" },
+    { name = "termcolor", specifier = "==2.1.1" },
+]
+
+[[package]]
+name = "cycler"
+version = "0.12.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 },
+]
+
+[[package]]
+name = "docopt"
+version = "0.6.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901 }
+
+[[package]]
+name = "fonttools"
+version = "4.56.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248/fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4", size = 3462892 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/39/32/71cfd6877999576a11824a7fe7bc0bb57c5c72b1f4536fa56a3e39552643/fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9", size = 2747757 },
+    { url = "https://files.pythonhosted.org/packages/15/52/d9f716b072c5061a0b915dd4c387f74bef44c68c069e2195c753905bd9b7/fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f", size = 2279007 },
+    { url = "https://files.pythonhosted.org/packages/d1/97/f1b3a8afa9a0d814a092a25cd42f59ccb98a0bb7a295e6e02fc9ba744214/fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2", size = 4783991 },
+    { url = "https://files.pythonhosted.org/packages/95/70/2a781bedc1c45a0c61d29c56425609b22ed7f971da5d7e5df2679488741b/fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563", size = 4855109 },
+    { url = "https://files.pythonhosted.org/packages/0c/02/a2597858e61a5e3fb6a14d5f6be9e6eb4eaf090da56ad70cedcbdd201685/fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a", size = 4762496 },
+    { url = "https://files.pythonhosted.org/packages/f2/00/aaf00100d6078fdc73f7352b44589804af9dc12b182a2540b16002152ba4/fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28", size = 4990094 },
+    { url = "https://files.pythonhosted.org/packages/bf/dc/3ff1db522460db60cf3adaf1b64e0c72b43406717d139786d3fa1eb20709/fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c", size = 2142888 },
+    { url = "https://files.pythonhosted.org/packages/6f/e3/5a181a85777f7809076e51f7422e0dc77eb04676c40ec8bf6a49d390d1ff/fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba", size = 2189734 },
+    { url = "https://files.pythonhosted.org/packages/a5/55/f06b48d48e0b4ec3a3489efafe9bd4d81b6e0802ac51026e3ee4634e89ba/fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692", size = 2735127 },
+    { url = "https://files.pythonhosted.org/packages/59/db/d2c7c9b6dd5cbd46f183e650a47403ffb88fca17484eb7c4b1cd88f9e513/fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0", size = 2272519 },
+    { url = "https://files.pythonhosted.org/packages/4d/a2/da62d779c34a0e0c06415f02eab7fa3466de5d46df459c0275a255cefc65/fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1", size = 4762423 },
+    { url = "https://files.pythonhosted.org/packages/be/6a/fd4018e0448c8a5e12138906411282c5eab51a598493f080a9f0960e658f/fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea", size = 4834442 },
+    { url = "https://files.pythonhosted.org/packages/6d/63/fa1dec8efb35bc11ef9c39b2d74754b45d48a3ccb2cf78c0109c0af639e8/fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3", size = 4742800 },
+    { url = "https://files.pythonhosted.org/packages/dd/f4/963247ae8c73ccc4cf2929e7162f595c81dbe17997d1d0ea77da24a217c9/fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278", size = 4963746 },
+    { url = "https://files.pythonhosted.org/packages/ea/e0/46f9600c39c644b54e4420f941f75fa200d9288c9ae171e5d80918b8cbb9/fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f", size = 2140927 },
+    { url = "https://files.pythonhosted.org/packages/27/6d/3edda54f98a550a0473f032d8050315fbc8f1b76a0d9f3879b72ebb2cdd6/fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6", size = 2186709 },
+    { url = "https://files.pythonhosted.org/packages/bf/ff/44934a031ce5a39125415eb405b9efb76fe7f9586b75291d66ae5cbfc4e6/fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14", size = 1089800 },
+]
+
+[[package]]
+name = "iniconfig"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 },
+]
+
+[[package]]
+name = "json-tricks"
+version = "3.16.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/42/5e/f10f43ecd2c4013b2c96a884e4a68ffcbd9b6d98bbce6b6988c1f6aa8224/json_tricks-3.16.1.tar.gz", hash = "sha256:c18f3eb750e41b7d452221f8ef83e13dc69dbc92d7ae52c31675916c15e0a7fd", size = 30020 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/4d/03/7ff371381845875e08181a268e3ef1de4c1b59bd3e6a35189d89b6dea64e/json_tricks-3.16.1-py2.py3-none-any.whl", hash = "sha256:05e6d3a431b5be5a1f70275580549724c242ce2e5bd7e54114a63250aba42f31", size = 27113 },
+]
+
+[[package]]
+name = "kiwisolver"
+version = "1.4.8"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 },
+    { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 },
+    { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 },
+    { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 },
+    { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 },
+    { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 },
+    { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 },
+    { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 },
+    { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 },
+    { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 },
+    { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 },
+    { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 },
+    { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 },
+    { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 },
+    { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 },
+    { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 },
+    { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 },
+    { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 },
+    { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 },
+    { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 },
+    { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 },
+    { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 },
+    { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 },
+    { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 },
+    { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 },
+    { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 },
+    { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 },
+    { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 },
+    { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 },
+    { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 },
+    { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 },
+    { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 },
+    { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 },
+    { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 },
+    { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 },
+    { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 },
+    { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 },
+    { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 },
+    { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 },
+    { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 },
+    { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 },
+    { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 },
+    { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 },
+]
+
+[[package]]
+name = "loguru"
+version = "0.7.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "win32-setctime", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 },
+]
+
+[[package]]
+name = "matplotlib"
+version = "3.6.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "contourpy" },
+    { name = "cycler" },
+    { name = "fonttools" },
+    { name = "kiwisolver" },
+    { name = "numpy" },
+    { name = "packaging" },
+    { name = "pillow" },
+    { name = "pyparsing" },
+    { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/91/1c/a48fd779287df3425c289cc2ff728980a5b355f15f4c3c40e1822770ba44/matplotlib-3.6.2.tar.gz", hash = "sha256:b03fd10a1709d0101c054883b550f7c4c5e974f751e2680318759af005964990", size = 35843927 }
+
+[[package]]
+name = "mosaik"
+version = "3.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "loguru" },
+    { name = "mosaik-api" },
+    { name = "mosaik-simpy-io" },
+    { name = "networkx" },
+    { name = "simpy" },
+    { name = "tqdm" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/73/15/5c296f9ab707423e2b8a8aee131889d1eb759f970cf377ab58a7af48e07e/mosaik-3.1.0.tar.gz", hash = "sha256:d778df8a61c7290d2009f5efef118ab747d9253120a13135ccd0b038fe1506de", size = 22119885 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/7d/cb/942d86a05a39e210ecad7450e7905c98e81ce015bba5f8f517d54f0d0e82/mosaik-3.1.0-py2.py3-none-any.whl", hash = "sha256:0e88d2576b4b022c7b85a78c474ad577fbb715b075fbe6a02748ef2bfd95d3a7", size = 48782 },
+]
+
+[[package]]
+name = "mosaik-api"
+version = "3.0.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "docopt" },
+    { name = "mosaik-simpy-io" },
+    { name = "simpy" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/28/3e/30a5bde1e5d4d0cffe1c88cb5a97dd83e6e47dfb22401fa5b6fe26a2fc86/mosaik-api-3.0.3.tar.gz", hash = "sha256:65936c40a6f18e80510b3a5723e0c40eb09bb2cdc67eb7d12dc247c2c0da836d", size = 23116 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/fa/7b/efdcd87628f53dcc368539a8336656c8a5aead05d8c20c26c7d7b55a2e17/mosaik_api-3.0.3-py2.py3-none-any.whl", hash = "sha256:591dc8fe8ffc234a944eeb15bfcd878197933c17328cb0b3250f87f047c52fe1", size = 22428 },
+]
+
+[[package]]
+name = "mosaik-householdsim"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "arrow" },
+    { name = "mosaik-api" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d7/4f/acab042d65e960ff324497a3e03afffb93e958a5432610dc5bb5a84e8670/mosaik-householdsim-2.1.0.tar.gz", hash = "sha256:f8dce2ff00daad9bef099844df372fe126016469a7e0e1c3bb02257a8794b5a8", size = 15970 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/6b/63/4ab9a048ecd62d04ef224b7520e29908485d83f347b7970c2a865cc2b734/mosaik_householdsim-2.1.0-py2.py3-none-any.whl", hash = "sha256:fb939a59182f7798998dd418e59dae396d66dd841bb9d85c2416527f88c1c09a", size = 17190 },
+]
+
+[[package]]
+name = "mosaik-simpy-io"
+version = "0.2.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "simpy" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/71/42/e924ee0d13accdd4f2cdb8145280afebea8c7794c63d5d420c983e9a8143/mosaik-simpy-io-0.2.4.tar.gz", hash = "sha256:6b10d6e81ec3e0f87f95b46b16ce4ebcad195963c1a75d182aedfcf67ac0e20a", size = 47977 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/61/71/44206b2e94b2fdf15792dedc95a3662fee6858b07a8d2024d683a8159b1d/mosaik_simpy_io-0.2.4-py2.py3-none-any.whl", hash = "sha256:9a55cf5057ef85f764f948d0a1b1cb2a6224e626952dd7500bb42bba98cf3e41", size = 71898 },
+]
+
+[[package]]
+name = "networkx"
+version = "3.4.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 },
+]
+
+[[package]]
+name = "numpy"
+version = "2.2.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/a2/30/182db21d4f2a95904cec1a6f779479ea1ac07c0647f064dea454ec650c42/numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", size = 20947156 },
+    { url = "https://files.pythonhosted.org/packages/24/6d/9483566acfbda6c62c6bc74b6e981c777229d2af93c8eb2469b26ac1b7bc/numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", size = 14133092 },
+    { url = "https://files.pythonhosted.org/packages/27/f6/dba8a258acbf9d2bed2525cdcbb9493ef9bae5199d7a9cb92ee7e9b2aea6/numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", size = 5163515 },
+    { url = "https://files.pythonhosted.org/packages/62/30/82116199d1c249446723c68f2c9da40d7f062551036f50b8c4caa42ae252/numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", size = 6696558 },
+    { url = "https://files.pythonhosted.org/packages/0e/b2/54122b3c6df5df3e87582b2e9430f1bdb63af4023c739ba300164c9ae503/numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", size = 14084742 },
+    { url = "https://files.pythonhosted.org/packages/02/e2/e2cbb8d634151aab9528ef7b8bab52ee4ab10e076509285602c2a3a686e0/numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", size = 16134051 },
+    { url = "https://files.pythonhosted.org/packages/8e/21/efd47800e4affc993e8be50c1b768de038363dd88865920439ef7b422c60/numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", size = 15578972 },
+    { url = "https://files.pythonhosted.org/packages/04/1e/f8bb88f6157045dd5d9b27ccf433d016981032690969aa5c19e332b138c0/numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", size = 17898106 },
+    { url = "https://files.pythonhosted.org/packages/2b/93/df59a5a3897c1f036ae8ff845e45f4081bb06943039ae28a3c1c7c780f22/numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", size = 6311190 },
+    { url = "https://files.pythonhosted.org/packages/46/69/8c4f928741c2a8efa255fdc7e9097527c6dc4e4df147e3cadc5d9357ce85/numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", size = 12644305 },
+    { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 },
+    { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 },
+    { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 },
+    { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 },
+    { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 },
+    { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 },
+    { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 },
+    { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 },
+    { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 },
+    { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 },
+    { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 },
+    { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 },
+    { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 },
+    { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 },
+    { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 },
+    { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 },
+    { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 },
+    { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 },
+    { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 },
+    { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 },
+]
+
+[[package]]
+name = "packaging"
+version = "24.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
+]
+
+[[package]]
+name = "pandas"
+version = "1.5.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "numpy" },
+    { name = "python-dateutil" },
+    { name = "pytz" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/4d/07/c4d69e1acb7723ca49d24fc60a89aa07a914dfb8e7a07fdbb9d8646630cd/pandas-1.5.2.tar.gz", hash = "sha256:220b98d15cee0b2cd839a6358bd1f273d0356bf964c1a1aeb32d47db0215488b", size = 5201551 }
+
+[[package]]
+name = "pillow"
+version = "11.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 },
+    { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 },
+    { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 },
+    { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 },
+    { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 },
+    { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 },
+    { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 },
+    { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 },
+    { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 },
+    { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 },
+    { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 },
+    { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 },
+    { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 },
+    { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 },
+    { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 },
+    { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 },
+    { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 },
+    { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 },
+    { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 },
+    { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 },
+    { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 },
+    { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 },
+    { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 },
+    { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 },
+    { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 },
+    { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 },
+    { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 },
+    { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 },
+    { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 },
+    { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 },
+]
+
+[[package]]
+name = "pluggy"
+version = "1.5.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
+]
+
+[[package]]
+name = "protobuf"
+version = "3.13.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "setuptools" },
+    { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/25/ef/8f36bc7e4c3dcad241a9e7a51520d30712a7abc034343bed841ff4ea3289/protobuf-3.13.0.tar.gz", hash = "sha256:6a82e0c8bb2bf58f606040cc5814e07715b2094caeba281e2e7d0b0e2e397db5", size = 267858 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/3b/ba/276d817d4b0184e544a9295e14e95f6148af5c5652033d30eb63d2c13bfa/protobuf-3.13.0-py2.py3-none-any.whl", hash = "sha256:d69697acac76d9f250ab745b46c725edf3e98ac24763990b24d58c16c642947a", size = 438406 },
+]
+
+[[package]]
+name = "psutil"
+version = "5.9.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3d/7d/d05864a69e452f003c0d77e728e155a89a2a26b09e64860ddd70ad64fb26/psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62", size = 485825 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/a5/73/35cea01aad1baf901c915dc95ea33a2f271c8ff8cf2f1c73b7f591f1bdf1/psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7", size = 243468 },
+    { url = "https://files.pythonhosted.org/packages/5a/37/ef88eed265d93bc28c681316f68762c5e04167519e5627a0187c8878b409/psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1", size = 277515 },
+    { url = "https://files.pythonhosted.org/packages/6e/c8/784968329c1c67c28cce91991ef9af8a8913aa5a3399a6a8954b1380572f/psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08", size = 280218 },
+    { url = "https://files.pythonhosted.org/packages/3e/af/fe14b984e8b0f778d502d387b789d846cb2fcc3989f63be942741266d8c8/psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff", size = 247217 },
+    { url = "https://files.pythonhosted.org/packages/25/6e/ba97809175c90cbdcd33b470e466ebf0854d15d1506e605cc0ddd284d5b6/psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4", size = 252462 },
+    { url = "https://files.pythonhosted.org/packages/79/26/f026804298b933b11640cc2d15155a545805df732e5ead3a2ad7cf45a38b/psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e", size = 244234 },
+]
+
+[[package]]
+name = "pyparsing"
+version = "3.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 },
+]
+
+[[package]]
+name = "pytest"
+version = "7.2.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "attrs" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "iniconfig" },
+    { name = "packaging" },
+    { name = "pluggy" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/0b/21/055f39bf8861580b43f845f9e8270c7786fe629b2f8562ff09007132e2e7/pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59", size = 1300608 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/67/68/a5eb36c3a8540594b6035e6cdae40c1ef1b6a2bfacbecc3d1a544583c078/pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71", size = 316791 },
+]
+
+[[package]]
+name = "pytest-check"
+version = "1.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "pytest" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/6b/7a/9a136718295d3e13bd04a65341f0df55e756062cff9a9730898a98b369d5/pytest-check-1.3.0.tar.gz", hash = "sha256:a387968d62525738cd9f36a528013316d7d915cf0ccf5be146a38e7fffa0bba9", size = 23763 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/e8/f4/fd61f915376ed102c02295afe748452129d722948a62cafd4e9f8db62ac0/pytest_check-1.3.0-py3-none-any.whl", hash = "sha256:87b9aa6dde0fff7968f7d703591c18f80d110c852affecf4d5be9fa75d9b1ef2", size = 11891 },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
+]
+
+[[package]]
+name = "pytz"
+version = "2025.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 },
+]
+
+[[package]]
+name = "setuptools"
+version = "65.6.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b6/21/cb9a8d0b2c8597c83fce8e9c02884bce3d4951e41e807fc35791c6b23d9a/setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75", size = 2617699 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/ef/e3/29d6e1a07e8d90ace4a522d9689d03e833b67b50d1588e693eec15f26251/setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", size = 1233963 },
+]
+
+[[package]]
+name = "simpy"
+version = "3.0.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/de/a028279676bc2ca3ad760fc1e2e4bb9b17b4d28e98b471dbed99d013aa6c/simpy-3.0.13.tar.gz", hash = "sha256:dd8c16ca3cff1574c99fe9f5ea4019c631c327f2bdc842e8b1a5c55f5e3e9d27", size = 410773 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/22/f7/6eeb75eddd6e64a31f7f8b406a1a1e0d9e85622fc162399f3f84eb4c9a05/simpy-3.0.13-py2.py3-none-any.whl", hash = "sha256:b588d7074bcbf400323d575f3aa95e47f152bce56cdf1f58d705846262f93d81", size = 29122 },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
+]
+
+[[package]]
+name = "termcolor"
+version = "2.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/19/da/ff1f0906818a5bd2e69e773d88801ca3c9e92d0d7caa99db1665658819ea/termcolor-2.1.1.tar.gz", hash = "sha256:67cee2009adc6449c650f6bcf3bdeed00c8ba53a8cda5362733c53e0a39fb70b", size = 10831 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/c3/23/16f4cdb09368524cd7cf47c2950663dd197a6c180cd5b6db01dcb65c5135/termcolor-2.1.1-py3-none-any.whl", hash = "sha256:fa852e957f97252205e105dd55bbc23b419a70fec0085708fc0515e399f304fd", size = 6201 },
+]
+
+[[package]]
+name = "tqdm"
+version = "4.67.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
+]
+
+[[package]]
+name = "win32-setctime"
+version = "1.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 },
+]
diff --git a/.clang-format b/omnetpp/.clang-format
similarity index 100%
rename from .clang-format
rename to omnetpp/.clang-format
diff --git a/omnetpp/modules/CosimaScheduler.cc b/omnetpp/modules/CosimaScheduler.cc
index a02eed0..174e941 100644
--- a/omnetpp/modules/CosimaScheduler.cc
+++ b/omnetpp/modules/CosimaScheduler.cc
@@ -134,11 +134,11 @@ class Message
     int getByteSize()
     {
         if (this->messageType == INFO_MESSAGE) {
-            return this->infoMessage.ByteSize();
+            return this->infoMessage.ByteSizeLong();
         } else if (this->messageType == SYNCHRONISATION_MESSAGE) {
-            return this->syncMessage.ByteSize();
+            return this->syncMessage.ByteSizeLong();
         } else if (this->messageType == INFRASTRUCTURE_MESSAGE) {
-            return this->infrastructureMessage.ByteSize();
+            return this->infrastructureMessage.ByteSizeLong();
         }
         return -1;
     }
@@ -283,13 +283,14 @@ CosimaScheduler::getCurrentTime()
     strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);
 
     char currentTime[84] = "";
-    sprintf(currentTime, "%s:%d", buffer, usec);
+    sprintf(currentTime, "%s.%.6d", buffer, usec);
     return currentTime;
 }
 
 void
 CosimaScheduler::log(std::string info, std::string logLevel)
 {
+    EV << info << endl;
     if (logLevel.compare("warning") == 0) {
         printCurrentTime();
         std::cout << FRED(" | WARNING | OMNeT++: ");
@@ -709,6 +710,13 @@ CosimaScheduler::informCoupledSimulationAboutWaiting()
 void
 CosimaScheduler::receive()
 {
+    auto future = std::async(std::launch::async, Receiver(), listenerSocket);
+    std::future_status status;
+    do {
+        getEnvir()->idle();
+        status = future.wait_for(std::chrono::milliseconds(100));
+    } while (status != std::future_status::ready);
+
     while (true) {
         auto returnValue =
           std::async(std::launch::async, Receiver(), listenerSocket).get();
@@ -791,6 +799,8 @@ CosimaScheduler::handleIcmpError(omnetpp::cEvent* event)
 cEvent*
 CosimaScheduler::takeNextEvent()
 {
+    receive();
+
     if (!initialMessageReceived) {
         log("Waiting for connection");
         std::this_thread::sleep_for(std::chrono::milliseconds(10));
@@ -819,6 +829,11 @@ CosimaScheduler::takeNextEvent()
 
     // use time of next event
     simtime_t eventSimtime = event->getArrivalTime();
+    if (eventSimtime >= maxAdvance) {
+        getEnvir()->idle();
+        return nullptr;
+    }
+
     if (eventSimtime < lastEventTime) {
         log("ATTENTION! CosimaScheduler: try to execute event for "
             "simtime " +
@@ -830,11 +845,6 @@ CosimaScheduler::takeNextEvent()
     }
     lastEventTime = eventSimtime;
 
-    if (not eventScheduled) {
-        receive();
-    }
-
-
     // remove event from FES and return it
     cEvent* tmp = sim->getFES()->removeFirst();
     ASSERT(tmp == event);
@@ -921,7 +931,7 @@ CosimaScheduler::sendMsgGroupToCoupledSimulation(bool isWaitingMsg)
     for (auto message : newMessagesList) {
         auto byteSize = message.getByteSize();
 
-        if (msgGroup.ByteSize() + byteSize >=
+        if (msgGroup.ByteSizeLong() + byteSize >=
             (MAX_BYTE_SIZE_PER_MSG -
              100)) { // 3 bytes for "END" and 3 bytes for size
             // message size is outside boundaries -> add message group to list
@@ -1014,9 +1024,6 @@ CosimaScheduler::sendToCoupledSimulation(cMessage* reply)
             log("CosimaScheduler: request to send message for the same step " +
                 std::to_string(currentStep) + " back to coupled simulation.");
         } else {
-            // get scheduler module
-            CosimaSchedulerModule* schedulerModuleObject =
-              dynamic_cast(schedulerModule);
             CosimaCtrlEvent* endOfStepEvent =
               new CosimaCtrlEvent("send message to coupled simulation");
             endOfStepEvent->setCtrlType(ControlType::EndOfStep);
diff --git a/omnetpp/modules/CosimaScheduler.h b/omnetpp/modules/CosimaScheduler.h
index fc4ae42..3db7a8b 100644
--- a/omnetpp/modules/CosimaScheduler.h
+++ b/omnetpp/modules/CosimaScheduler.h
@@ -47,6 +47,19 @@ class CosimaScheduler : public omnetpp::cScheduler
     // save time of last event
     omnetpp::simtime_t lastEventTime;
 
+    /**
+     * Current max_advance; this should be the minimum of the max_advance from
+     * mosaik and the time of our current reply.
+     */
+    omnetpp::simtime_t maxAdvance;
+
+    /**
+     * List of messages to be sent back to mosaik.  When adding a reply to this
+     * list, `maxAdvance` should be updated to the reply's time if it is earlier
+     * than the current `maxAdvance`.
+     */
+    std::list replies;
+
     // TCP port to coupled simulation
     auto static const PORT = 4242;
 
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 57b6d3f..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-arrow==1.2.3
-json-tricks==3.16.1
-matplotlib==3.6.2
-mosaik==3.1.0
-mosaik_api==3.0.3
-mosaik-householdsim==2.1.0
-numpy==1.24.0
-pandas==1.5.2
-protobuf==3.13.0
-psutil==5.9.4
-pytest==7.2.0
-pytest_check==1.3.0
-setuptools==65.6.3
-simpy==3.0.13
-termcolor==2.1.1
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 516577c..0000000
--- a/setup.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import setuptools
-from pathlib import Path
-
-with open('requirements.txt') as f:
-    required = f.read().splitlines()
-
-this_directory = Path(__file__).parent
-long_description = (this_directory / "README.md").read_text()
-
-setuptools.setup(
-    name="cosima",
-    version="0.3.4",
-    author="Cosima Team",
-    author_email="emilie.frost@offis.de",
-    description="COmmunication SIMulation with Agents",
-    long_description=long_description,
-    long_description_content_type="text/markdown",
-    url="https://gitlab.com/mosaik/examples/cosima.git",
-    packages=setuptools.find_packages(),
-    install_requires=required,
-    classifiers=[
-        "Programming Language :: Python :: 3",
-        "Operating System :: OS Independent",
-        'License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)',
-    ],
-    python_requires='>=3.8',
-    include_package_data=True,
-)