2026-07-18 14:31:15 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
2026-07-22 17:34:44 +02:00
|
|
|
#include "ProtobufMessages.hpp"
|
2026-07-18 14:31:15 +02:00
|
|
|
#include "SendChatMessage.hpp"
|
|
|
|
|
#include "ChatClientError.hpp"
|
|
|
|
|
#include "models/ChatMessage.hpp"
|
2026-07-22 17:34:44 +02:00
|
|
|
#include "message_protocol/MessageEndpoint.hpp"
|
2026-07-18 14:31:15 +02:00
|
|
|
#include <functional>
|
2026-07-22 17:34:44 +02:00
|
|
|
#include <memory>
|
2026-07-18 14:31:15 +02:00
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
namespace tw::chat {
|
|
|
|
|
|
|
|
|
|
class ChatClient {
|
2026-07-22 17:34:44 +02:00
|
|
|
std::unique_ptr<msg::MessageEndpoint> m_endpoint;
|
|
|
|
|
msg::MessageConnection* m_server;
|
|
|
|
|
ProtobufMessages m_messages;
|
2026-07-18 14:31:15 +02:00
|
|
|
|
|
|
|
|
std::function<void(ChatMessage)> m_on_message;
|
|
|
|
|
std::function<void(tl::expected<void, ChatClientError>)> m_on_send_response;
|
|
|
|
|
std::function<void(uint32_t, tl::expected<void, ChatClientError>)> m_on_join_response;
|
|
|
|
|
std::function<void(uint32_t, tl::expected<void, ChatClientError>)> m_on_leave_response;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
ChatClient(const std::string& server_address, int16_t port);
|
|
|
|
|
|
|
|
|
|
void update();
|
|
|
|
|
|
|
|
|
|
tl::expected<void, ChatClientError> send_mesg(SendChatMessage message);
|
|
|
|
|
|
|
|
|
|
// Called for every broadcast message received on a subscribed channel.
|
|
|
|
|
void set_on_message(std::function<void(ChatMessage)> handler);
|
|
|
|
|
|
|
|
|
|
// Called when the server responds to send/join/leave requests.
|
|
|
|
|
// tl::expected holds void on success, ChatClientError on failure.
|
|
|
|
|
void set_on_send_response(std::function<void(tl::expected<void, ChatClientError>)> handler);
|
|
|
|
|
void set_on_join_response(std::function<void(uint32_t channel_id, tl::expected<void, ChatClientError>)> handler);
|
|
|
|
|
void set_on_leave_response(std::function<void(uint32_t channel_id, tl::expected<void, ChatClientError>)> handler);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|