acadia/lib/mammoth/ipc/port_client.h

38 lines
744 B
C
Raw Normal View History

#pragma once
#include <glacier/status/error_or.h>
#include <glacier/string/string.h>
#include <stdint.h>
#include <zcall.h>
namespace mmth {
class PortClient {
public:
PortClient() {}
static PortClient AdoptPort(z_cap_t port_cap);
template <typename T>
z_err_t WriteMessage(const T& obj, z_cap_t cap);
glcr::ErrorCode WriteString(glcr::String str, z_cap_t cap);
glcr::ErrorCode WriteByte(uint8_t byte);
z_cap_t cap() { return port_cap_; }
bool empty() { return port_cap_ == 0; }
private:
z_cap_t port_cap_ = 0;
PortClient(z_cap_t port_cap);
};
template <typename T>
z_err_t PortClient::WriteMessage(const T& obj, z_cap_t cap) {
return ZPortSend(port_cap_, sizeof(obj), &obj, 1, &cap);
}
} // namespace mmth