yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
websocket_client.h
Go to the documentation of this file.
1#ifndef YAZE_APP_NET_WEBSOCKET_CLIENT_H_
2#define YAZE_APP_NET_WEBSOCKET_CLIENT_H_
3
4#include <functional>
5#include <map>
6#include <memory>
7#include <string>
8#include <thread>
9#include <vector>
10
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
13
14#ifdef YAZE_WITH_JSON
15#include "nlohmann/json.hpp"
16#endif
17
18namespace yaze {
19
20namespace net {
21
33
39 std::string session_id;
40 std::string session_code;
41 std::string session_name;
42 std::string host;
43 std::vector<std::string> participants;
44 std::string rom_hash;
46};
47
59 public:
60 // Message type callbacks
61 using MessageCallback = std::function<void(const nlohmann::json&)>;
62 using ErrorCallback = std::function<void(const std::string&)>;
63 using StateCallback = std::function<void(ConnectionState)>;
64
67
73 absl::Status Connect(const std::string& host, int port = 8765);
74
78 void Disconnect();
79
83 absl::StatusOr<SessionInfo> HostSession(const std::string& session_name,
84 const std::string& username,
85 const std::string& rom_hash,
86 bool ai_enabled = true);
87
91 absl::StatusOr<SessionInfo> JoinSession(const std::string& session_code,
92 const std::string& username);
93
97 absl::Status LeaveSession();
98
102 absl::Status SendChatMessage(const std::string& message,
103 const std::string& sender);
104
108 absl::Status SendRomSync(const std::string& diff_data,
109 const std::string& rom_hash,
110 const std::string& sender);
111
115 absl::Status ShareSnapshot(const std::string& snapshot_data,
116 const std::string& snapshot_type,
117 const std::string& sender);
118
122 absl::Status ShareProposal(const nlohmann::json& proposal_data,
123 const std::string& sender);
124
128 absl::Status VoteOnProposal(const std::string& proposal_id, bool approved,
129 const std::string& username);
130
134 absl::Status UpdateProposalStatus(const std::string& proposal_id,
135 const std::string& status);
136
140 absl::Status SendAIQuery(const std::string& query,
141 const std::string& username);
142
146 void OnMessage(const std::string& type, MessageCallback callback);
147
151 void OnError(ErrorCallback callback);
152
156 void OnStateChange(StateCallback callback);
157
161 ConnectionState GetState() const { return state_; }
162
166 absl::StatusOr<SessionInfo> GetSessionInfo() const;
167
172
176 bool InSession() const { return !current_session_.session_id.empty(); }
177
178 private:
179 // Implementation details (using native WebSocket or library)
180 class Impl;
181 std::unique_ptr<Impl> impl_;
182
185
186 // Callbacks
187 std::map<std::string, std::vector<MessageCallback>> message_callbacks_;
188 std::vector<ErrorCallback> error_callbacks_;
189 std::vector<StateCallback> state_callbacks_;
190
191 // Internal message handling
192 void HandleMessage(const std::string& message);
193 void HandleError(const std::string& error);
194 void SetState(ConnectionState state);
195
196 // Send raw message
197 absl::Status SendRaw(const nlohmann::json& message);
198};
199
200} // namespace net
201
202} // namespace yaze
203
204#endif // YAZE_APP_NET_WEBSOCKET_CLIENT_H_
WebSocket client for connecting to yaze-server.
void SetState(ConnectionState state)
absl::Status Connect(const std::string &host, int port=8765)
absl::StatusOr< SessionInfo > HostSession(const std::string &session_name, const std::string &username, const std::string &rom_hash, bool ai_enabled=true)
absl::Status ShareSnapshot(const std::string &snapshot_data, const std::string &snapshot_type, const std::string &sender)
absl::Status VoteOnProposal(const std::string &proposal_id, bool approved, const std::string &username)
std::function< void(ConnectionState)> StateCallback
absl::Status UpdateProposalStatus(const std::string &proposal_id, const std::string &status)
ConnectionState GetState() const
absl::Status ShareProposal(const nlohmann::json &proposal_data, const std::string &sender)
void OnStateChange(StateCallback callback)
absl::StatusOr< SessionInfo > GetSessionInfo() const
std::function< void(const std::string &)> ErrorCallback
std::unique_ptr< Impl > impl_
void OnMessage(const std::string &type, MessageCallback callback)
absl::Status SendChatMessage(const std::string &message, const std::string &sender)
void OnError(ErrorCallback callback)
std::function< void(const nlohmann::json &)> MessageCallback
std::vector< StateCallback > state_callbacks_
std::vector< ErrorCallback > error_callbacks_
std::map< std::string, std::vector< MessageCallback > > message_callbacks_
absl::StatusOr< SessionInfo > JoinSession(const std::string &session_code, const std::string &username)
absl::Status SendAIQuery(const std::string &query, const std::string &username)
absl::Status SendRomSync(const std::string &diff_data, const std::string &rom_hash, const std::string &sender)
void HandleMessage(const std::string &message)
absl::Status SendRaw(const nlohmann::json &message)
void HandleError(const std::string &error)
ConnectionState
WebSocket connection states.
Information about the current collaboration session.
std::vector< std::string > participants