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