Etterna 0.75.1
Loading...
Searching...
No Matches
ETTProtocol.h
1#pragma once
2
3#include "NetProtocol.h"
4#include "NetworkConstants.h"
5
6#include "rapidjson/document.h"
7#include <curl/curl.h>
8
9#include <string>
10#include <mutex>
11#include <thread>
12#include <functional>
13
15struct HighScore;
16
17// Websockets using websocketpp sending json
19{
20 public:
22
23 auto Connect(NetworkSyncManager* n,
24 unsigned short port,
25 std::string address) -> bool override;
26 void close() override;
27
28 void Update(NetworkSyncManager* n, float fDeltaTime) override;
29
30 void Login(std::string user, std::string pass) override;
31 void Logout() override;
32
33 void SendChat(const std::string& message,
34 std::string tab,
35 int type) override;
36
37 void CreateNewRoom(std::string name,
38 std::string desc,
39 std::string password) override;
40 void EnterRoom(std::string name, std::string password) override;
41 void LeaveRoom(NetworkSyncManager* n) override;
42 bool InRoom() const { return inRoom; }
43 std::string GetRoomName() { return roomName; }
44 bool CreatingRoom() const { return creatingRoom; }
45
46 void ReportSongOver(NetworkSyncManager* n) override;
47
48 void SelectUserSong(NetworkSyncManager* n, Song* song) override;
49
50 void OnMusicSelect() override;
51
52 void OnOptions() override;
53 void OffOptions() override;
54
55 void OnEval() override;
56 void OffEval() override;
57
58 void SendMPLeaderboardUpdate(float wife, std::string& jdgstr) override;
59
60 void ReportHighScore(HighScore* hs, PlayerStageStats& pss) override;
61
62 // triggered by button presses in gameplay
63 void ReportReplayInput(NetworkSyncManager* n,
64 bool isPress,
65 int col,
66 int row,
67 float fMusicSeconds,
68 float fNoteOffset,
69 int tapNoteType,
70 int tapNoteSubType) override;
71
72 // triggered by a miss in gameplay
73 void ReportReplayMiss(NetworkSyncManager* n,
74 int col,
75 int row,
76 int tapNoteType,
77 int tapNoteSubType) override;
78
79 // triggered by completing or dropping a hold in gameplay
80 void ReportReplayHold(NetworkSyncManager* n,
81 int col,
82 int row,
83 int subType) override;
84
85 void ReportV2Data(int col, int row, float offset, int tapNoteType) override;
86
87 // triggered by hitting a mine in gameplay
88 void ReportReplayMine(NetworkSyncManager* n, int row, int col) override;
89 void Send(const std::string& str);
90
91private:
92 std::mutex sendBufferMutex;
93 std::mutex messageBufferMutex;
94 std::mutex curlMutex;
95 CURL* curl;
96
97 std::unique_ptr<std::thread> receivingThread;
98 std::unique_ptr<std::thread> sendingThread;
99
100 std::atomic_bool stopPolling = false;
101 std::atomic_bool stopSending = false;
102 void LaunchPollingThread();
103 void LaunchSendingThread();
104
105 // 0 = ready, 1 = playing
106 // 2 = evalScreen, 3 = options
107 // 4 = notReady(unkown reason)
108 int state = 0;
109 std::string roomName;
110 std::string roomDesc;
111 bool creatingRoom{ false };
112 bool inRoom{ false };
113
114 // login timeout stuff
115 bool waitingForTimeout{ false };
116 clock_t timeoutStart = 0;
117 double timeout = 0;
118 std::function<void(void)> onTimeout;
119
120 // json docs parsed from curl input handled at update
121 std::vector<std::unique_ptr<rapidjson::Document>> newMessages;
122 std::vector<std::string> messagesToSend{};
123 unsigned int msgId{ 0 };
124
125 rapidjson::Document newMsg(const ETTClientMessageTypes& msgType);
126 void completeAndSend(rapidjson::Document& doc);
127
128 void handleLogin(rapidjson::Value& payload);
129 void handleHello(rapidjson::Value& payload);
130 void handleReceiveScore(rapidjson::Value& payload);
131 void handlePing();
132 void handleSelectChart(rapidjson::Value& payload);
133 void handleStartChart(rapidjson::Value& payload);
134 void handleReceiveChat(rapidjson::Value& payload);
135 void handleMPLeaderboardUpdate(rapidjson::Value& payload);
136 void handleCreateRoomResponse(rapidjson::Value& payload);
137 void handleChartRequest(rapidjson::Value& payload);
138 void handleEnterRoomResponse(rapidjson::Value& payload);
139 void handleNewRoom(rapidjson::Value& payload);
140 void handleDeleteRoom(rapidjson::Value& payload);
141 void handleUpdateRoom(rapidjson::Value& payload);
142 void handleLobbyUserlist(rapidjson::Value& payload);
143 void handleLobbyUserlistUpdate(rapidjson::Value& payload);
144 void handleRoomlist(rapidjson::Value& payload);
145 void handleRoomPacklist(rapidjson::Value& payload);
146 void handleRoomUserlist(rapidjson::Value& payload);
147 void handleGameplayReplayUpdate(rapidjson::Value& payload);
148 void handleSpectatingUpdate(rapidjson::Value& payload);
149
150 void FindJsonChart(NetworkSyncManager* n, rapidjson::Value& ch);
151
152
153};
Definition ETTProtocol.h:19
Definition NetProtocol.h:11
Definition NetworkSyncManager.h:82
Contains statistics for one stage of play - either one song, or a whole course.
Definition PlayerStageStats.h:19
Holds all music metadata and steps for one song.
Definition Song.h:65
The high score that is earned by a player.
Definition HighScore.h:18