Lobby2Message_PGSQL.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. /*
  2. * Copyright (c) 2014, Oculus VR, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. *
  9. */
  10. #include "Lobby2Message.h"
  11. #include "Lobby2Server.h"
  12. // libpq-fe.h is part of PostgreSQL which must be installed on this computer to use the PostgreRepository
  13. #include "libpq-fe.h"
  14. #include "PostgreSQLInterface.h"
  15. #include "EpochTimeToString.h"
  16. #ifndef __LOBBY_2_MESSAGE_PGSQL_H
  17. #define __LOBBY_2_MESSAGE_PGSQL_H
  18. namespace RakNet
  19. {
  20. // --------------------------------------------- Database specific message implementations for the server --------------------------------------------
  21. #define __L2_MSG_DB_HEADER(__NAME__,__DB__) \
  22. struct __NAME__##_##__DB__ : public __NAME__
  23. struct ClanMemberDescriptor
  24. {
  25. unsigned int userId;
  26. RakNet::RakString name;
  27. bool isSubleader;
  28. ClanMemberState memberState;
  29. RakNet::RakString banReason;
  30. };
  31. // Helper functions
  32. unsigned int GetUserRowFromHandle(RakNet::RakString& userName, PostgreSQLInterface *pgsql);
  33. unsigned int GetClanIdFromHandle(RakNet::RakString clanName, PostgreSQLInterface *pgsql);
  34. bool IsClanLeader(RakNet::RakString clanName, unsigned int userId, PostgreSQLInterface *pgsql);
  35. unsigned int GetClanLeaderId(unsigned int clanId, PostgreSQLInterface *pgsql);
  36. bool IsClanLeader(unsigned int clanId, unsigned int userId, PostgreSQLInterface *pgsql);
  37. ClanMemberState GetClanMemberState(unsigned int clanId, unsigned int userId, bool *isSubleader, PostgreSQLInterface *pgsql);
  38. void GetClanMembers(unsigned int clanId, DataStructures::List<ClanMemberDescriptor> &clanMembers, PostgreSQLInterface *pgsql);
  39. bool IsTitleInUse(RakNet::RakString titleName, PostgreSQLInterface *pgsql);
  40. bool StringContainsProfanity(RakNet::RakString string, PostgreSQLInterface *pgsql);
  41. bool IsValidCountry(RakNet::RakString string, bool *countryHasStates, PostgreSQLInterface *pgsql);
  42. bool IsValidState(RakNet::RakString string, PostgreSQLInterface *pgsql);
  43. bool IsValidRace(RakNet::RakString string, PostgreSQLInterface *pgsql);
  44. void GetFriendIDs(unsigned int callerUserId, bool excludeIfIgnored, PostgreSQLInterface *pgsql, DataStructures::List<unsigned int> &output);
  45. void GetClanMateIDs(unsigned int callerUserId, bool excludeIfIgnored, PostgreSQLInterface *pgsql, DataStructures::List<unsigned int> &output);
  46. bool IsIgnoredByTarget(unsigned int callerUserId, unsigned int targetUserId, PostgreSQLInterface *pgsql);
  47. void OutputFriendsNotification(RakNet::Notification_Friends_StatusChange::Status notificationType, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
  48. // This does NOT return the online status to output, as it is not threadsafe
  49. void GetFriendInfosByStatus(unsigned int callerUserId, RakNet::RakString status, PostgreSQLInterface *pgsql, DataStructures::List<FriendInfo> &output, bool callerIsUserOne);
  50. void SendEmail(DataStructures::List<RakNet::RakString> &recipientNames, unsigned int senderUserId, RakNet::RakString senderUserName, Lobby2Server *server, RakNet::RakString subject, RakNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, RakNet::RakString triggerString, PostgreSQLInterface *pgsql);
  51. void SendEmail(DataStructures::List<unsigned int> &targetUserIds, unsigned int senderUserId, RakNet::RakString senderUserName, Lobby2Server *server, RakNet::RakString subject, RakNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, RakNet::RakString triggerString, PostgreSQLInterface *pgsql);
  52. void SendEmail(unsigned int targetUserId, unsigned int senderUserId, RakNet::RakString senderUserName, Lobby2Server *server, RakNet::RakString subject, RakNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, RakNet::RakString triggerString, PostgreSQLInterface *pgsql);
  53. int GetActiveClanCount(unsigned int userId, PostgreSQLInterface *pgsql);
  54. bool CreateAccountParametersFailed( CreateAccountParameters &createAccountParameters, RakNet::Lobby2ResultCode &resultCode, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
  55. void UpdateAccountFromMissingCreationParameters(CreateAccountParameters &createAccountParameters, unsigned int userPrimaryKey, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
  56. __L2_MSG_DB_HEADER(Platform_Startup, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface ) { (void)command; (void)databaseInterface; return false; }};
  57. __L2_MSG_DB_HEADER(Platform_Shutdown, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface ) { (void)command; (void)databaseInterface; return false; }};
  58. __L2_MSG_DB_HEADER(System_CreateDatabase, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  59. __L2_MSG_DB_HEADER(System_DestroyDatabase, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  60. __L2_MSG_DB_HEADER(System_CreateTitle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  61. __L2_MSG_DB_HEADER(System_DestroyTitle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  62. __L2_MSG_DB_HEADER(System_GetTitleRequiredAge, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  63. __L2_MSG_DB_HEADER(System_GetTitleBinaryData, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  64. __L2_MSG_DB_HEADER(System_RegisterProfanity, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  65. __L2_MSG_DB_HEADER(System_BanUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  66. __L2_MSG_DB_HEADER(System_UnbanUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  67. __L2_MSG_DB_HEADER(CDKey_Add, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  68. __L2_MSG_DB_HEADER(CDKey_GetStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  69. __L2_MSG_DB_HEADER(CDKey_Use, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  70. __L2_MSG_DB_HEADER(CDKey_FlagStolen, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  71. __L2_MSG_DB_HEADER(Client_Login, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  72. __L2_MSG_DB_HEADER(Client_Logoff, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  73. __L2_MSG_DB_HEADER(Client_RegisterAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  74. __L2_MSG_DB_HEADER(System_SetEmailAddressValidated, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  75. __L2_MSG_DB_HEADER(Client_ValidateHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  76. __L2_MSG_DB_HEADER(System_DeleteAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  77. __L2_MSG_DB_HEADER(System_PruneAccounts, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  78. __L2_MSG_DB_HEADER(Client_GetEmailAddress, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  79. __L2_MSG_DB_HEADER(Client_GetPasswordRecoveryQuestionByHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  80. __L2_MSG_DB_HEADER(Client_GetPasswordByPasswordRecoveryAnswer, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  81. __L2_MSG_DB_HEADER(Client_ChangeHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  82. __L2_MSG_DB_HEADER(Client_UpdateAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  83. __L2_MSG_DB_HEADER(Client_GetAccountDetails, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  84. __L2_MSG_DB_HEADER(Client_StartIgnore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  85. __L2_MSG_DB_HEADER(Client_StopIgnore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  86. __L2_MSG_DB_HEADER(Client_GetIgnoreList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  87. __L2_MSG_DB_HEADER(Client_PerTitleIntegerStorage, PGSQL){
  88. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
  89. virtual bool Write( Lobby2ServerCommand *command, void *databaseInterface );
  90. virtual bool Read( Lobby2ServerCommand *command, void *databaseInterface );
  91. virtual bool Delete( Lobby2ServerCommand *command, void *databaseInterface );
  92. virtual bool Add( Lobby2ServerCommand *command, void *databaseInterface );
  93. };
  94. __L2_MSG_DB_HEADER(Client_SetPresence, PGSQL){virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );};
  95. __L2_MSG_DB_HEADER(Client_GetPresence, PGSQL){virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );};
  96. __L2_MSG_DB_HEADER(Client_PerTitleBinaryStorage, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  97. __L2_MSG_DB_HEADER(Friends_SendInvite, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  98. __L2_MSG_DB_HEADER(Friends_AcceptInvite, PGSQL){
  99. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
  100. virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  101. };
  102. __L2_MSG_DB_HEADER(Friends_RejectInvite, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  103. __L2_MSG_DB_HEADER(Friends_GetInvites, PGSQL){
  104. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
  105. virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  106. };
  107. __L2_MSG_DB_HEADER(Friends_GetFriends, PGSQL){
  108. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
  109. virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  110. };
  111. __L2_MSG_DB_HEADER(Friends_Remove, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  112. __L2_MSG_DB_HEADER(BookmarkedUsers_Add, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  113. __L2_MSG_DB_HEADER(BookmarkedUsers_Remove, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  114. __L2_MSG_DB_HEADER(BookmarkedUsers_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  115. __L2_MSG_DB_HEADER(Emails_Send, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  116. __L2_MSG_DB_HEADER(Emails_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  117. __L2_MSG_DB_HEADER(Emails_Delete, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  118. __L2_MSG_DB_HEADER(Emails_SetStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  119. __L2_MSG_DB_HEADER(Ranking_SubmitMatch, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  120. __L2_MSG_DB_HEADER(Ranking_GetMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  121. __L2_MSG_DB_HEADER(Ranking_GetMatchBinaryData, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  122. __L2_MSG_DB_HEADER(Ranking_GetTotalScore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  123. __L2_MSG_DB_HEADER(Ranking_WipeScoresForPlayer, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  124. __L2_MSG_DB_HEADER(Ranking_WipeMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  125. __L2_MSG_DB_HEADER(Ranking_PruneMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  126. __L2_MSG_DB_HEADER(Ranking_UpdateRating, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  127. __L2_MSG_DB_HEADER(Ranking_WipeRatings, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  128. __L2_MSG_DB_HEADER(Ranking_GetRating, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  129. __L2_MSG_DB_HEADER(Clans_Create, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  130. __L2_MSG_DB_HEADER(Clans_SetProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  131. __L2_MSG_DB_HEADER(Clans_GetProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  132. __L2_MSG_DB_HEADER(Clans_SetMyMemberProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  133. __L2_MSG_DB_HEADER(Clans_GrantLeader, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  134. __L2_MSG_DB_HEADER(Clans_SetSubleaderStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  135. __L2_MSG_DB_HEADER(Clans_SetMemberRank, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  136. __L2_MSG_DB_HEADER(Clans_GetMemberProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  137. __L2_MSG_DB_HEADER(Clans_ChangeHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  138. __L2_MSG_DB_HEADER(Clans_Leave, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  139. __L2_MSG_DB_HEADER(Clans_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  140. __L2_MSG_DB_HEADER(Clans_SendJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  141. __L2_MSG_DB_HEADER(Clans_WithdrawJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  142. __L2_MSG_DB_HEADER(Clans_AcceptJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  143. __L2_MSG_DB_HEADER(Clans_RejectJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  144. __L2_MSG_DB_HEADER(Clans_DownloadInvitationList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  145. __L2_MSG_DB_HEADER(Clans_SendJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  146. __L2_MSG_DB_HEADER(Clans_WithdrawJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  147. __L2_MSG_DB_HEADER(Clans_AcceptJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  148. __L2_MSG_DB_HEADER(Clans_RejectJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  149. __L2_MSG_DB_HEADER(Clans_DownloadRequestList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  150. __L2_MSG_DB_HEADER(Clans_KickAndBlacklistUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  151. __L2_MSG_DB_HEADER(Clans_UnblacklistUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  152. __L2_MSG_DB_HEADER(Clans_GetBlacklist, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  153. __L2_MSG_DB_HEADER(Clans_GetMembers, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  154. __L2_MSG_DB_HEADER(Clans_GetList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
  155. __L2_MSG_DB_HEADER(Clans_CreateBoard, PGSQL)
  156. {
  157. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  158. {
  159. (void)command;
  160. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  161. PGresult *result = pgsql->QueryVariadic("");
  162. if (result!=0)
  163. {
  164. PQclear(result);
  165. resultCode=L2RC_SUCCESS;
  166. }
  167. else
  168. {
  169. resultCode=L2RC_SUCCESS;
  170. }
  171. return true;
  172. }
  173. };
  174. __L2_MSG_DB_HEADER(Clans_DestroyBoard, PGSQL)
  175. {
  176. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  177. {
  178. (void)command;
  179. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  180. PGresult *result = pgsql->QueryVariadic("");
  181. if (result!=0)
  182. {
  183. PQclear(result);
  184. resultCode=L2RC_SUCCESS;
  185. }
  186. else
  187. {
  188. resultCode=L2RC_SUCCESS;
  189. }
  190. return true;
  191. }
  192. };
  193. __L2_MSG_DB_HEADER(Clans_CreateNewTopic, PGSQL)
  194. {
  195. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  196. {
  197. (void)command;
  198. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  199. PGresult *result = pgsql->QueryVariadic("");
  200. if (result!=0)
  201. {
  202. PQclear(result);
  203. resultCode=L2RC_SUCCESS;
  204. }
  205. else
  206. {
  207. resultCode=L2RC_SUCCESS;
  208. }
  209. return true;
  210. }
  211. };
  212. __L2_MSG_DB_HEADER(Clans_ReplyToTopic, PGSQL)
  213. {
  214. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  215. {
  216. (void)command;
  217. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  218. PGresult *result = pgsql->QueryVariadic("");
  219. if (result!=0)
  220. {
  221. PQclear(result);
  222. resultCode=L2RC_SUCCESS;
  223. }
  224. else
  225. {
  226. resultCode=L2RC_SUCCESS;
  227. }
  228. return true;
  229. }
  230. };
  231. __L2_MSG_DB_HEADER(Clans_RemovePost, PGSQL)
  232. {
  233. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  234. {
  235. (void)command;
  236. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  237. PGresult *result = pgsql->QueryVariadic("");
  238. if (result!=0)
  239. {
  240. PQclear(result);
  241. resultCode=L2RC_SUCCESS;
  242. }
  243. else
  244. {
  245. resultCode=L2RC_SUCCESS;
  246. }
  247. return true;
  248. }
  249. };
  250. __L2_MSG_DB_HEADER(Clans_GetBoards, PGSQL)
  251. {
  252. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  253. {
  254. (void)command;
  255. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  256. PGresult *result = pgsql->QueryVariadic("");
  257. if (result!=0)
  258. {
  259. PQclear(result);
  260. resultCode=L2RC_SUCCESS;
  261. }
  262. else
  263. {
  264. resultCode=L2RC_SUCCESS;
  265. }
  266. return true;
  267. }
  268. };
  269. __L2_MSG_DB_HEADER(Clans_GetTopics, PGSQL)
  270. {
  271. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  272. {
  273. (void)command;
  274. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  275. PGresult *result = pgsql->QueryVariadic("");
  276. if (result!=0)
  277. {
  278. PQclear(result);
  279. resultCode=L2RC_SUCCESS;
  280. }
  281. else
  282. {
  283. resultCode=L2RC_SUCCESS;
  284. }
  285. return true;
  286. }
  287. };
  288. __L2_MSG_DB_HEADER(Clans_GetPosts, PGSQL)
  289. {
  290. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  291. {
  292. (void)command;
  293. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  294. PGresult *result = pgsql->QueryVariadic("");
  295. if (result!=0)
  296. {
  297. PQclear(result);
  298. resultCode=L2RC_SUCCESS;
  299. }
  300. else
  301. {
  302. resultCode=L2RC_SUCCESS;
  303. }
  304. return true;
  305. }
  306. };
  307. __L2_MSG_DB_HEADER(Notification_Friends_StatusChange, PGSQL)
  308. {
  309. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  310. {
  311. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  312. if (command->callerSystemAddresses.Size()==0)
  313. {
  314. OutputFriendsNotification(Notification_Friends_StatusChange::FRIEND_LOGGED_OFF, command, pgsql);
  315. }
  316. // Don't let the thread return this notification with RakNet::UNASSIGNED_SYSTEM_ADDRESS to the user. It's just a message to the thread.
  317. return false;
  318. }
  319. virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle )
  320. {
  321. switch (op)
  322. {
  323. case Notification_Friends_StatusChange::FRIEND_LOGGED_IN:
  324. case Notification_Friends_StatusChange::FRIEND_LOGGED_IN_DIFFERENT_CONTEXT:
  325. case Notification_Friends_StatusChange::THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS:
  326. server->GetPresence(presence,otherHandle);
  327. break;
  328. case Notification_Friends_StatusChange::FRIEND_LOGGED_OFF:
  329. presence.isVisible=false;
  330. presence.status=Lobby2Presence::NOT_ONLINE;
  331. break;
  332. case Notification_Friends_StatusChange::FRIEND_ACCOUNT_WAS_DELETED:
  333. case Notification_Friends_StatusChange::YOU_WERE_REMOVED_AS_A_FRIEND:
  334. case Notification_Friends_StatusChange::GOT_INVITATION_TO_BE_FRIENDS:
  335. case Notification_Friends_StatusChange::THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS:
  336. presence.isVisible=false;
  337. presence.status=Lobby2Presence::UNDEFINED;
  338. break;
  339. }
  340. }
  341. };
  342. __L2_MSG_DB_HEADER(Notification_Friends_PresenceUpdate, PGSQL)
  343. {
  344. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
  345. {
  346. PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
  347. // Tell all friends about this new login
  348. DataStructures::List<unsigned int> output;
  349. GetFriendIDs(command->callerUserId, true, pgsql, output);
  350. unsigned int idx;
  351. for (idx=0; idx < output.Size(); idx++)
  352. {
  353. Notification_Friends_PresenceUpdate *notification = (Notification_Friends_PresenceUpdate *) command->server->GetMessageFactory()->Alloc(L2MID_Notification_Friends_PresenceUpdate);
  354. notification->otherHandle=command->callingUserName;
  355. notification->newPresence=newPresence;
  356. notification->resultCode=L2RC_SUCCESS;
  357. command->server->AddOutputFromThread(notification, output[idx], "");
  358. }
  359. // Don't let the thread return this notification with RakNet::UNASSIGNED_SYSTEM_ADDRESS to the user. It's just a message to the thread.
  360. return false;
  361. }
  362. };
  363. // --------------------------------------------- Database specific factory class for all messages --------------------------------------------
  364. #define __L2_MSG_FACTORY_IMPL(__NAME__,__DB__) {case L2MID_##__NAME__ : return RakNet::OP_NEW< __NAME__##_##__DB__ >( _FILE_AND_LINE_ ) ;}
  365. struct Lobby2MessageFactory_PGSQL : public Lobby2MessageFactory
  366. {
  367. STATIC_FACTORY_DECLARATIONS(Lobby2MessageFactory_PGSQL)
  368. virtual Lobby2Message *Alloc(Lobby2MessageID id)
  369. {
  370. switch (id)
  371. {
  372. __L2_MSG_FACTORY_IMPL(Platform_Startup, PGSQL);
  373. __L2_MSG_FACTORY_IMPL(Platform_Shutdown, PGSQL);
  374. __L2_MSG_FACTORY_IMPL(System_CreateDatabase, PGSQL);
  375. __L2_MSG_FACTORY_IMPL(System_DestroyDatabase, PGSQL);
  376. __L2_MSG_FACTORY_IMPL(System_CreateTitle, PGSQL);
  377. __L2_MSG_FACTORY_IMPL(System_DestroyTitle, PGSQL);
  378. __L2_MSG_FACTORY_IMPL(System_GetTitleRequiredAge, PGSQL);
  379. __L2_MSG_FACTORY_IMPL(System_GetTitleBinaryData, PGSQL);
  380. __L2_MSG_FACTORY_IMPL(System_RegisterProfanity, PGSQL);
  381. __L2_MSG_FACTORY_IMPL(System_BanUser, PGSQL);
  382. __L2_MSG_FACTORY_IMPL(System_UnbanUser, PGSQL);
  383. __L2_MSG_FACTORY_IMPL(CDKey_Add, PGSQL);
  384. __L2_MSG_FACTORY_IMPL(CDKey_GetStatus, PGSQL);
  385. __L2_MSG_FACTORY_IMPL(CDKey_Use, PGSQL);
  386. __L2_MSG_FACTORY_IMPL(CDKey_FlagStolen, PGSQL);
  387. __L2_MSG_FACTORY_IMPL(Client_Login, PGSQL);
  388. __L2_MSG_FACTORY_IMPL(Client_Logoff, PGSQL);
  389. __L2_MSG_FACTORY_IMPL(Client_RegisterAccount, PGSQL);
  390. __L2_MSG_FACTORY_IMPL(System_SetEmailAddressValidated, PGSQL);
  391. __L2_MSG_FACTORY_IMPL(Client_ValidateHandle, PGSQL);
  392. __L2_MSG_FACTORY_IMPL(System_DeleteAccount, PGSQL);
  393. __L2_MSG_FACTORY_IMPL(System_PruneAccounts, PGSQL);
  394. __L2_MSG_FACTORY_IMPL(Client_GetEmailAddress, PGSQL);
  395. __L2_MSG_FACTORY_IMPL(Client_GetPasswordRecoveryQuestionByHandle, PGSQL);
  396. __L2_MSG_FACTORY_IMPL(Client_GetPasswordByPasswordRecoveryAnswer, PGSQL);
  397. __L2_MSG_FACTORY_IMPL(Client_ChangeHandle, PGSQL);
  398. __L2_MSG_FACTORY_IMPL(Client_UpdateAccount, PGSQL);
  399. __L2_MSG_FACTORY_IMPL(Client_GetAccountDetails, PGSQL);
  400. __L2_MSG_FACTORY_IMPL(Client_StartIgnore, PGSQL);
  401. __L2_MSG_FACTORY_IMPL(Client_StopIgnore, PGSQL);
  402. __L2_MSG_FACTORY_IMPL(Client_GetIgnoreList, PGSQL);
  403. __L2_MSG_FACTORY_IMPL(Client_PerTitleIntegerStorage, PGSQL);
  404. __L2_MSG_FACTORY_IMPL(Client_PerTitleBinaryStorage, PGSQL);
  405. __L2_MSG_FACTORY_IMPL(Client_SetPresence, PGSQL);
  406. __L2_MSG_FACTORY_IMPL(Client_GetPresence, PGSQL);
  407. __L2_MSG_FACTORY_IMPL(Friends_SendInvite, PGSQL);
  408. __L2_MSG_FACTORY_IMPL(Friends_AcceptInvite, PGSQL);
  409. __L2_MSG_FACTORY_IMPL(Friends_RejectInvite, PGSQL);
  410. __L2_MSG_FACTORY_IMPL(Friends_GetInvites, PGSQL);
  411. __L2_MSG_FACTORY_IMPL(Friends_GetFriends, PGSQL);
  412. __L2_MSG_FACTORY_IMPL(Friends_Remove, PGSQL);
  413. __L2_MSG_FACTORY_IMPL(BookmarkedUsers_Add, PGSQL);
  414. __L2_MSG_FACTORY_IMPL(BookmarkedUsers_Remove, PGSQL);
  415. __L2_MSG_FACTORY_IMPL(BookmarkedUsers_Get, PGSQL);
  416. __L2_MSG_FACTORY_IMPL(Emails_Send, PGSQL);
  417. __L2_MSG_FACTORY_IMPL(Emails_Get, PGSQL);
  418. __L2_MSG_FACTORY_IMPL(Emails_Delete, PGSQL);
  419. __L2_MSG_FACTORY_IMPL(Emails_SetStatus, PGSQL);
  420. __L2_MSG_FACTORY_IMPL(Ranking_SubmitMatch, PGSQL);
  421. __L2_MSG_FACTORY_IMPL(Ranking_GetMatches, PGSQL);
  422. __L2_MSG_FACTORY_IMPL(Ranking_GetMatchBinaryData, PGSQL);
  423. __L2_MSG_FACTORY_IMPL(Ranking_GetTotalScore, PGSQL);
  424. __L2_MSG_FACTORY_IMPL(Ranking_WipeScoresForPlayer, PGSQL);
  425. __L2_MSG_FACTORY_IMPL(Ranking_WipeMatches, PGSQL);
  426. __L2_MSG_FACTORY_IMPL(Ranking_PruneMatches, PGSQL);
  427. __L2_MSG_FACTORY_IMPL(Ranking_UpdateRating, PGSQL);
  428. __L2_MSG_FACTORY_IMPL(Ranking_WipeRatings, PGSQL);
  429. __L2_MSG_FACTORY_IMPL(Ranking_GetRating, PGSQL);
  430. __L2_MSG_FACTORY_IMPL(Clans_Create, PGSQL);
  431. __L2_MSG_FACTORY_IMPL(Clans_SetProperties, PGSQL);
  432. __L2_MSG_FACTORY_IMPL(Clans_GetProperties, PGSQL);
  433. __L2_MSG_FACTORY_IMPL(Clans_SetMyMemberProperties, PGSQL);
  434. __L2_MSG_FACTORY_IMPL(Clans_GrantLeader, PGSQL);
  435. __L2_MSG_FACTORY_IMPL(Clans_SetSubleaderStatus, PGSQL);
  436. __L2_MSG_FACTORY_IMPL(Clans_SetMemberRank, PGSQL);
  437. __L2_MSG_FACTORY_IMPL(Clans_GetMemberProperties, PGSQL);
  438. __L2_MSG_FACTORY_IMPL(Clans_ChangeHandle, PGSQL);
  439. __L2_MSG_FACTORY_IMPL(Clans_Leave, PGSQL);
  440. __L2_MSG_FACTORY_IMPL(Clans_Get, PGSQL);
  441. __L2_MSG_FACTORY_IMPL(Clans_SendJoinInvitation, PGSQL);
  442. __L2_MSG_FACTORY_IMPL(Clans_WithdrawJoinInvitation, PGSQL);
  443. __L2_MSG_FACTORY_IMPL(Clans_AcceptJoinInvitation, PGSQL);
  444. __L2_MSG_FACTORY_IMPL(Clans_RejectJoinInvitation, PGSQL);
  445. __L2_MSG_FACTORY_IMPL(Clans_DownloadInvitationList, PGSQL);
  446. __L2_MSG_FACTORY_IMPL(Clans_SendJoinRequest, PGSQL);
  447. __L2_MSG_FACTORY_IMPL(Clans_WithdrawJoinRequest, PGSQL);
  448. __L2_MSG_FACTORY_IMPL(Clans_AcceptJoinRequest, PGSQL);
  449. __L2_MSG_FACTORY_IMPL(Clans_RejectJoinRequest, PGSQL);
  450. __L2_MSG_FACTORY_IMPL(Clans_DownloadRequestList, PGSQL);
  451. __L2_MSG_FACTORY_IMPL(Clans_KickAndBlacklistUser, PGSQL);
  452. __L2_MSG_FACTORY_IMPL(Clans_UnblacklistUser, PGSQL);
  453. __L2_MSG_FACTORY_IMPL(Clans_GetBlacklist, PGSQL);
  454. __L2_MSG_FACTORY_IMPL(Clans_GetMembers, PGSQL);
  455. __L2_MSG_FACTORY_IMPL(Clans_GetList, PGSQL);
  456. __L2_MSG_FACTORY_IMPL(Clans_CreateBoard, PGSQL);
  457. __L2_MSG_FACTORY_IMPL(Clans_DestroyBoard, PGSQL);
  458. __L2_MSG_FACTORY_IMPL(Clans_CreateNewTopic, PGSQL);
  459. __L2_MSG_FACTORY_IMPL(Clans_ReplyToTopic, PGSQL);
  460. __L2_MSG_FACTORY_IMPL(Clans_RemovePost, PGSQL);
  461. __L2_MSG_FACTORY_IMPL(Clans_GetBoards, PGSQL);
  462. __L2_MSG_FACTORY_IMPL(Clans_GetTopics, PGSQL);
  463. __L2_MSG_FACTORY_IMPL(Clans_GetPosts, PGSQL);
  464. __L2_MSG_FACTORY_BASE(Notification_Client_RemoteLogin);
  465. __L2_MSG_FACTORY_BASE(Notification_Client_IgnoreStatus);
  466. __L2_MSG_FACTORY_IMPL(Notification_Friends_StatusChange, PGSQL);
  467. __L2_MSG_FACTORY_IMPL(Notification_Friends_PresenceUpdate, PGSQL);
  468. __L2_MSG_FACTORY_BASE(Notification_User_ChangedHandle);
  469. __L2_MSG_FACTORY_BASE(Notification_Friends_CreatedClan);
  470. __L2_MSG_FACTORY_BASE(Notification_Emails_Received);
  471. __L2_MSG_FACTORY_BASE(Notification_Clans_GrantLeader);
  472. __L2_MSG_FACTORY_BASE(Notification_Clans_SetSubleaderStatus);
  473. __L2_MSG_FACTORY_BASE(Notification_Clans_SetMemberRank);
  474. __L2_MSG_FACTORY_BASE(Notification_Clans_ChangeHandle);
  475. __L2_MSG_FACTORY_BASE(Notification_Clans_Leave);
  476. __L2_MSG_FACTORY_BASE(Notification_Clans_PendingJoinStatus);
  477. __L2_MSG_FACTORY_BASE(Notification_Clans_NewClanMember);
  478. __L2_MSG_FACTORY_BASE(Notification_Clans_KickAndBlacklistUser);
  479. __L2_MSG_FACTORY_BASE(Notification_Clans_UnblacklistUser);
  480. __L2_MSG_FACTORY_BASE(Notification_Clans_Destroyed);
  481. default:
  482. return 0;
  483. };
  484. };
  485. };
  486. }; // namespace RakNet
  487. #endif
粤ICP备19079148号