friends: Work around race condition

This commit is contained in:
John Cote 2021-07-19 22:37:04 -04:00
parent 77d35d7875
commit 5592dc8a34
No known key found for this signature in database
GPG Key ID: E3442FF71E9C1C01
3 changed files with 18 additions and 8 deletions

View File

@ -2853,7 +2853,7 @@ dclass ToontownFriendsManager : DistributedObject {
getAvatarDetailsRequest(uint32) clsend;
getAvatarDetailsResponse(blob);
makeFriends(uint32, uint32, uint8, uint32);
makeFriendsResponse(uint8, uint32) airecv;
makeFriendsResponse(uint32, uint32, uint8, uint32) airecv;
};
dclass TTSpeedchatRelay : SpeedchatRelay {

View File

@ -1,10 +1,18 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectGlobalAI import DistributedObjectGlobalAI
from direct.distributed.PyDatagram import *
class ToontownFriendsManagerAI(DistributedObjectGlobalAI):
notify = DirectNotifyGlobal.directNotify.newCategory('ToontownFriendsManagerAI')
def sendFriendOnline(self, avId, friendId, commonChatFlags, whitelistChatFlags):
datagram = PyDatagram()
datagram.addUint32(friendId) # doId
datagram.addUint8(commonChatFlags) # commonChatFlags
datagram.addUint8(whitelistChatFlags) # whitelistChatFlags
self.sendUpdateToAvatarId(avId, 'friendOnline', [datagram.getMessage()])
def makeFriends(self, avatarAId, avatarBId, flags, context):
"""
Requests to make a friendship between avatarA and avatarB with
@ -16,5 +24,9 @@ class ToontownFriendsManagerAI(DistributedObjectGlobalAI):
"""
self.sendUpdate('makeFriends', [avatarAId, avatarBId, flags, context])
def makeFriendsResponse(self, result, context):
def makeFriendsResponse(self, avatarAId, avatarBId, result, context):
if result == 1:
self.sendFriendOnline(avatarAId, avatarBId, 0, 1)
self.sendFriendOnline(avatarBId, avatarAId, 0, 1)
messenger.send("makeFriendsReply", [result, context])

View File

@ -218,8 +218,6 @@ class MakeFriendsOperation(FriendsOperation):
{'setFriendsList': [friendsList]})
if avId in self.onlineToons:
self.friendsManager.sendUpdateToAvatar(avId, 'setFriendsList', [friendsList])
if friendId in self.onlineToons:
self.friendsManager.sendFriendOnline(avId, friendId, 0, 1)
def __handleAvatarARetrieved(self, dclass, fields):
self.__handleMakeFriends(dclass, fields, self.avatarAId, self.avatarBId)
@ -237,12 +235,12 @@ class MakeFriendsOperation(FriendsOperation):
def _handleDone(self):
self.resultCode = 1
self.friendsManager.sendMakeFriendsResponse(self.resultCode, self.context)
self.friendsManager.sendMakeFriendsResponse(self.avatarAId, self.avatarBId, self.resultCode, self.context)
FriendsOperation._handleDone(self)
def _handleError(self, error):
self.resultCode = 0
self.friendsManager.sendMakeFriendsResponse(self.resultCode, self.context)
self.friendsManager.sendMakeFriendsResponse(self.avatarAId, self.avatarBId, self.resultCode, self.context)
FriendsOperation._handleError(self, error)
@ -253,8 +251,8 @@ class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
DistributedObjectGlobalUD.__init__(self, air)
self.operations = []
def sendMakeFriendsResponse(self, result, context):
self.sendUpdate('makeFriendsResponse', [result, context])
def sendMakeFriendsResponse(self, avatarAId, avatarBId, result, context):
self.sendUpdate('makeFriendsResponse', [avatarAId, avatarBId, result, context])
def sendFriendOnline(self, avId, friendId, commonChatFlags, whitelistChatFlags):
datagram = PyDatagram()