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

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