示例#1
0
    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()
示例#2
0
 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()
示例#3
0
    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')
示例#4
0
 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'