Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdint>
- #include <iostream>
- #include <variant>
- enum class TransportTypeID : uint32_t
- {
- Error = 0,
- End = 1,
- Request = 2,
- Response = 3,
- Stream = 4
- };
- template < TransportTypeID ID, typename T = void >
- struct TransportType
- {
- static constexpr uint32_t typeID = static_cast< uint32_t >( ID );
- T data;
- };
- template < TransportTypeID ID >
- struct TransportType< ID, void >
- {
- static constexpr uint32_t typeID = static_cast< uint32_t >( ID );
- };
- template < TransportTypeID ID, typename T >
- struct Transmission
- {
- uint64_t length;
- uint64_t id;
- TransportType< ID, T > data;
- };
- namespace management
- {
- enum class RequestID : uint32_t
- {
- Identify = 0,
- Connect = 1
- };
- struct Identify
- {
- static constexpr uint32_t typeID =
- static_cast< uint32_t >( RequestID::Identify );
- struct Request
- {
- uint32_t protocol_version;
- };
- struct Response
- {
- uint32_t protocol_version;
- std::string id;
- uint32_t service_protocol_version;
- };
- };
- struct Connect
- {
- static constexpr uint32_t typeID =
- static_cast< uint32_t >( RequestID::Connect );
- struct Request
- {
- uint32_t protocol_version;
- uint32_t connection_id;
- uint32_t rpc_interval_timeout_ms;
- };
- struct Response
- {
- uint32_t connection_id;
- uint16_t port;
- };
- };
- } // namespace management
- int
- main()
- {
- Transmission< TransportTypeID::Request, management::Identify > a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement