docs: def _ping(self, uid, addr, port):
          """
          Just say hello so that pymlgame knows that your controller is still alive. Unused controllers will be deleted
          after a while. This function is also used to update the address and port of the controller if it has changed.
  
          :param uid: Unique id of the controller
          :param addr: Address of the controller
          :param port: Port that the controller listens on
          :type uid: str
          :type addr: str
          :type port: int
          """
          try:
              self.controllers[uid][0] = addr
              self.controllers[uid][1] = port
              self.controllers[uid][3] = time.time()
  
              e = Event(uid, E_PING)
              self.queue.put_nowait(e)
          except KeyError:
              # There is no such controller, ignore the command
              pass