def _listen_for_response()

in mssqlscripter/jsonrpc/jsonrpcclient.py [0:0]


    def _listen_for_response(self):
        """
            Listen for and store response, event or exception for main thread to access.
            Exceptions:
                ValueError
                    The stream was closed. Exit the thread immediately.
                LookupError
                    No valid header with content-length was found.
                EOFError
                    The stream may not contain any bytes yet, so retry.
        """
        while not self.cancel:
            try:
                response = self.reader.read_response()
                response_id_str = response.get(u'id')
                if response_id_str:
                    response_id = int(response_id_str)
                    # we have a id, map it with a new queue if it doesn't
                    # exist.
                    if response_id not in self.response_map:
                        self.response_map[response_id] = Queue()
                    # Enqueue the response.
                    self.response_map[response_id].put(response)
                else:
                    # Event was returned.
                    self.response_map[0].put(response)

            except EOFError as error:
                # Thread fails once we reach EOF.
                self._record_exception(error, self.RESPONSE_THREAD_NAME)
                break
            except ValueError as error:
                # Stream was closed.
                self._record_exception(error, self.RESPONSE_THREAD_NAME)
                break
            except LookupError as error:
                # Content-Length header was not found.
                self._record_exception(error, self.RESPONSE_THREAD_NAME)
                break
            except Exception as error:
                # Catch generic exceptions.
                self.record_exception(error, self.RESPONSE_THREAD_NAME)
                break