def handle(self): print('New connection from %s:%s' % self.address) try: msg = json.loads(netstring.read(self.sock)) except json.decoder.JSONDecodeError: msg = {'type': 'error', 'error': 'invalid JSON'} return self.reply_and_close(msg) if msg.get('type') == 'ping': return self.reply_and_close({'type': 'pong'}) self.new_place_request(msg) error = False try: to_send = self.send_queue.get() while to_send: self.send_msg(to_send) if to_send['type'] == 'error': error = True to_send = self.send_queue.get() except BrokenPipeError: print('socket closed') else: if not error: print('request complete') self.send_msg({'type': 'done'}) self.sock.close()
def handle(self): print('New connection from %s:%s' % self.client_address) msg = json.loads(netstring.read(self.request)) if msg['type'] == 'ping': self.send_msg({'type': 'pong'}) return if msg['type'] == 'match': self.place_from_msg(msg) return self.match_place(msg) if msg['type'] == 'jobs': job_list = [] for t in threading.enumerate(): if not isinstance(t, MatcherJob): continue start = datetime.utcfromtimestamp(int(t.start_time)) item = { 'osm_id': t.osm_id, 'osm_type': t.osm_type, 'subscribers': t.subscriber_count(), 'start': str(start), } job_list.append(item) self.send_msg({'type': 'jobs', 'items': job_list}) return if msg['type'] == 'stop_job': self.place_from_msg(self, msg) return self.stop_job()
def handle(self): print('New connection from %s:%s' % self.client_address) msg = json.loads(netstring.read(self.request)) with app.app_context(): try: return self.handle_message(msg) except Exception as e: error_str = f'{type(e).__name__}: {e}' self.send_msg({'type': 'error', 'msg': error_str}) info = 'matcher queue' mail.send_traceback(info, prefix='matcher queue')
def send_msg(self, msg, check_ack=True): netstring.write(self.sock, json.dumps(msg)) if check_ack: msg = netstring.read(self.sock) assert msg == 'ack'