Event handler when json request arrives.
(self, args)
| 260 | self.write_message(data.encode("utf-8"), binary=True) |
| 261 | |
| 262 | def call_handler(self, args): |
| 263 | """Event handler when json request arrives.""" |
| 264 | code = args[0] |
| 265 | if code == TrackerCode.PUT: |
| 266 | key = args[1] |
| 267 | port, matchkey = args[2] |
| 268 | self.pending_matchkeys.add(matchkey) |
| 269 | # got custom address (from rpc server) |
| 270 | if len(args) >= 4 and args[3] is not None: |
| 271 | value = (self, args[3], port, matchkey) |
| 272 | else: |
| 273 | value = (self, self._addr[0], port, matchkey) |
| 274 | self._tracker.put(key, value) |
| 275 | self.put_values.append(value) |
| 276 | self.ret_value(TrackerCode.SUCCESS) |
| 277 | elif code == TrackerCode.REQUEST: |
| 278 | key = args[1] |
| 279 | user = args[2] |
| 280 | priority = args[3] |
| 281 | |
| 282 | def _cb(value): |
| 283 | # if the connection is already closed |
| 284 | if not self._sock: |
| 285 | return False |
| 286 | try: |
| 287 | self.ret_value([TrackerCode.SUCCESS, value]) |
| 288 | except OSError: |
| 289 | return False |
| 290 | return True |
| 291 | |
| 292 | self._tracker.request(key, user, priority, _cb) |
| 293 | elif code == TrackerCode.PING: |
| 294 | self.ret_value(TrackerCode.SUCCESS) |
| 295 | elif code == TrackerCode.GET_PENDING_MATCHKEYS: |
| 296 | self.ret_value(list(self.pending_matchkeys)) |
| 297 | elif code == TrackerCode.STOP: |
| 298 | # safe stop tracker |
| 299 | if self._tracker._stop_key == args[1]: |
| 300 | self.ret_value(TrackerCode.SUCCESS) |
| 301 | self._tracker.stop() |
| 302 | else: |
| 303 | self.ret_value(TrackerCode.FAIL) |
| 304 | elif code == TrackerCode.UPDATE_INFO: |
| 305 | info = args[1] |
| 306 | assert isinstance(info, dict) |
| 307 | if info["addr"][0] is None: |
| 308 | info["addr"][0] = self._addr[0] |
| 309 | self._info.update(info) |
| 310 | self.ret_value(TrackerCode.SUCCESS) |
| 311 | elif code == TrackerCode.SUMMARY: |
| 312 | status = self._tracker.summary() |
| 313 | self.ret_value([TrackerCode.SUCCESS, status]) |
| 314 | else: |
| 315 | logger.warning("Unknown tracker code %d", code) |
| 316 | self.close() |
| 317 | |
| 318 | def on_close(self): |
| 319 | self._tracker.close(self) |