Init
This commit is contained in:
4692
DependentExtensions/Lobby2/PGSQL/Lobby2Message_PGSQL.cpp
Normal file
4692
DependentExtensions/Lobby2/PGSQL/Lobby2Message_PGSQL.cpp
Normal file
File diff suppressed because it is too large
Load Diff
531
DependentExtensions/Lobby2/PGSQL/Lobby2Message_PGSQL.h
Normal file
531
DependentExtensions/Lobby2/PGSQL/Lobby2Message_PGSQL.h
Normal file
@ -0,0 +1,531 @@
|
||||
/*
|
||||
* Original work: Copyright (c) 2014, Oculus VR, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
|
||||
*
|
||||
*
|
||||
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
|
||||
*
|
||||
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
|
||||
* license found in the license.txt file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include "Lobby2Message.h"
|
||||
#include "Lobby2Server.h"
|
||||
// libpq-fe.h is part of PostgreSQL which must be installed on this computer to use the PostgreRepository
|
||||
#include "libpq-fe.h"
|
||||
#include "PostgreSQLInterface.h"
|
||||
#include "slikenet/EpochTimeToString.h"
|
||||
|
||||
#ifndef __LOBBY_2_MESSAGE_PGSQL_H
|
||||
#define __LOBBY_2_MESSAGE_PGSQL_H
|
||||
|
||||
namespace SLNet
|
||||
{
|
||||
|
||||
// --------------------------------------------- Database specific message implementations for the server --------------------------------------------
|
||||
|
||||
#define __L2_MSG_DB_HEADER(__NAME__,__DB__) \
|
||||
struct __NAME__##_##__DB__ : public __NAME__
|
||||
|
||||
struct ClanMemberDescriptor
|
||||
{
|
||||
unsigned int userId;
|
||||
SLNet::RakString name;
|
||||
bool isSubleader;
|
||||
ClanMemberState memberState;
|
||||
SLNet::RakString banReason;
|
||||
};
|
||||
|
||||
|
||||
// Helper functions
|
||||
unsigned int GetUserRowFromHandle(SLNet::RakString& userName, PostgreSQLInterface *pgsql);
|
||||
unsigned int GetClanIdFromHandle(SLNet::RakString clanName, PostgreSQLInterface *pgsql);
|
||||
bool IsClanLeader(SLNet::RakString clanName, unsigned int userId, PostgreSQLInterface *pgsql);
|
||||
unsigned int GetClanLeaderId(unsigned int clanId, PostgreSQLInterface *pgsql);
|
||||
bool IsClanLeader(unsigned int clanId, unsigned int userId, PostgreSQLInterface *pgsql);
|
||||
ClanMemberState GetClanMemberState(unsigned int clanId, unsigned int userId, bool *isSubleader, PostgreSQLInterface *pgsql);
|
||||
void GetClanMembers(unsigned int clanId, DataStructures::List<ClanMemberDescriptor> &clanMembers, PostgreSQLInterface *pgsql);
|
||||
bool IsTitleInUse(SLNet::RakString titleName, PostgreSQLInterface *pgsql);
|
||||
bool StringContainsProfanity(SLNet::RakString string, PostgreSQLInterface *pgsql);
|
||||
bool IsValidCountry(SLNet::RakString string, bool *countryHasStates, PostgreSQLInterface *pgsql);
|
||||
bool IsValidState(SLNet::RakString string, PostgreSQLInterface *pgsql);
|
||||
bool IsValidRace(SLNet::RakString string, PostgreSQLInterface *pgsql);
|
||||
void GetFriendIDs(unsigned int callerUserId, bool excludeIfIgnored, PostgreSQLInterface *pgsql, DataStructures::List<unsigned int> &output);
|
||||
void GetClanMateIDs(unsigned int callerUserId, bool excludeIfIgnored, PostgreSQLInterface *pgsql, DataStructures::List<unsigned int> &output);
|
||||
bool IsIgnoredByTarget(unsigned int callerUserId, unsigned int targetUserId, PostgreSQLInterface *pgsql);
|
||||
void OutputFriendsNotification(SLNet::Notification_Friends_StatusChange::Status notificationType, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
|
||||
// This does NOT return the online status to output, as it is not threadsafe
|
||||
void GetFriendInfosByStatus(unsigned int callerUserId, SLNet::RakString status, PostgreSQLInterface *pgsql, DataStructures::List<FriendInfo> &output, bool callerIsUserOne);
|
||||
void SendEmail(DataStructures::List<SLNet::RakString> &recipientNames, unsigned int senderUserId, SLNet::RakString senderUserName, Lobby2Server *server, SLNet::RakString subject, SLNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, SLNet::RakString triggerString, PostgreSQLInterface *pgsql);
|
||||
void SendEmail(DataStructures::List<unsigned int> &targetUserIds, unsigned int senderUserId, SLNet::RakString senderUserName, Lobby2Server *server, SLNet::RakString subject, SLNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, SLNet::RakString triggerString, PostgreSQLInterface *pgsql);
|
||||
void SendEmail(unsigned int targetUserId, unsigned int senderUserId, SLNet::RakString senderUserName, Lobby2Server *server, SLNet::RakString subject, SLNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, SLNet::RakString triggerString, PostgreSQLInterface *pgsql);
|
||||
int GetActiveClanCount(unsigned int userId, PostgreSQLInterface *pgsql);
|
||||
bool CreateAccountParametersFailed( CreateAccountParameters &createAccountParameters, SLNet::Lobby2ResultCode &resultCode, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
|
||||
void UpdateAccountFromMissingCreationParameters(CreateAccountParameters &createAccountParameters, unsigned int userPrimaryKey, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
|
||||
|
||||
__L2_MSG_DB_HEADER(Platform_Startup, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface ) { (void)command; (void)databaseInterface; return false; }};
|
||||
__L2_MSG_DB_HEADER(Platform_Shutdown, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface ) { (void)command; (void)databaseInterface; return false; }};
|
||||
__L2_MSG_DB_HEADER(System_CreateDatabase, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_DestroyDatabase, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_CreateTitle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_DestroyTitle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_GetTitleRequiredAge, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_GetTitleBinaryData, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_RegisterProfanity, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_BanUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_UnbanUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(CDKey_Add, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(CDKey_GetStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(CDKey_Use, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(CDKey_FlagStolen, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_Login, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_Logoff, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_RegisterAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_SetEmailAddressValidated, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_ValidateHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_DeleteAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(System_PruneAccounts, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_GetEmailAddress, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_GetPasswordRecoveryQuestionByHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_GetPasswordByPasswordRecoveryAnswer, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_ChangeHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_UpdateAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_GetAccountDetails, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_StartIgnore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_StopIgnore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_GetIgnoreList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Client_PerTitleIntegerStorage, PGSQL){
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual bool Write( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual bool Read( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual bool Delete( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual bool Add( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
};
|
||||
__L2_MSG_DB_HEADER(Client_SetPresence, PGSQL){virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString curUserHandle );};
|
||||
__L2_MSG_DB_HEADER(Client_GetPresence, PGSQL){virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString curUserHandle );};
|
||||
__L2_MSG_DB_HEADER(Client_PerTitleBinaryStorage, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Friends_SendInvite, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Friends_AcceptInvite, PGSQL){
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
|
||||
};
|
||||
__L2_MSG_DB_HEADER(Friends_RejectInvite, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Friends_GetInvites, PGSQL){
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
|
||||
};
|
||||
__L2_MSG_DB_HEADER(Friends_GetFriends, PGSQL){
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
|
||||
virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
|
||||
};
|
||||
__L2_MSG_DB_HEADER(Friends_Remove, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(BookmarkedUsers_Add, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(BookmarkedUsers_Remove, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(BookmarkedUsers_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Emails_Send, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Emails_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Emails_Delete, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Emails_SetStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_SubmitMatch, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_GetMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_GetMatchBinaryData, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_GetTotalScore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_WipeScoresForPlayer, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_WipeMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_PruneMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_UpdateRating, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_WipeRatings, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Ranking_GetRating, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_Create, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_SetProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_GetProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_SetMyMemberProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_GrantLeader, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_SetSubleaderStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_SetMemberRank, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_GetMemberProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_ChangeHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_Leave, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_SendJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_WithdrawJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_AcceptJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_RejectJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_DownloadInvitationList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_SendJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_WithdrawJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_AcceptJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_RejectJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_DownloadRequestList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_KickAndBlacklistUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_UnblacklistUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_GetBlacklist, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_GetMembers, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
__L2_MSG_DB_HEADER(Clans_GetList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_CreateBoard, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_DestroyBoard, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_CreateNewTopic, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_ReplyToTopic, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_RemovePost, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_GetBoards, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_GetTopics, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Clans_GetPosts, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
(void)command;
|
||||
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
PGresult *result = pgsql->QueryVariadic("");
|
||||
if (result!=0)
|
||||
{
|
||||
PQclear(result);
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultCode=L2RC_SUCCESS;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Notification_Friends_StatusChange, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
if (command->callerSystemAddresses.Size()==0)
|
||||
{
|
||||
OutputFriendsNotification(Notification_Friends_StatusChange::FRIEND_LOGGED_OFF, command, pgsql);
|
||||
}
|
||||
|
||||
// Don't let the thread return this notification with SLNet::UNASSIGNED_SYSTEM_ADDRESS to the user. It's just a message to the thread.
|
||||
return false;
|
||||
}
|
||||
virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle )
|
||||
{
|
||||
switch (op)
|
||||
{
|
||||
case Notification_Friends_StatusChange::FRIEND_LOGGED_IN:
|
||||
case Notification_Friends_StatusChange::FRIEND_LOGGED_IN_DIFFERENT_CONTEXT:
|
||||
case Notification_Friends_StatusChange::THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS:
|
||||
server->GetPresence(presence,otherHandle);
|
||||
break;
|
||||
case Notification_Friends_StatusChange::FRIEND_LOGGED_OFF:
|
||||
presence.isVisible=false;
|
||||
presence.status=Lobby2Presence::NOT_ONLINE;
|
||||
break;
|
||||
case Notification_Friends_StatusChange::FRIEND_ACCOUNT_WAS_DELETED:
|
||||
case Notification_Friends_StatusChange::YOU_WERE_REMOVED_AS_A_FRIEND:
|
||||
case Notification_Friends_StatusChange::GOT_INVITATION_TO_BE_FRIENDS:
|
||||
case Notification_Friends_StatusChange::THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS:
|
||||
presence.isVisible=false;
|
||||
presence.status=Lobby2Presence::UNDEFINED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
__L2_MSG_DB_HEADER(Notification_Friends_PresenceUpdate, PGSQL)
|
||||
{
|
||||
virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
|
||||
{
|
||||
PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
|
||||
|
||||
// Tell all friends about this new login
|
||||
DataStructures::List<unsigned int> output;
|
||||
GetFriendIDs(command->callerUserId, true, pgsql, output);
|
||||
|
||||
unsigned int idx;
|
||||
for (idx=0; idx < output.Size(); idx++)
|
||||
{
|
||||
Notification_Friends_PresenceUpdate *notification = (Notification_Friends_PresenceUpdate *) command->server->GetMessageFactory()->Alloc(L2MID_Notification_Friends_PresenceUpdate);
|
||||
notification->otherHandle=command->callingUserName;
|
||||
notification->newPresence=newPresence;
|
||||
notification->resultCode=L2RC_SUCCESS;
|
||||
command->server->AddOutputFromThread(notification, output[idx], "");
|
||||
}
|
||||
|
||||
// Don't let the thread return this notification with SLNet::UNASSIGNED_SYSTEM_ADDRESS to the user. It's just a message to the thread.
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// --------------------------------------------- Database specific factory class for all messages --------------------------------------------
|
||||
|
||||
#define __L2_MSG_FACTORY_IMPL(__NAME__,__DB__) {case L2MID_##__NAME__ : return SLNet::OP_NEW< __NAME__##_##__DB__ >( _FILE_AND_LINE_ ) ;}
|
||||
|
||||
struct Lobby2MessageFactory_PGSQL : public Lobby2MessageFactory
|
||||
{
|
||||
STATIC_FACTORY_DECLARATIONS(Lobby2MessageFactory_PGSQL)
|
||||
|
||||
virtual Lobby2Message *Alloc(Lobby2MessageID id)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
__L2_MSG_FACTORY_IMPL(Platform_Startup, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Platform_Shutdown, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_CreateDatabase, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_DestroyDatabase, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_CreateTitle, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_DestroyTitle, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_GetTitleRequiredAge, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_GetTitleBinaryData, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_RegisterProfanity, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_BanUser, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_UnbanUser, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(CDKey_Add, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(CDKey_GetStatus, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(CDKey_Use, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(CDKey_FlagStolen, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_Login, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_Logoff, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_RegisterAccount, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_SetEmailAddressValidated, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_ValidateHandle, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_DeleteAccount, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(System_PruneAccounts, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_GetEmailAddress, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_GetPasswordRecoveryQuestionByHandle, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_GetPasswordByPasswordRecoveryAnswer, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_ChangeHandle, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_UpdateAccount, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_GetAccountDetails, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_StartIgnore, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_StopIgnore, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_GetIgnoreList, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_PerTitleIntegerStorage, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_PerTitleBinaryStorage, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_SetPresence, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Client_GetPresence, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Friends_SendInvite, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Friends_AcceptInvite, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Friends_RejectInvite, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Friends_GetInvites, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Friends_GetFriends, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Friends_Remove, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(BookmarkedUsers_Add, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(BookmarkedUsers_Remove, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(BookmarkedUsers_Get, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Emails_Send, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Emails_Get, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Emails_Delete, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Emails_SetStatus, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_SubmitMatch, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_GetMatches, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_GetMatchBinaryData, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_GetTotalScore, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_WipeScoresForPlayer, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_WipeMatches, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_PruneMatches, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_UpdateRating, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_WipeRatings, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Ranking_GetRating, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_Create, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_SetProperties, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetProperties, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_SetMyMemberProperties, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GrantLeader, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_SetSubleaderStatus, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_SetMemberRank, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetMemberProperties, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_ChangeHandle, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_Leave, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_Get, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_SendJoinInvitation, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_WithdrawJoinInvitation, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_AcceptJoinInvitation, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_RejectJoinInvitation, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_DownloadInvitationList, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_SendJoinRequest, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_WithdrawJoinRequest, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_AcceptJoinRequest, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_RejectJoinRequest, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_DownloadRequestList, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_KickAndBlacklistUser, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_UnblacklistUser, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetBlacklist, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetMembers, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetList, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_CreateBoard, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_DestroyBoard, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_CreateNewTopic, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_ReplyToTopic, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_RemovePost, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetBoards, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetTopics, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Clans_GetPosts, PGSQL);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Client_RemoteLogin);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Client_IgnoreStatus);
|
||||
__L2_MSG_FACTORY_IMPL(Notification_Friends_StatusChange, PGSQL);
|
||||
__L2_MSG_FACTORY_IMPL(Notification_Friends_PresenceUpdate, PGSQL);
|
||||
__L2_MSG_FACTORY_BASE(Notification_User_ChangedHandle);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Friends_CreatedClan);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Emails_Received);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_GrantLeader);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_SetSubleaderStatus);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_SetMemberRank);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_ChangeHandle);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_Leave);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_PendingJoinStatus);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_NewClanMember);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_KickAndBlacklistUser);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_UnblacklistUser);
|
||||
__L2_MSG_FACTORY_BASE(Notification_Clans_Destroyed);
|
||||
|
||||
|
||||
default:
|
||||
return 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
}; // namespace SLNet
|
||||
|
||||
#endif
|
||||
119
DependentExtensions/Lobby2/PGSQL/Lobby2Server_PGSQL.cpp
Normal file
119
DependentExtensions/Lobby2/PGSQL/Lobby2Server_PGSQL.cpp
Normal file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Original work: Copyright (c) 2014, Oculus VR, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
|
||||
*
|
||||
*
|
||||
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
|
||||
*
|
||||
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
|
||||
* license found in the license.txt file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include "Lobby2Server_PGSQL.h"
|
||||
#include "PostgreSQLInterface.h"
|
||||
|
||||
using namespace SLNet;
|
||||
|
||||
STATIC_FACTORY_DEFINITIONS(Lobby2Server_PGSQL,Lobby2Server_PGSQL);
|
||||
|
||||
Lobby2ServerCommand Lobby2ServerWorkerThread(Lobby2ServerCommand input, bool *returnOutput, void* perThreadData)
|
||||
{
|
||||
PostgreSQLInterface *postgreSQLInterface = (PostgreSQLInterface *) perThreadData;
|
||||
input.returnToSender = input.lobby2Message->ServerDBImpl(&input, postgreSQLInterface);
|
||||
*returnOutput=input.returnToSender;
|
||||
if (input.deallocMsgWhenDone && input.returnToSender==false)
|
||||
SLNet::OP_DELETE(input.lobby2Message, _FILE_AND_LINE_);
|
||||
return input;
|
||||
}
|
||||
|
||||
Lobby2Server_PGSQL::Lobby2Server_PGSQL()
|
||||
{
|
||||
}
|
||||
Lobby2Server_PGSQL::~Lobby2Server_PGSQL()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
void Lobby2Server_PGSQL::AddInputFromThread(Lobby2Message *msg, unsigned int targetUserId, SLNet::RakString targetUserHandle)
|
||||
{
|
||||
Lobby2ServerCommand command;
|
||||
command.lobby2Message=msg;
|
||||
command.deallocMsgWhenDone=true;
|
||||
command.returnToSender=true;
|
||||
command.callerUserId=targetUserId;
|
||||
command.callingUserName=targetUserHandle;
|
||||
command.server=this;
|
||||
AddInputCommand(command);
|
||||
}
|
||||
void Lobby2Server_PGSQL::AddInputCommand(Lobby2ServerCommand command)
|
||||
{
|
||||
threadPool.AddInput(Lobby2ServerWorkerThread, command);
|
||||
}
|
||||
void Lobby2Server_PGSQL::AddOutputFromThread(Lobby2Message *msg, unsigned int targetUserId, SLNet::RakString targetUserHandle)
|
||||
{
|
||||
Lobby2ServerCommand command;
|
||||
command.lobby2Message=msg;
|
||||
command.deallocMsgWhenDone=true;
|
||||
command.returnToSender=true;
|
||||
command.callerUserId=targetUserId;
|
||||
command.callingUserName=targetUserHandle;
|
||||
command.server=this;
|
||||
msg->resultCode=L2RC_SUCCESS;
|
||||
threadPool.AddOutput(command);
|
||||
}
|
||||
bool Lobby2Server_PGSQL::ConnectToDB(const char *conninfo, int numWorkerThreads)
|
||||
{
|
||||
if (numWorkerThreads<=0)
|
||||
return false;
|
||||
|
||||
StopThreads();
|
||||
|
||||
int i;
|
||||
PostgreSQLInterface *connection;
|
||||
for (i=0; i < numWorkerThreads; i++)
|
||||
{
|
||||
connection = SLNet::OP_NEW<PostgreSQLInterface>( _FILE_AND_LINE_ );
|
||||
if (connection->Connect(conninfo)==false)
|
||||
{
|
||||
SLNet::OP_DELETE(connection, _FILE_AND_LINE_);
|
||||
ClearConnections();
|
||||
return false;
|
||||
}
|
||||
connectionPoolMutex.Lock();
|
||||
connectionPool.Insert(connection, _FILE_AND_LINE_ );
|
||||
connectionPoolMutex.Unlock();
|
||||
}
|
||||
|
||||
threadPool.SetThreadDataInterface(this,0);
|
||||
threadPool.StartThreads(numWorkerThreads,0,0,0);
|
||||
return true;
|
||||
}
|
||||
void* Lobby2Server_PGSQL::PerThreadFactory(void *context)
|
||||
{
|
||||
(void)context;
|
||||
|
||||
PostgreSQLInterface* p;
|
||||
connectionPoolMutex.Lock();
|
||||
p=connectionPool.Pop();
|
||||
connectionPoolMutex.Unlock();
|
||||
return p;
|
||||
}
|
||||
void Lobby2Server_PGSQL::PerThreadDestructor(void* factoryResult, void *context)
|
||||
{
|
||||
(void)context;
|
||||
|
||||
PostgreSQLInterface* p = (PostgreSQLInterface*)factoryResult;
|
||||
SLNet::OP_DELETE(p, _FILE_AND_LINE_);
|
||||
}
|
||||
void Lobby2Server_PGSQL::ClearConnections(void)
|
||||
{
|
||||
unsigned int i;
|
||||
connectionPoolMutex.Lock();
|
||||
for (i=0; i < connectionPool.Size(); i++)
|
||||
SLNet::OP_DELETE(connectionPool[i], _FILE_AND_LINE_);
|
||||
connectionPool.Clear(false, _FILE_AND_LINE_);
|
||||
connectionPoolMutex.Unlock();
|
||||
}
|
||||
56
DependentExtensions/Lobby2/PGSQL/Lobby2Server_PGSQL.h
Normal file
56
DependentExtensions/Lobby2/PGSQL/Lobby2Server_PGSQL.h
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Original work: Copyright (c) 2014, Oculus VR, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
|
||||
*
|
||||
*
|
||||
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
|
||||
*
|
||||
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
|
||||
* license found in the license.txt file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#ifndef __LOBBY_2_SERVER_PGSQL_H
|
||||
#define __LOBBY_2_SERVER_PGSQL_H
|
||||
|
||||
#include "Lobby2Server.h"
|
||||
|
||||
class PostgreSQLInterface;
|
||||
|
||||
namespace SLNet
|
||||
{
|
||||
|
||||
/// PostgreSQL specific functionality to the lobby server
|
||||
class RAK_DLL_EXPORT Lobby2Server_PGSQL : public SLNet::Lobby2Server
|
||||
{
|
||||
public:
|
||||
Lobby2Server_PGSQL();
|
||||
virtual ~Lobby2Server_PGSQL();
|
||||
|
||||
STATIC_FACTORY_DECLARATIONS(Lobby2Server_PGSQL)
|
||||
|
||||
/// ConnectTo to the database \a numWorkerThreads times using the connection string
|
||||
/// \param[in] conninfo See the postgre docs
|
||||
/// \return True on success, false on failure.
|
||||
virtual bool ConnectToDB(const char *conninfo, int numWorkerThreads);
|
||||
|
||||
/// Add input to the worker threads, from a thread already running
|
||||
virtual void AddInputFromThread(Lobby2Message *msg, unsigned int targetUserId, SLNet::RakString targetUserHandle);
|
||||
/// Add output from the worker threads, from a thread already running. This is in addition to the current message, so is used for notifications
|
||||
virtual void AddOutputFromThread(Lobby2Message *msg, unsigned int targetUserId, SLNet::RakString targetUserHandle);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void AddInputCommand(Lobby2ServerCommand command);
|
||||
virtual void* PerThreadFactory(void *context);
|
||||
virtual void PerThreadDestructor(void* factoryResult, void *context);
|
||||
virtual void ClearConnections(void);
|
||||
DataStructures::List<PostgreSQLInterface *> connectionPool;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user