YouDunIt/modules/you_done_it/ydi_networking.h

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