YouDunIt/modules/you_done_it/ydi_server.h
2025-10-09 12:16:43 +02:00

51 lines
1.3 KiB
C++

#ifndef YDI_SERVER_H
#define YDI_SERVER_H
#include "ydi_networking.h"
#include <cassert>
#include <core/io/image.h>
#include <core/string/ustring.h>
#include <core/templates/vector.h>
#include <zmq_addon.hpp>
namespace ydi::server {
void open();
void close();
namespace receive {
bool isRevealed(ClueID id);
Ref<Image> clueImage(ClueID id);
}
namespace send {
void announceConclusion(ClueID method, ClueID motive, ClueID murderer);
}
}
template <typename TArg>
void extend_multipart(zmq::multipart_t &, TArg const &arg);
template <>
void extend_multipart(zmq::multipart_t &mpart, std::string const &string) {
mpart.addstr(string);
}
template <typename TArg>
void extend_multipart(zmq::multipart_t &mpart, TArg const &arg) {
std::string as_string{ std::to_string(arg) };
mpart.addstr(as_string);
}
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, arg, args...);
}
template <typename TArg, typename... TArgs>
zmq::multipart_t make_multipart(std::string const &target, TArg const &arg, TArgs const &... args) {
zmq::multipart_t mpart{};
mpart.addstr(target);
extend_multipart(mpart, arg, args...);
return mpart;
}
#endif // !YDI_SERVER_H