mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-26 15:00:06 +00:00
Explicitly update buddy records in DB
this should fix the bug where removing a buddy while they're offline won't take you off their list until you disconnect
This commit is contained in:
parent
8a68958ed4
commit
f53de8d521
@ -203,6 +203,9 @@ void BuddyManager::reqAcceptBuddy(CNSocket* sock, CNPacketData* data) {
|
|||||||
otherSock->sendPacket((void*)&resp, P_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC, sizeof(sP_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC));
|
otherSock->sendPacket((void*)&resp, P_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC, sizeof(sP_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC));
|
||||||
otherPlr->buddyIDs[slotB] = plr->PCStyle.iPC_UID;
|
otherPlr->buddyIDs[slotB] = plr->PCStyle.iPC_UID;
|
||||||
//std::cout << "Buddy's ID: " << plr->buddyIDs[slotB] << std::endl;
|
//std::cout << "Buddy's ID: " << plr->buddyIDs[slotB] << std::endl;
|
||||||
|
|
||||||
|
// add record to db
|
||||||
|
Database::addBuddyship(plr->iID, otherPlr->iID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -282,6 +285,9 @@ void BuddyManager::reqFindNameBuddyAccept(CNSocket* sock, CNPacketData* data) {
|
|||||||
otherSock->sendPacket((void*)&resp, P_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC, sizeof(sP_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC));
|
otherSock->sendPacket((void*)&resp, P_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC, sizeof(sP_FE2CL_REP_ACCEPT_MAKE_BUDDY_SUCC));
|
||||||
otherPlr->buddyIDs[slotB] = plr->PCStyle.iPC_UID;
|
otherPlr->buddyIDs[slotB] = plr->PCStyle.iPC_UID;
|
||||||
//std::cout << "Buddy's ID: " << plr->buddyIDs[slotB] << std::endl;
|
//std::cout << "Buddy's ID: " << plr->buddyIDs[slotB] << std::endl;
|
||||||
|
|
||||||
|
// add record to db
|
||||||
|
Database::addBuddyship(plr->iID, otherPlr->iID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -405,6 +411,9 @@ void BuddyManager::reqBuddyDelete(CNSocket* sock, CNPacketData* data) {
|
|||||||
plr->buddyIDs[resp.iBuddySlot] = 0;
|
plr->buddyIDs[resp.iBuddySlot] = 0;
|
||||||
sock->sendPacket((void*)&resp, P_FE2CL_REP_REMOVE_BUDDY_SUCC, sizeof(sP_FE2CL_REP_REMOVE_BUDDY_SUCC));
|
sock->sendPacket((void*)&resp, P_FE2CL_REP_REMOVE_BUDDY_SUCC, sizeof(sP_FE2CL_REP_REMOVE_BUDDY_SUCC));
|
||||||
|
|
||||||
|
// remove record from db
|
||||||
|
Database::removeBuddyship(plr->PCStyle.iPC_UID, pkt->iBuddyPCUID);
|
||||||
|
|
||||||
// remove buddy on their side, reusing the struct
|
// remove buddy on their side, reusing the struct
|
||||||
CNSocket* otherSock = PlayerManager::getSockFromID(pkt->iBuddyPCUID);
|
CNSocket* otherSock = PlayerManager::getSockFromID(pkt->iBuddyPCUID);
|
||||||
if (otherSock == nullptr)
|
if (otherSock == nullptr)
|
||||||
|
@ -521,7 +521,7 @@ void Database::updatePlayer(Player *player) {
|
|||||||
updateInventory(player);
|
updateInventory(player);
|
||||||
updateNanos(player);
|
updateNanos(player);
|
||||||
updateQuests(player);
|
updateQuests(player);
|
||||||
updateBuddies(player);
|
//updateBuddies(player); we add/remove buddies explicitly now
|
||||||
}
|
}
|
||||||
|
|
||||||
void Database::updateInventory(Player *player){
|
void Database::updateInventory(Player *player){
|
||||||
@ -634,6 +634,7 @@ void Database::updateQuests(Player* player) {
|
|||||||
db.commit();
|
db.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// note: do not use. explicitly add/remove records instead.
|
||||||
void Database::updateBuddies(Player* player) {
|
void Database::updateBuddies(Player* player) {
|
||||||
db.begin_transaction();
|
db.begin_transaction();
|
||||||
|
|
||||||
@ -766,6 +767,37 @@ int Database::getNumBuddies(Player* player) {
|
|||||||
return buddies.size() > 50 ? 50 : buddies.size();
|
return buddies.size() > 50 ? 50 : buddies.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// buddies
|
||||||
|
void Database::addBuddyship(int playerA, int playerB) {
|
||||||
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
|
||||||
|
db.begin_transaction();
|
||||||
|
|
||||||
|
Buddyship record;
|
||||||
|
record.PlayerAId = playerA;
|
||||||
|
record.PlayerBId = playerB;
|
||||||
|
record.Status = 0; // blocking ???
|
||||||
|
db.insert(record);
|
||||||
|
|
||||||
|
db.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Database::removeBuddyship(int playerA, int playerB) {
|
||||||
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
|
||||||
|
db.begin_transaction();
|
||||||
|
|
||||||
|
db.remove_all<Buddyship>(
|
||||||
|
where(c(&Buddyship::PlayerAId) == playerA && c(&Buddyship::PlayerBId) == playerB)
|
||||||
|
);
|
||||||
|
|
||||||
|
db.remove_all<Buddyship>( // the pair could be in either position
|
||||||
|
where(c(&Buddyship::PlayerAId) == playerB && c(&Buddyship::PlayerBId) == playerA)
|
||||||
|
);
|
||||||
|
|
||||||
|
db.commit();
|
||||||
|
}
|
||||||
|
|
||||||
// email
|
// email
|
||||||
int Database::getUnreadEmailCount(int playerID) {
|
int Database::getUnreadEmailCount(int playerID) {
|
||||||
std::lock_guard<std::mutex> lock(dbCrit);
|
std::lock_guard<std::mutex> lock(dbCrit);
|
||||||
|
@ -162,6 +162,10 @@ namespace Database {
|
|||||||
void appendBlob(std::vector<char>*blob, int64_t input);
|
void appendBlob(std::vector<char>*blob, int64_t input);
|
||||||
int64_t blobToInt64(std::vector<char>::iterator it);
|
int64_t blobToInt64(std::vector<char>::iterator it);
|
||||||
|
|
||||||
|
// buddies
|
||||||
|
void addBuddyship(int playerA, int playerB);
|
||||||
|
void removeBuddyship(int playerA, int playerB);
|
||||||
|
|
||||||
// email
|
// email
|
||||||
int getUnreadEmailCount(int playerID);
|
int getUnreadEmailCount(int playerID);
|
||||||
std::vector<EmailData> getEmails(int playerID, int page);
|
std::vector<EmailData> getEmails(int playerID, int page);
|
||||||
|
Loading…
Reference in New Issue
Block a user