72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <zmq.h>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <zmq.hpp>
|
|
#include <zmq_addon.hpp>
|
|
|
|
namespace ydi {
|
|
enum MessageType {
|
|
// connection management messages
|
|
CONNECT = 1u,
|
|
OK,
|
|
NOK,
|
|
HEART,
|
|
BEAT,
|
|
// gameplay messages
|
|
REVEAL,
|
|
// end of messages
|
|
MESSAGE_TYPE_INVALID
|
|
};
|
|
|
|
enum ClueID {
|
|
FIRST_CLUE,
|
|
CLUE_MAX
|
|
};
|
|
|
|
enum ConnectionStatus {
|
|
DISCONNECTED,
|
|
CONNECTED,
|
|
AUTHENTICATED
|
|
};
|
|
|
|
enum NOKReason {
|
|
CLIENT_UNAUTHENTICATED,
|
|
NOK_REASON_INVALID //!< this means the value could not be parsed as a NOK reason, not that the reason is an invalid message.INVALID
|
|
};
|
|
|
|
MessageType to_message_type(zmq::message_t const &msg);
|
|
NOKReason to_nok_reason(zmq::message_t const &msg);
|
|
ClueID to_clue_id(zmq::message_t const &msg);
|
|
|
|
void extend_multipart(zmq::multipart_t &mpart, MessageType type);
|
|
void extend_multipart(zmq::multipart_t &mpart, ClueID type);
|
|
|
|
void extend_multipart(zmq::multipart_t &mpart, std::string const &string);
|
|
void extend_multipart(zmq::multipart_t &mpart, std::string_view const &strv);
|
|
void extend_multipart(zmq::multipart_t &mpart, char const *cstr);
|
|
void extend_multipart(zmq::multipart_t &mpart, int const &arg);
|
|
void extend_multipart(zmq::multipart_t &mpart, zmq::multipart_t const &right);
|
|
void extend_multipart(zmq::multipart_t &mpart);
|
|
|
|
template <typename TArg, typename... TArgs>
|
|
void extend_multipart(zmq::multipart_t &mpart, TArg const &arg, TArgs const &...args) {
|
|
extend_multipart(mpart, arg);
|
|
extend_multipart(mpart, args...);
|
|
}
|
|
|
|
template <typename TArg>
|
|
zmq::multipart_t multipart(TArg const &arg) {
|
|
zmq::multipart_t mpart{};
|
|
extend_multipart(mpart, arg);
|
|
return mpart;
|
|
}
|
|
|
|
template <typename TArg, typename... TArgs>
|
|
zmq::multipart_t multipart(TArg const &arg, TArgs const &...args) {
|
|
zmq::multipart_t mpart{ multipart(arg) };
|
|
extend_multipart(mpart, args...);
|
|
return mpart;
|
|
}
|
|
} //namespace ydi
|