From 5592dc8a346401c8fd739fba230f68b0c6ed86b2 Mon Sep 17 00:00:00 2001 From: John Cote Date: Mon, 19 Jul 2021 22:37:04 -0400 Subject: [PATCH] friends: Work around race condition --- etc/toon.dc | 2 +- toontown/friends/ToontownFriendsManagerAI.py | 14 +++++++++++++- toontown/friends/ToontownFriendsManagerUD.py | 10 ++++------ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/etc/toon.dc b/etc/toon.dc index 3370b79..a125bb7 100755 --- a/etc/toon.dc +++ b/etc/toon.dc @@ -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 { diff --git a/toontown/friends/ToontownFriendsManagerAI.py b/toontown/friends/ToontownFriendsManagerAI.py index 799ee24..167e99e 100644 --- a/toontown/friends/ToontownFriendsManagerAI.py +++ b/toontown/friends/ToontownFriendsManagerAI.py @@ -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]) diff --git a/toontown/friends/ToontownFriendsManagerUD.py b/toontown/friends/ToontownFriendsManagerUD.py index 12d7172..60751b0 100644 --- a/toontown/friends/ToontownFriendsManagerUD.py +++ b/toontown/friends/ToontownFriendsManagerUD.py @@ -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()