Send message *msg* to the neighboring agent in the *card*
        cardinal direction.

        :param str card: 'N', 'E', 'S', or 'W'.
        :param msg: Message to the agent.
        :returns: Response from the agent

        The method calls the neighboring agent's :meth:`rcv` with the message
        and returns any value returned by that agent.

        This method will fail silently if there is no neighbor agent in the
        given cardinal direction.

async def send(self, card, msg):
        """Send message *msg* to the neighboring agent in the *card*
        cardinal direction.

        :param str card: 'N', 'E', 'S', or 'W'.
        :param msg: Message to the agent.
        :returns: Response from the agent

        The method calls the neighboring agent's :meth:`rcv` with the message
        and returns any value returned by that agent.

        This method will fail silently if there is no neighbor agent in the
        given cardinal direction.
        """
        addr = self.neighbors[card]
        if addr is None:
            return None
        try:
            r_agent = await self.env.connect(addr, timeout=10)
            return await r_agent.rcv(msg)
        except:
            self._log(logging.WARNING, "Could not connect to agent in {}:\n{}"
                      .format(addr, traceback.format_exc()))
        return None