BF2MC-Matchmaker
webserver/client.h
1 #ifndef WEBSERVER_CLIENT_H
2 #define WEBSERVER_CLIENT_H
3 
4 #include <net/socket.h>
5 #include <util.h>
6 
7 // Forward declair
8 namespace atomizes
9 {
10  class HTTPMessage;
11 };
12 
13 namespace Json
14 {
15  class Value;
16 };
17 
18 namespace Battlefield
19 {
20  class Clan;
21  class Player;
22 };
23 
24 namespace Webserver
25 {
26  class Client : public Net::Socket
27  {
28  public:
35  Client(int socket, struct sockaddr_in address);
36 
40  ~Client();
41 
45  void Listen();
46 
50  void Disconnect();
51 
57  void Send(const atomizes::HTTPMessage& http_response) const;
58 
64  void Send(const Json::Value &value) const;
65 
66  /*
67  Events
68  */
74  void onRequest(const atomizes::HTTPMessage& http_request);
75 
76  /*
77  Requests
78  */
79  // www.easports.com
87  void requestFile(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
88 
89  // bfmc.gamespy.com
90  // Stats
98  void requestGetPlayerInfo(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
99 
107  void requestStats(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
108 
109  // Clan
117  void requestClanInfo(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
118 
126  void requestClanMembers(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
127 
135  void requestLeaderboard(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
136 
144  void requestCreateClan(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
145 
153  void requestUpdateClan(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
154 
162  void requestDisband(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
163 
171  void requestChangeRank(const atomizes::HTTPMessage &http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
172 
180  void requestAddMember(const atomizes::HTTPMessage &http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
181 
189  void requestDeleteMember(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
190 
198  void requestClanMessage(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
199 
207  void requestMeme(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
208 
209  // Empty
217  void requestEmpty(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
218 
219  // API
227  void requestAPIServersLive(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
228 
236  void requestAPIGame(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
237 
245  void requestAPIGames(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
246 
254  void requestAPIPlayer(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
255 
263  void requestAPIClan(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
264 
272  void requestAPILeaderboard(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
273 
281  void requestAPILeaderboardClan(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
282 
290  void requestAPIClanSimulation(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
291 
292  // API admin
300  void requestAPIAdminClients(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
301 
309  void requestAPIAdminKick(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
310 
318  void requestAPIAdminMessage(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
319 
330  void requestAPIAdminPlayerStatsRecalc(const atomizes::HTTPMessage& http_request, const std::string& url_base, const Util::Url::Variables& url_variables);
331 
332  private:
339  atomizes::HTTPMessage _defaultResponseHeader(bool isPlainText = true) const;
340 
349  void _LogTransaction(const std::string& direction, const std::string& response) const;
350 
358  bool _readFile(const std::string& file_name, std::string& data) const;
359 
365  void _SendFile(const std::string& file_name) const;
366 
376  void _GetSessionPlayerAndClan(const Util::Url::Variables& url_variables,
377  Battlefield::Clan& clan, Battlefield::Player& player) const;
378 
392  const Util::Url::Variables &url_variables, bool is_update = false);
393 
394  public:
401  static void Heartbeat();
402  };
403 }
404 
405 #endif // WEBSERVER_CLIENT_H
Represents a clan in the Battlefield game.
Definition: clan.h:54
Represents a player with extended statistics.
Definition: player.h:38
A base class representing a network socket.
Definition: socket.h:15
void requestAPIAdminKick(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to kick a client through the API.
Definition: api_admin.cpp:146
void requestAPIClanSimulation(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for clan simulation through the API.
Definition: api.cpp:530
void requestLeaderboard(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to get the leaderboard.
static void Heartbeat()
Heartbeat function to manage client connections.
void requestMeme(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for a meme.
void requestStats(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for player statistics.
Definition: status.cpp:78
void requestAPIAdminMessage(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to send a message to a client through the API.
Definition: api_admin.cpp:188
void requestAPIPlayer(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for a specific player through the API.
Definition: api.cpp:226
Client(int socket, struct sockaddr_in address)
Constructor for Webserver Client.
atomizes::HTTPMessage _defaultResponseHeader(bool isPlainText=true) const
Generate the default HTTP response header.
void onRequest(const atomizes::HTTPMessage &http_request)
Process incoming HTTP request.
void _GetSessionPlayerAndClan(const Util::Url::Variables &url_variables, Battlefield::Clan &clan, Battlefield::Player &player) const
Extract session, player, and clan information from URL variables.
void Disconnect()
Disconnect the client.
void requestAPILeaderboardClan(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for the clan leaderboard through the API.
Definition: api.cpp:480
void requestClanInfo(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to get clan information.
void requestAddMember(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to add a member to a clan.
void requestChangeRank(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to change a member's rank in a clan.
void requestClanMembers(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to get clan members.
void requestAPIAdminClients(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for admin clients through the API.
Definition: api_admin.cpp:16
void requestEmpty(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for a empty response.
void requestFile(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for a specific file.
void requestUpdateClan(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to update a clan.
void requestClanMessage(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for clan messages.
void Send(const atomizes::HTTPMessage &http_response) const
Send an HTTP response.
void requestAPIServersLive(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for live servers through the API.
Definition: api.cpp:15
void requestDeleteMember(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to delete a member from a clan.
void requestAPIGame(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for a specific game through the API.
Definition: api.cpp:111
void _LogTransaction(const std::string &direction, const std::string &response) const
Log a transaction.
void Listen()
Start listening for incoming requests.
void _SendFile(const std::string &file_name) const
Send a file as an HTTP response.
void requestCreateClan(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to create a new clan.
bool _readFile(const std::string &file_name, std::string &data) const
Read a file and store its contents in a string.
bool _updateClanInformation(Battlefield::Clan &clan, const Util::Url::Variables &url_variables, bool is_update=false)
Update clan information based on URL variables.
void requestDisband(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to disband a clan.
~Client()
Destructor for Webserver Client.
void requestAPIClan(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for a specific clan through the API.
Definition: api.cpp:316
void requestAPILeaderboard(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for the leaderboard through the API.
Definition: api.cpp:368
void requestGetPlayerInfo(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request to get player information.
Definition: status.cpp:20
void requestAPIGames(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handle a request for multiple games through the API.
Definition: api.cpp:199
void requestAPIAdminPlayerStatsRecalc(const atomizes::HTTPMessage &http_request, const std::string &url_base, const Util::Url::Variables &url_variables)
Handles the API request to recalculate player statistics.
Definition: api_admin.cpp:241