| 571 | |
| 572 | # Create and send a request to peer |
| 573 | def request(self, cmd, params={}, stream_to=None): |
| 574 | # Last command sent more than 10 sec ago, timeout |
| 575 | if self.waiting_requests and self.protocol == "v2" and time.time() - max(self.last_req_time, self.last_recv_time) > 10: |
| 576 | self.close("Request %s timeout: %.3fs" % (self.last_cmd_sent, time.time() - self.last_send_time)) |
| 577 | return False |
| 578 | |
| 579 | self.last_req_time = time.time() |
| 580 | self.last_cmd_sent = cmd |
| 581 | self.req_id += 1 |
| 582 | data = {"cmd": cmd, "req_id": self.req_id, "params": params} |
| 583 | event = gevent.event.AsyncResult() # Create new event for response |
| 584 | self.waiting_requests[self.req_id] = {"evt": event, "cmd": cmd} |
| 585 | if stream_to: |
| 586 | self.waiting_streams[self.req_id] = stream_to |
| 587 | self.send(data) # Send request |
| 588 | res = event.get() # Wait until event solves |
| 589 | return res |
| 590 | |
| 591 | def ping(self): |
| 592 | s = time.time() |