Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <cstdint>
  2. #include <iostream>
  3. #include <variant>
  4.  
  5. enum class TransportTypeID : uint32_t
  6. {
  7.     Error    = 0,
  8.     End      = 1,
  9.     Request  = 2,
  10.     Response = 3,
  11.     Stream   = 4
  12. };
  13.  
  14. template < TransportTypeID ID, typename T = void >
  15. struct TransportType
  16. {
  17.     static constexpr uint32_t typeID = static_cast< uint32_t >( ID );
  18.     T                         data;
  19. };
  20.  
  21. template < TransportTypeID ID >
  22. struct TransportType< ID, void >
  23. {
  24.     static constexpr uint32_t typeID = static_cast< uint32_t >( ID );
  25. };
  26.  
  27. template < TransportTypeID ID, typename T >
  28. struct Transmission
  29. {
  30.     uint64_t               length;
  31.     uint64_t               id;
  32.     TransportType< ID, T > data;
  33. };
  34.  
  35. namespace management
  36. {
  37. enum class RequestID : uint32_t
  38. {
  39.     Identify = 0,
  40.     Connect  = 1
  41. };
  42.  
  43. struct Identify
  44. {
  45.     static constexpr uint32_t typeID =
  46.         static_cast< uint32_t >( RequestID::Identify );
  47.  
  48.     struct Request
  49.     {
  50.         uint32_t protocol_version;
  51.     };
  52.  
  53.     struct Response
  54.     {
  55.         uint32_t    protocol_version;
  56.         std::string id;
  57.         uint32_t    service_protocol_version;
  58.     };
  59. };
  60.  
  61. struct Connect
  62. {
  63.     static constexpr uint32_t typeID =
  64.         static_cast< uint32_t >( RequestID::Connect );
  65.  
  66.     struct Request
  67.     {
  68.         uint32_t protocol_version;
  69.         uint32_t connection_id;
  70.         uint32_t rpc_interval_timeout_ms;
  71.     };
  72.  
  73.     struct Response
  74.     {
  75.         uint32_t connection_id;
  76.         uint16_t port;
  77.     };
  78. };
  79.  
  80. } // namespace management
  81.  
  82.  
  83. int
  84. main()
  85. {
  86.     Transmission< TransportTypeID::Request, management::Identify > a;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement