Skip to content
Snippets Groups Projects
Commit 366e88f9 authored by Millian Poquet's avatar Millian Poquet
Browse files

c++ client

parent aab44d5f
Branches
No related tags found
No related merge requests found
project('client-cpp', 'cpp',
version: '0.1.0',
license: 'MIT',
default_options: ['cpp_std=c++17']
)
# Dependencies
libzmq_dep = dependency('libzmq')
protocol_dep = dependency('protocol')
deps = [
libzmq_dep,
protocol_dep
]
client_cpp = executable('client-cpp', [
'src/main.cpp',
'src/misc.cpp', 'src/misc.hpp'
],
include_directories: 'src',
dependencies: deps,
install: true
)
#include "misc.hpp"
int main()
{
client_main_loop();
return 0;
}
#include "misc.hpp"
#include <zmq.h>
#include <protocol/hello.pb.h>
void client_main_loop(void)
{
auto context = zmq_ctx_new();
assert(context != nullptr);
auto socket = zmq_socket(context, ZMQ_REP);
assert(socket != nullptr);
int rc = zmq_bind(socket, "tcp://*:28000");
assert(rc == 0);
zmq_msg_t msg;
hello::Order order;
std::string msg_buffer_str;
// Round 1: hello
zmq_msg_init(&msg);
if (zmq_msg_recv(&msg, socket, 0) == -1)
throw std::runtime_error(std::string("cannot read message on socket (errno=") + strerror(errno) + ")");
zmq_msg_close(&msg);
order.mutable_hello()->set_name("client-cpp");
order.SerializeToString(&msg_buffer_str);
if (zmq_send(socket, msg_buffer_str.data(), msg_buffer_str.size(), 0) == -1)
throw std::runtime_error(std::string("cannot send message on socket (errno=") + strerror(errno) + ")");
// Round 2: compute flops
zmq_msg_init(&msg);
if (zmq_msg_recv(&msg, socket, 0) == -1)
throw std::runtime_error(std::string("cannot read message on socket (errno=") + strerror(errno) + ")");
zmq_msg_close(&msg);
order.mutable_compute_flops()->set_flop_amount(1e9);
order.SerializeToString(&msg_buffer_str);
if (zmq_send(socket, msg_buffer_str.data(), msg_buffer_str.size(), 0) == -1)
throw std::runtime_error(std::string("cannot send message on socket (errno=") + strerror(errno) + ")");
// Round 3: bye
zmq_msg_init(&msg);
if (zmq_msg_recv(&msg, socket, 0) == -1)
throw std::runtime_error(std::string("cannot read message on socket (errno=") + strerror(errno) + ")");
zmq_msg_close(&msg);
order.mutable_bye();
order.SerializeToString(&msg_buffer_str);
if (zmq_send(socket, msg_buffer_str.data(), msg_buffer_str.size(), 0) == -1)
throw std::runtime_error(std::string("cannot send message on socket (errno=") + strerror(errno) + ")");
zmq_close(socket);
zmq_ctx_destroy(context);
}
#pragma once
void client_main_loop(void);
...@@ -58,6 +58,23 @@ let self = rec { ...@@ -58,6 +58,23 @@ let self = rec {
zeromq zeromq
]; ];
}; };
client-cpp = pkgs.stdenv.mkDerivation {
pname = "client-cpp";
version = "local";
src = pkgs.lib.sourceByRegex ./client-cpp [
"meson\.build"
"src"
"src/.*\.cpp"
"src/.*\.hpp"
];
buildInputs = with pkgs; [
protocol-cpp
meson
pkg-config
ninja
zeromq
];
};
}; };
in in
self self
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment