DDraceNetwork Documentation
Loading...
Searching...
No Matches
scoreworker.h
Go to the documentation of this file.
1#ifndef GAME_SERVER_SCOREWORKER_H
2#define GAME_SERVER_SCOREWORKER_H
3
4#include <engine/map.h>
8
9#include <game/server/save.h>
10#include <game/voting.h>
11
12#include <memory>
13#include <optional>
14#include <string>
15#include <utility>
16#include <vector>
17
18class IDbConnection;
19class IGameController;
20
21enum
22{
24 TIMESTAMP_STR_LENGTH = 20, // 2019-04-02 19:38:36
25};
26
28{
30
31 enum
32 {
34 };
35
45 union
46 {
48 char m_aBroadcast[1024];
49 struct
50 {
51 std::optional<float> m_Time;
53 int m_Birthday; // 0 indicates no birthday
55 } m_Info = {};
56 struct
57 {
59 char m_aServer[32 + 1];
62 } m_Data = {}; // PLAYER_INFO
63
64 void SetVariant(Variant v);
65};
66
68{
69 std::optional<float> m_CurrentRecord = std::nullopt;
70};
71
73{
74 CSqlLoadBestTimeRequest(std::shared_ptr<CScoreLoadBestTimeResult> pResult) :
75 ISqlData(std::move(pResult))
76 {
77 }
78
79 // current map
81};
82
84{
85 CSqlPlayerRequest(std::shared_ptr<CScorePlayerResult> pResult) :
86 ISqlData(std::move(pResult))
87 {
88 }
89
90 // object being requested, either map (128 bytes) or player (16 bytes)
92 // current map
95 // relevant for /top5 kind of requests
97 char m_aServer[5];
98};
99
101{
102 CScoreRandomMapResult(int ClientId) :
103 m_ClientId(ClientId)
104 {
105 m_aMap[0] = '\0';
106 m_aMessage[0] = '\0';
107 }
110 char m_aMessage[512];
111};
112
114{
115 CSqlRandomMapRequest(std::shared_ptr<CScoreRandomMapResult> pResult) :
116 ISqlData(std::move(pResult))
117 {
118 }
119
125};
126
128{
129 CSqlScoreData(std::shared_ptr<CScorePlayerResult> pResult) :
130 ISqlData(std::move(pResult))
131 {
132 }
133
137
139 float m_Time;
142 int m_Num;
145};
146
148{
149 CScoreSaveResult(int PlayerId, const char *pPlayerName, const char *pServer) :
151 m_RequestingPlayer(PlayerId)
152 {
153 m_aMessage[0] = '\0';
154 m_aBroadcast[0] = '\0';
155 m_aCode[0] = '\0';
156 m_aGeneratedCode[0] = '\0';
157 str_copy(m_aRequestingPlayer, pPlayerName);
158 str_copy(m_aServer, pServer);
159 }
160 enum
161 {
165 // load team in the following two cases
170 char m_aMessage[512];
171 char m_aBroadcast[512];
176 char m_aServer[5];
177 char m_aCode[128];
179};
180
196
198{
199 CSqlTeamSaveData(std::shared_ptr<CScoreSaveResult> pResult) :
200 ISqlData(std::move(pResult))
201 {
202 }
203
206 char m_aCode[128];
208 char m_aServer[5];
209};
210
212{
213 CSqlTeamLoadRequest(std::shared_ptr<CScoreSaveResult> pResult) :
214 ISqlData(std::move(pResult))
215 {
216 }
217
218 char m_aCode[128];
221 // struct holding all player names in the team or an empty string
225};
226
228{
229public:
231 {
232 Reset();
233 }
234
235 void Reset()
236 {
237 m_BestTime.reset();
238 for(float &BestTimeCp : m_aBestTimeCp)
239 BestTimeCp = 0;
240
241 m_RecordStopTick = -1;
242 }
243
244 void Set(float Time, const float aTimeCp[NUM_CHECKPOINTS])
245 {
246 m_BestTime = Time;
247 for(int i = 0; i < NUM_CHECKPOINTS; i++)
248 m_aBestTimeCp[i] = aTimeCp[i];
249 }
250
251 void SetBestTimeCp(const float aTimeCp[NUM_CHECKPOINTS])
252 {
253 for(int i = 0; i < NUM_CHECKPOINTS; i++)
254 m_aBestTimeCp[i] = aTimeCp[i];
255 }
256
257 std::optional<float> m_BestTime;
259
262};
263
265{
268 unsigned int m_NumNames;
269 CTeamrank();
270
271 // Assumes that a database query equivalent to
272 //
273 // SELECT TeamId, Name [, ...] -- the order is important
274 // FROM record_teamrace
275 // ORDER BY TeamId, Name
276 //
277 // was executed and that the result line of the first team member is already selected.
278 // Afterwards the team member of the next team is selected.
279 //
280 // Returns true on SQL failure
281 //
282 // if another team can be extracted
283 bool NextSqlResult(IDbConnection *pSqlServer, bool *pEnd, char *pError, int ErrorSize);
284
285 bool SamePlayers(const std::vector<std::string> *pvSortedNames);
286
287 static bool GetSqlTop5Team(IDbConnection *pSqlServer, bool *pEnd, char *pError, int ErrorSize, char (*paMessages)[512], int *StartLine, int Count);
288};
289
291{
292 static bool LoadBestTime(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
293
294 static bool RandomMap(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
295 static bool RandomUnfinishedMap(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
296 static bool MapVote(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
297
298 static bool LoadPlayerData(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
299 static bool LoadPlayerTimeCp(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
300 static bool MapInfo(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
301 static bool ShowRank(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
302 static bool ShowTeamRank(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
303 static bool ShowTop(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
304 static bool ShowTeamTop5(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
305 static bool ShowPlayerTeamTop5(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
306 static bool ShowTimes(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
307 static bool ShowPoints(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
308 static bool ShowTopPoints(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
309 static bool GetSaves(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize);
310
311 static bool SaveTeam(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize);
312 static bool LoadTeam(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize);
313
314 static bool SaveScore(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize);
315 static bool SaveTeamScore(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize);
316};
317
318#endif // GAME_SERVER_SCOREWORKER_H
float m_RecordFinishTime
Definition scoreworker.h:261
float m_aBestTimeCp[NUM_CHECKPOINTS]
Definition scoreworker.h:258
std::optional< float > m_BestTime
Definition scoreworker.h:257
void Set(float Time, const float aTimeCp[NUM_CHECKPOINTS])
Definition scoreworker.h:244
int m_RecordStopTick
Definition scoreworker.h:260
void SetBestTimeCp(const float aTimeCp[NUM_CHECKPOINTS])
Definition scoreworker.h:251
CPlayerData()
Definition scoreworker.h:230
void Reset()
Definition scoreworker.h:235
Definition save.h:174
Definition connection.h:20
Definition gamecontroller.h:24
Write
Definition connection_pool.h:36
@ MAX_MAP_LENGTH
Definition map.h:13
@ MAX_CHECKPOINTS
Definition protocol.h:92
@ MAX_CLIENTS
Definition protocol.h:89
@ MAX_NAME_LENGTH
Definition protocol.h:99
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:6
@ TIMESTAMP_STR_LENGTH
Definition scoreworker.h:24
@ NUM_CHECKPOINTS
Definition scoreworker.h:23
Definition scoreworker.h:68
std::optional< float > m_CurrentRecord
Definition scoreworker.h:69
union CScorePlayerResult::@306052261263210267064004055070110266005066160136 m_Data
int m_Birthday
Definition scoreworker.h:53
void SetVariant(Variant v)
Definition scoreworker.cpp:24
CScorePlayerResult()
Definition scoreworker.cpp:19
char m_aBroadcast[1024]
Definition scoreworker.h:48
char m_aReason[VOTE_REASON_LENGTH]
Definition scoreworker.h:58
char m_aRequestedPlayer[MAX_NAME_LENGTH]
Definition scoreworker.h:54
char m_aaMessages[MAX_MESSAGES][512]
Definition scoreworker.h:47
char m_aServer[32+1]
Definition scoreworker.h:59
struct CScorePlayerResult::@306052261263210267064004055070110266005066160136::@311371205211055213175200034225050274071154167100 m_MapVote
char m_aMap[MAX_MAP_LENGTH+1]
Definition scoreworker.h:60
@ MAX_MESSAGES
Definition scoreworker.h:33
struct CScorePlayerResult::@306052261263210267064004055070110266005066160136::@067225374045354243024376012344351334244367112027 m_Info
enum CScorePlayerResult::Variant m_MessageKind
std::optional< float > m_Time
Definition scoreworker.h:51
Variant
Definition scoreworker.h:37
@ PLAYER_TIMECP
Definition scoreworker.h:43
@ BROADCAST
Definition scoreworker.h:40
@ DIRECT
Definition scoreworker.h:38
@ MAP_VOTE
Definition scoreworker.h:41
@ ALL
Definition scoreworker.h:39
@ PLAYER_INFO
Definition scoreworker.h:42
float m_aTimeCp[NUM_CHECKPOINTS]
Definition scoreworker.h:52
char m_aMessage[512]
Definition scoreworker.h:110
CScoreRandomMapResult(int ClientId)
Definition scoreworker.h:102
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:109
int m_ClientId
Definition scoreworker.h:108
char m_aCode[128]
Definition scoreworker.h:177
CScoreSaveResult(int PlayerId, const char *pPlayerName, const char *pServer)
Definition scoreworker.h:149
int m_RequestingPlayer
Definition scoreworker.h:173
char m_aMessage[512]
Definition scoreworker.h:170
CSaveTeam m_SavedTeam
Definition scoreworker.h:172
char m_aRequestingPlayer[MAX_NAME_LENGTH]
Definition scoreworker.h:174
@ LOAD_FAILED
Definition scoreworker.h:168
@ SAVE_FAILED
Definition scoreworker.h:166
@ SAVE_SUCCESS
Definition scoreworker.h:162
@ LOAD_SUCCESS
Definition scoreworker.h:167
@ SAVE_FALLBACKFILE
Definition scoreworker.h:164
@ SAVE_WARNING
Definition scoreworker.h:163
CUuid m_SaveId
Definition scoreworker.h:175
char m_aGeneratedCode[128]
Definition scoreworker.h:178
char m_aServer[5]
Definition scoreworker.h:176
enum CScoreSaveResult::@124217027350255103366367351154207121346173146027 m_Status
char m_aBroadcast[512]
Definition scoreworker.h:171
Definition scoreworker.h:291
static bool LoadBestTime(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:145
static bool LoadPlayerTimeCp(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:256
static bool RandomUnfinishedMap(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1560
static bool ShowTimes(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1300
static bool ShowTopPoints(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1460
static bool MapVote(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:306
static bool SaveTeam(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize)
Definition scoreworker.cpp:1626
static bool ShowRank(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:822
static bool SaveScore(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize)
Definition scoreworker.cpp:493
static bool GetSaves(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1884
static bool ShowTop(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1018
static bool ShowPlayerTeamTop5(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1208
static bool ShowPoints(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1415
static bool MapInfo(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:367
static bool ShowTeamTop5(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1111
static bool LoadPlayerData(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:175
static bool SaveTeamScore(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize)
Definition scoreworker.cpp:652
static bool RandomMap(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:1509
static bool LoadTeam(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize)
Definition scoreworker.cpp:1754
static bool ShowTeamRank(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
Definition scoreworker.cpp:935
CSqlLoadBestTimeRequest(std::shared_ptr< CScoreLoadBestTimeResult > pResult)
Definition scoreworker.h:74
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:80
char m_aName[MAX_MAP_LENGTH]
Definition scoreworker.h:91
char m_aServer[5]
Definition scoreworker.h:97
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:93
int m_Offset
Definition scoreworker.h:96
CSqlPlayerRequest(std::shared_ptr< CScorePlayerResult > pResult)
Definition scoreworker.h:85
char m_aRequestingPlayer[MAX_NAME_LENGTH]
Definition scoreworker.h:94
char m_aRequestingPlayer[MAX_NAME_LENGTH]
Definition scoreworker.h:122
int m_MaxStars
Definition scoreworker.h:124
char m_aServerType[32]
Definition scoreworker.h:120
char m_aCurrentMap[MAX_MAP_LENGTH]
Definition scoreworker.h:121
CSqlRandomMapRequest(std::shared_ptr< CScoreRandomMapResult > pResult)
Definition scoreworker.h:115
int m_MinStars
Definition scoreworker.h:123
CSqlScoreData(std::shared_ptr< CScorePlayerResult > pResult)
Definition scoreworker.h:129
int m_Num
Definition scoreworker.h:142
bool m_Search
Definition scoreworker.h:143
int m_ClientId
Definition scoreworker.h:138
float m_aCurrentTimeCp[NUM_CHECKPOINTS]
Definition scoreworker.h:141
char m_aTimestamp[TIMESTAMP_STR_LENGTH]
Definition scoreworker.h:140
float m_Time
Definition scoreworker.h:139
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:134
char m_aRequestingPlayer[MAX_NAME_LENGTH]
Definition scoreworker.h:144
char m_aName[MAX_MAP_LENGTH]
Definition scoreworker.h:136
char m_aGameUuid[UUID_MAXSTRSIZE]
Definition scoreworker.h:135
int m_NumPlayer
Definition scoreworker.h:224
char m_aRequestingPlayer[MAX_NAME_LENGTH]
Definition scoreworker.h:220
char m_aClientNames[MAX_CLIENTS][MAX_NAME_LENGTH]
Definition scoreworker.h:222
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:219
CSqlTeamLoadRequest(std::shared_ptr< CScoreSaveResult > pResult)
Definition scoreworker.h:213
int m_aClientId[MAX_CLIENTS]
Definition scoreworker.h:223
char m_aCode[128]
Definition scoreworker.h:218
char m_aGeneratedCode[128]
Definition scoreworker.h:207
char m_aClientName[MAX_NAME_LENGTH]
Definition scoreworker.h:204
char m_aCode[128]
Definition scoreworker.h:206
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:205
CSqlTeamSaveData(std::shared_ptr< CScoreSaveResult > pResult)
Definition scoreworker.h:199
char m_aServer[5]
Definition scoreworker.h:208
CSqlTeamScoreData()
Definition scoreworker.h:183
float m_Time
Definition scoreworker.h:190
CUuid m_TeamrankUuid
Definition scoreworker.h:194
char m_aTimestamp[TIMESTAMP_STR_LENGTH]
Definition scoreworker.h:191
char m_aGameUuid[UUID_MAXSTRSIZE]
Definition scoreworker.h:188
char m_aaNames[MAX_CLIENTS][MAX_NAME_LENGTH]
Definition scoreworker.h:193
char m_aMap[MAX_MAP_LENGTH]
Definition scoreworker.h:189
unsigned int m_Size
Definition scoreworker.h:192
unsigned int m_NumNames
Definition scoreworker.h:268
CUuid m_TeamId
Definition scoreworker.h:266
bool SamePlayers(const std::vector< std::string > *pvSortedNames)
Definition scoreworker.cpp:91
char m_aaNames[MAX_CLIENTS][MAX_NAME_LENGTH]
Definition scoreworker.h:267
CTeamrank()
Definition scoreworker.cpp:57
bool NextSqlResult(IDbConnection *pSqlServer, bool *pEnd, char *pError, int ErrorSize)
Definition scoreworker.cpp:65
static bool GetSqlTop5Team(IDbConnection *pSqlServer, bool *pEnd, char *pError, int ErrorSize, char(*paMessages)[512], int *StartLine, int Count)
Definition scoreworker.cpp:103
Definition uuid_manager.h:17
Definition connection_pool.h:25
ISqlData(std::shared_ptr< ISqlResult > pResult)
Definition connection_pool.h:26
Definition connection_pool.h:13
@ UUID_MAXSTRSIZE
Definition uuid_manager.h:8
@ VOTE_REASON_LENGTH
Definition voting.h:10