code: async def send(self, card, msg):
          
          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
docs: 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.