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(
84 const std::string& session_name,
85 const std::string& username,
86 const std::string& rom_hash,
87 bool ai_enabled = true);
88
92 absl::StatusOr<SessionInfo> JoinSession(
93 const std::string& session_code,
94 const std::string& username);
95
99 absl::Status LeaveSession();
100
104 absl::Status SendChatMessage(
105 const std::string& message,
106 const std::string& sender);
107
111 absl::Status SendRomSync(
112 const std::string& diff_data,
113 const std::string& rom_hash,
114 const std::string& sender);
115
119 absl::Status ShareSnapshot(
120 const std::string& snapshot_data,
121 const std::string& snapshot_type,
122 const std::string& sender);
123
127 absl::Status ShareProposal(
128 const nlohmann::json& proposal_data,
129 const std::string& sender);
130
134 absl::Status VoteOnProposal(
135 const std::string& proposal_id,
136 bool approved,
137 const std::string& username);
138
142 absl::Status UpdateProposalStatus(
143 const std::string& proposal_id,
144 const std::string& status);
145
149 absl::Status SendAIQuery(
150 const std::string& query,
151 const std::string& username);
152
156 void OnMessage(const std::string& type, MessageCallback callback);
157
161 void OnError(ErrorCallback callback);
162
166 void OnStateChange(StateCallback callback);
167
171 ConnectionState GetState() const { return state_; }
172
176 absl::StatusOr<SessionInfo> GetSessionInfo() const;
177
182
186 bool InSession() const { return !current_session_.session_id.empty(); }
187
188 private:
189 // Implementation details (using native WebSocket or library)
190 class Impl;
191 std::unique_ptr<Impl> impl_;
192
195
196 // Callbacks
197 std::map<std::string, std::vector<MessageCallback>> message_callbacks_;
198 std::vector<ErrorCallback> error_callbacks_;
199 std::vector<StateCallback> state_callbacks_;
200
201 // Internal message handling
202 void HandleMessage(const std::string& message);
203 void HandleError(const std::string& error);
204 void SetState(ConnectionState state);
205
206 // Send raw message
207 absl::Status SendRaw(const nlohmann::json& message);
208};
209
210} // namespace net
211
212} // namespace yaze
213
214#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.
Main namespace for the application.
Information about the current collaboration session.
std::vector< std::string > participants