| 1559 | return float(coords[0]), float(coords[1]), (float(coords[2]) if len(coords) == 3 else self.alt) |
| 1560 | |
| 1561 | def heartbeat(self): |
| 1562 | # Remove forts that we can now spin again. |
| 1563 | now = time.time() |
| 1564 | self.fort_timeouts = {id: timeout for id, timeout |
| 1565 | in self.fort_timeouts.iteritems() |
| 1566 | if timeout >= now * 1000} |
| 1567 | |
| 1568 | if now - self.last_heartbeat >= self.heartbeat_threshold and not self.hb_locked: |
| 1569 | previous_heartbeat = self.last_heartbeat |
| 1570 | self.last_heartbeat = now |
| 1571 | request = self.api.create_request() |
| 1572 | request.get_player() |
| 1573 | request.check_awarded_badges() |
| 1574 | request.get_inbox() |
| 1575 | responses = None |
| 1576 | try: |
| 1577 | responses = request.call() |
| 1578 | except NotLoggedInException: |
| 1579 | self.logger.warning('Unable to login, retying') |
| 1580 | self.empty_response = True |
| 1581 | except: |
| 1582 | self.logger.warning('Error occured in heatbeat, retying') |
| 1583 | self.empty_response = True |
| 1584 | |
| 1585 | if not self.empty_response: |
| 1586 | if responses['responses']['GET_PLAYER']['success'] == True: |
| 1587 | # we get the player_data anyway, might as well store it |
| 1588 | self._player = responses['responses']['GET_PLAYER']['player_data'] |
| 1589 | self.event_manager.emit( |
| 1590 | 'player_data', |
| 1591 | sender=self, |
| 1592 | level='debug', |
| 1593 | formatted='player_data: {player_data}', |
| 1594 | data={'player_data': self._player} |
| 1595 | ) |
| 1596 | if responses['responses']['GET_INBOX']['result'] == 1: |
| 1597 | self._inbox = responses['responses']['GET_INBOX']['inbox'] |
| 1598 | # self.logger.info("Got inbox messages?") |
| 1599 | # self.logger.info("Inbox: %s" % responses['responses']['GET_INBOX']) |
| 1600 | if 'notifications' in self._inbox: |
| 1601 | for notification in self._inbox['notifications']: |
| 1602 | notification_date = datetime.datetime.fromtimestamp(int(notification['create_timestamp_ms']) / 1e3) |
| 1603 | if previous_heartbeat > (int(notification['create_timestamp_ms']) / 1e3): |
| 1604 | # Skipp old notifications! |
| 1605 | continue |
| 1606 | |
| 1607 | if notification['category'] == 'pokemon_hungry': |
| 1608 | gym_name = pokemon = 'Unknown' |
| 1609 | for variable in notification['variables']: |
| 1610 | if variable['name'] == 'GYM_NAME': |
| 1611 | gym_name = variable['literal'] |
| 1612 | if variable['name'] == 'POKEMON_NICKNAME': |
| 1613 | pokemon = variable['literal'] |
| 1614 | |
| 1615 | self.event_manager.emit( |
| 1616 | 'pokemon_hungy', |
| 1617 | sender=self, |
| 1618 | level='info', |