def handle_STATESERVER_OBJECT_ENTER_AI_WITH_REQUIRED(self, dgi, sender, recipients):
     new_distobj = self.create_view_from_datagram(dgi, cls_postfix = 'AI')
     if new_distobj:
         view, do_id, parent_id, zone_id = new_distobj 
         if parent_zone_to_location(parent_id, zone_id) in self.distobj_interests_location_to_do_id.keys():
             interested_distobjs = self.distobj_interests_location_to_do_id[parent_zone_to_location(parent_id, zone_id)]
             for distobj in interested_distobjs:
                 self.distributed_objects[distobj].interest_distobj_ai_enter(view, do_id, parent_id, zone_id)
 def handle_STATESERVER_OBJECT_CHANGING_LOCATION(self, dgi, sender, recipients):
     print("handle_STATESERVER_OBJECT_CHANGING_LOCATION", sender, recipients)
     do_id = dgi.read_uint32()
     new_parent = dgi.read_uint32()
     new_zone = dgi.read_uint32()
     old_parent = dgi.read_uint32()
     old_zone = dgi.read_uint32()
     if parent_zone_to_location(new_parent, new_zone) in self.distobj_interests_location_to_do_id.keys():
         interested_distobjs = self.distobj_interests_location_to_do_id[parent_zone_to_location(new_parent, new_zone)]
         for distobj in interested_distobjs:
             self.distributed_objects[distobj].interest_changing_location_enter(sender, do_id, new_parent, new_zone, old_parent, old_zone)
     if parent_zone_to_location(old_parent, old_zone) in self.distobj_interests_location_to_do_id.keys():
         interested_distobjs = self.distobj_interests_location_to_do_id[parent_zone_to_location(old_parent, old_zone)]
         for distobj in interested_distobjs:
             self.distributed_objects[distobj].interest_changing_location_leave(sender, do_id, new_parent, new_zone, old_parent, old_zone)
 def add_ai_interest(self, distobj_id, zone_id, by_distobj = False):
     if by_distobj:
         print("Interest for %d in (%d, %d)" % (by_distobj, distobj_id, zone_id))
         if not (by_distobj in self.distobj_interests_do_id_to_locations.keys()):
             self.distobj_interests_do_id_to_locations[by_distobj] = [parent_zone_to_location(distobj_id, zone_id)]
         else:
             self.distobj_interests_do_id_to_locations[by_distobj].append(parent_zone_to_location(distobj_id, zone_id))
         if not (by_distobj in self.distobj_interests_location_to_do_id.keys()):
             self.distobj_interests_location_to_do_id[parent_zone_to_location(distobj_id, zone_id)] = [by_distobj]
         else:
             self.distobj_interests_location_to_do_id[parent_zone_to_location(distobj_id, zone_id)].append(by_distobj)
     else:
         print("Interest for repo in (%d, %d)" % (distobj_id, zone_id))
         self.repo_interests.add(parent_zone_to_location(distobj_id, zone_id))
     self.send_CONTROL_ADD_CHANNEL(parent_zone_to_location(distobj_id, zone_id))
     # Request list of objects already existing in that zone for ENTER 
     # FIXME: Can we do something with the context?
     print("repo: STATESERVER_OBJECT_GET_ZONE_OBJECTS(%d, %d)" % (distobj_id, zone_id))
     self.send_STATESERVER_OBJECT_GET_ZONE_OBJECTS(0, distobj_id, zone_id)