1#ifndef YAZE_APP_PLATFORM_WASM_MESSAGE_QUEUE_H_
2#define YAZE_APP_PLATFORM_WASM_MESSAGE_QUEUE_H_
7#include <emscripten/val.h>
17#include "absl/status/status.h"
18#include "nlohmann/json.hpp"
31class WasmMessageQueue {
36 struct QueuedMessage {
57 using MessageSender = std::function<absl::Status(
const std::string& type,
const std::string& payload)>;
69 std::string
Enqueue(
const std::string& message_type,
const std::string& payload);
76 replay_complete_callback_ = callback;
84 status_change_callback_ = callback;
140 auto_persist_ = enable;
148 max_queue_size_ = max_size;
156 message_expiry_seconds_ = seconds;
173 std::string GenerateMessageId();
176 size_t CalculateTotalBytes()
const;
179 void NotifyStatusChange();
185 std::deque<QueuedMessage> queue_;
186 std::vector<QueuedMessage> failed_messages_;
187 mutable std::mutex queue_mutex_;
190 bool auto_persist_ =
true;
191 size_t max_queue_size_ = 1000;
192 double message_expiry_seconds_ = 86400.0;
195 bool is_replaying_ =
false;
196 size_t total_enqueued_ = 0;
197 size_t total_replayed_ = 0;
198 size_t total_failed_ = 0;
205 static constexpr const char* kStorageKey =
"collaboration_message_queue";
220#include "absl/status/status.h"
245 using MessageSender = std::function<absl::Status(
const std::string&,
const std::string&)>;
251 std::string
Enqueue(
const std::string&,
const std::string&) {
return ""; }
261 return absl::UnimplementedError(
"Message queue requires WASM build");
264 return absl::UnimplementedError(
"Message queue requires WASM build");