コード例 #1
0
 def close(self, error=None):
     """ close down this channel on both sides. """
     if not self._closed:
         # state transition "opened/sendonly" --> "closed"
         # threads warning: the channel might be closed under our feet,
         # but it's never damaging to send too many CHANNEL_CLOSE messages
         put = self.gateway._send
         if error is not None:
             put(Message.CHANNEL_CLOSE_ERROR(self.id, str(error)))
         else:
             put(Message.CHANNEL_CLOSE(self.id))
         if isinstance(error, RemoteError):
             self._remoteerrors.append(error)
         self._closed = True  # --> "closed"
         self._receiveclosed.set()
         queue = self._items
         if queue is not None:
             queue.put(ENDMARKER)
         self.gateway._channelfactory._no_longer_opened(self.id)