friends: Friend removal
This commit is contained in:
parent
857d11d93f
commit
af2b95e3e1
|
|
@ -2860,6 +2860,7 @@ dclass ToontownFriendsManager : DistributedObject {
|
||||||
getAvatarDetailsResponse(blob);
|
getAvatarDetailsResponse(blob);
|
||||||
makeFriends(uint32, uint32, uint8, uint32);
|
makeFriends(uint32, uint32, uint8, uint32);
|
||||||
makeFriendsResponse(uint32, uint32, uint8, uint32) airecv;
|
makeFriendsResponse(uint32, uint32, uint8, uint32) airecv;
|
||||||
|
removeFriend(uint32) clsend;
|
||||||
};
|
};
|
||||||
|
|
||||||
dclass TTSpeedchatRelay : SpeedchatRelay {
|
dclass TTSpeedchatRelay : SpeedchatRelay {
|
||||||
|
|
|
||||||
|
|
@ -851,11 +851,14 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def removeFriend(self, avatarId):
|
def removeFriend(self, avatarId):
|
||||||
base.localAvatar.sendUpdate('friendsNotify', [base.localAvatar.doId, 1], sendToId=avatarId)
|
if __astron__:
|
||||||
datagram = PyDatagram()
|
self.toontownFriendsManager.sendRemoveFriend(avatarId)
|
||||||
datagram.addUint16(CLIENT_REMOVE_FRIEND)
|
else:
|
||||||
datagram.addUint32(avatarId)
|
base.localAvatar.sendUpdate('friendsNotify', [base.localAvatar.doId, 1], sendToId=avatarId)
|
||||||
self.send(datagram)
|
datagram = PyDatagram()
|
||||||
|
datagram.addUint16(CLIENT_REMOVE_FRIEND)
|
||||||
|
datagram.addUint32(avatarId)
|
||||||
|
self.send(datagram)
|
||||||
self.estateMgr.removeFriend(base.localAvatar.doId, avatarId)
|
self.estateMgr.removeFriend(base.localAvatar.doId, avatarId)
|
||||||
for pair in base.localAvatar.friendsList:
|
for pair in base.localAvatar.friendsList:
|
||||||
friendId = pair[0]
|
friendId = pair[0]
|
||||||
|
|
|
||||||
|
|
@ -27,3 +27,6 @@ class ToontownFriendsManager(DistributedObjectGlobal):
|
||||||
datagram = PyDatagram(avatarDetails)
|
datagram = PyDatagram(avatarDetails)
|
||||||
di = PyDatagramIterator(datagram)
|
di = PyDatagramIterator(datagram)
|
||||||
self.cr.handleGetAvatarDetailsResp(di)
|
self.cr.handleGetAvatarDetailsResp(di)
|
||||||
|
|
||||||
|
def sendRemoveFriend(self, friendId):
|
||||||
|
self.sendUpdate('removeFriend', [friendId])
|
||||||
|
|
|
||||||
|
|
@ -263,6 +263,89 @@ class MakeFriendsOperation(FriendsOperation):
|
||||||
FriendsOperation._handleError(self, error)
|
FriendsOperation._handleError(self, error)
|
||||||
|
|
||||||
|
|
||||||
|
class RemoveFriendOperation(FriendsOperation):
|
||||||
|
|
||||||
|
def __init__(self, friendsManager, sender):
|
||||||
|
FriendsOperation.__init__(self, friendsManager, sender)
|
||||||
|
self.friendId = None
|
||||||
|
self.onlineToons = None
|
||||||
|
self.senderFriendsList = None
|
||||||
|
self.friendFriendsList = None
|
||||||
|
|
||||||
|
def start(self, friendId):
|
||||||
|
self.friendId = friendId
|
||||||
|
self.onlineToons = []
|
||||||
|
self.friendsManager.air.getActivated(self.sender, self.__gotSenderActivated)
|
||||||
|
|
||||||
|
def __handleActivatedResp(self, avId, activated):
|
||||||
|
if activated:
|
||||||
|
self.onlineToons.append(avId)
|
||||||
|
|
||||||
|
def __gotSenderActivated(self, avId, activated):
|
||||||
|
self.__handleActivatedResp(avId, activated)
|
||||||
|
self.friendsManager.air.getActivated(self.friendId, self.__gotFriendActivated)
|
||||||
|
|
||||||
|
def __gotFriendActivated(self, avId, activated):
|
||||||
|
self.__handleActivatedResp(avId, activated)
|
||||||
|
self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, self.sender,
|
||||||
|
self.__handleSenderRetrieved)
|
||||||
|
|
||||||
|
def __handleRemoveFriend(self, dclass, fields, friendId):
|
||||||
|
if dclass != self.friendsManager.air.dclassesByName['DistributedToonUD']:
|
||||||
|
self._handleError('Retrieved sender is not a DistributedToonUD!')
|
||||||
|
return False, []
|
||||||
|
|
||||||
|
friendsList = fields['setFriendsList'][0]
|
||||||
|
removed = False
|
||||||
|
for index, friend in enumerate(friendsList):
|
||||||
|
if friend[0] == friendId:
|
||||||
|
del friendsList[index]
|
||||||
|
removed = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if removed:
|
||||||
|
return True, friendsList
|
||||||
|
else:
|
||||||
|
self._handleError('Unable to remove friend!')
|
||||||
|
return False, []
|
||||||
|
|
||||||
|
def __handleSenderRetrieved(self, dclass, fields):
|
||||||
|
success, senderFriendsList = self.__handleRemoveFriend(dclass, fields, self.friendId)
|
||||||
|
if success:
|
||||||
|
self.senderFriendsList = senderFriendsList
|
||||||
|
self.friendsManager.air.dbInterface.queryObject(self.friendsManager.air.dbId, self.friendId,
|
||||||
|
self.__handleFriendRetrieved)
|
||||||
|
|
||||||
|
def __handleFriendRetrieved(self, dclass, fields):
|
||||||
|
success, friendFriendsList = self.__handleRemoveFriend(dclass, fields, self.sender)
|
||||||
|
if success:
|
||||||
|
self.friendFriendsList = friendFriendsList
|
||||||
|
self._handleDone()
|
||||||
|
|
||||||
|
def __handleSetFriendsList(self, avId, friendsList):
|
||||||
|
if avId in self.onlineToons:
|
||||||
|
self.friendsManager.sendUpdateToAvatar(avId, 'setFriendsList', [friendsList])
|
||||||
|
else:
|
||||||
|
self.friendsManager.air.dbInterface.updateObject(self.friendsManager.air.dbId, avId,
|
||||||
|
self.friendsManager.air.dclassesByName[
|
||||||
|
'DistributedToonUD'],
|
||||||
|
{'setFriendsList': [friendsList]})
|
||||||
|
|
||||||
|
def _handleDone(self):
|
||||||
|
if self.senderFriendsList is not None and self.friendFriendsList is not None:
|
||||||
|
self.__handleSetFriendsList(self.sender, self.senderFriendsList)
|
||||||
|
self.__handleSetFriendsList(self.friendId, self.friendFriendsList)
|
||||||
|
|
||||||
|
if self.sender in self.onlineToons and self.friendId in self.onlineToons:
|
||||||
|
self.friendsManager.undeclareObject(self.sender, self.friendId)
|
||||||
|
self.friendsManager.undeclareObject(self.friendId, self.sender)
|
||||||
|
|
||||||
|
if self.friendId in self.onlineToons:
|
||||||
|
self.friendsManager.sendUpdateToAvatar(self.friendId, 'friendsNotify', [self.sender, 1])
|
||||||
|
|
||||||
|
FriendsOperation._handleDone(self)
|
||||||
|
|
||||||
|
|
||||||
class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory('ToontownFriendsManagerUD')
|
notify = DirectNotifyGlobal.directNotify.newCategory('ToontownFriendsManagerUD')
|
||||||
|
|
||||||
|
|
@ -280,6 +363,13 @@ class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
||||||
datagram.addUint16(self.air.dclassesByName['DistributedToonUD'].getNumber())
|
datagram.addUint16(self.air.dclassesByName['DistributedToonUD'].getNumber())
|
||||||
self.air.send(datagram)
|
self.air.send(datagram)
|
||||||
|
|
||||||
|
def undeclareObject(self, doId, objId):
|
||||||
|
datagram = PyDatagram()
|
||||||
|
datagram.addServerHeader(self.GetPuppetConnectionChannel(doId), self.air.ourChannel,
|
||||||
|
CLIENTAGENT_UNDECLARE_OBJECT)
|
||||||
|
datagram.addUint32(objId)
|
||||||
|
self.air.send(datagram)
|
||||||
|
|
||||||
def sendFriendOnline(self, avId, friendId, commonChatFlags, whitelistChatFlags):
|
def sendFriendOnline(self, avId, friendId, commonChatFlags, whitelistChatFlags):
|
||||||
datagram = PyDatagram()
|
datagram = PyDatagram()
|
||||||
datagram.addUint32(friendId) # doId
|
datagram.addUint32(friendId) # doId
|
||||||
|
|
@ -321,3 +411,6 @@ class ToontownFriendsManagerUD(DistributedObjectGlobalUD):
|
||||||
|
|
||||||
def makeFriends(self, avatarAId, avatarBId, flags, context):
|
def makeFriends(self, avatarAId, avatarBId, flags, context):
|
||||||
self.runServerOperation(MakeFriendsOperation, avatarAId, avatarBId, flags, context)
|
self.runServerOperation(MakeFriendsOperation, avatarAId, avatarBId, flags, context)
|
||||||
|
|
||||||
|
def removeFriend(self, friendId):
|
||||||
|
self.runSenderOperation(RemoveFriendOperation, friendId)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue