#include "data.hpp" #include #include #include #include #include #include namespace client { void sendMsg(int msqid, data::RequestMsg *msg) { if (msgsnd(msqid, msg, sizeof(data::RequestMsg) - sizeof(long), 0) < 0) { BOOST_LOG_TRIVIAL(fatal) << "send error " << strerror(errno); exit(1); } } std::string recvMsg(int msqid) { data::ResponseMsg msg; if (msgrcv(msqid, &msg, sizeof(data::ResponseMsg) - sizeof(long), data::clientbound_msg, 0) < 0) { BOOST_LOG_TRIVIAL(fatal) << "receive error " << strerror(errno); exit(1); } return std::string(&msg.data[0], msg.datalen); } void map(key_t key) { std::string inp; std::cin >> inp; auto msqid = msgget(key, 0664); if (msqid < 0) { BOOST_LOG_TRIVIAL(fatal) << "msgget fail"; exit(0); } data::RequestMsg req; req.msgtype = data::serverbound_msg; req.type = data::map; req.datalen = inp.size(); std::copy(inp.begin(), inp.end(), req.data); sendMsg(msqid, &req); std::cout << recvMsg(msqid) << std::endl; } void resolveResourceLoc(key_t key) { std::string inp; std::cin >> inp; auto msqid = msgget(key, 0664); if (msqid < 0) { BOOST_LOG_TRIVIAL(fatal) << "msgget fail"; exit(0); } data::RequestMsg req; req.msgtype = data::serverbound_msg; req.type = data::resolve_resource_loc; req.datalen = inp.size(); std::copy(inp.begin(), inp.end(), req.data); sendMsg(msqid, &req); std::cout << recvMsg(msqid) << std::endl; } } // namespace client