def chatrequest(self, event): """Chat event handler for incoming events :param event: ChatRequest with incoming chat message """ self.log("Event: '%s'" % event.__dict__) try: action = event.action data = event.data username = self._getusername(event) if action == "say": chatpacket = {'component': 'chat', 'action': 'broadcast', 'data': { 'sender': username, 'timestamp': time(), 'content': str(data.encode('utf-8')) } } else: self.log("Unsupported action: ", action, event, lvl=warn) return try: self.fireEvent(broadcast("users", chatpacket)) except Exception as e: self.log("Transmission error before broadcast: %s" % e, lvl=error) except Exception as e: self.log("Error: '%s' %s" % (e, type(e)), lvl=error)
def navdatapush(self): """ Pushes the current :referenceframe: out to clients. :return: """ try: self.fireEvent(referenceframe({"data": self.referenceframe, "ages": self.referenceages}), "navdata") self.intervalcount += 1 if self.intervalcount == self.passiveinterval: self.fireEvent( broadcast( "users", { "component": "navdata", "action": "update", "data": {"data": self.referenceframe, "ages": self.referenceages}, }, ), "hfosweb", ) self.intervalcount = 0 # self.log("Reference frame successfully pushed.", # lvl=verbose) except Exception as e: self.log("Could not push referenceframe: ", e, type(e), lvl=critical)
def navdatapush(self): """ Pushes the current :referenceframe: out to clients. :return: """ try: self.fireEvent(referenceframe({ 'data': self.referenceframe, 'ages': self.referenceages }), "navdata") self.intervalcount += 1 if self.intervalcount == self.passiveinterval and len( self.referenceframe) > 0: self.fireEvent(broadcast('users', { 'component': 'hfos.navdata.sensors', 'action': 'update', 'data': { 'data': self.referenceframe, 'ages': self.referenceages } }), "hfosweb") self.intervalcount = 0 # self.log("Reference frame successfully pushed.", # lvl=verbose) except Exception as e: self.log("Could not push referenceframe: ", e, type(e), lvl=critical)
def ping(self, *args): """Pings all connected clients with stupid ping/demo messages (for now) :param args: """ self._count += 1 self.log("Ping %i:" % self._count, args) data = {'component': 'ping', 'action': "Hello" } if (self._count % 2) == 0: data = {'component': 'navdata', 'action': 'update', 'data': {'true_course': randint(0, 359), 'spd_over_grnd': randint(0, 50) } } self.fireEvent(broadcast("clients", json.dumps(data)))
def alert(self, event): """AlertManager event handler for incoming events :param event with incoming AlertManager message """ self.log("Event: '%s'" % event.__dict__) try: data = event.data # noinspection PySimplifyBooleanCheck,PySimplifyBooleanCheck if data is True: self.log("MOB ALERT ACTIVATED.", lvl=critical) self.mob_alert = True self._record_mob_alert() alert_packet = { 'component': 'hfos.alert.manager', 'action': 'alert', 'data': True } else: self.log("MOB deactivation requested by ", event.user.account.name, lvl=warn) self.mob_alert = False alert_packet = { 'component': 'hfos.alert.manager', 'action': 'alert', 'data': False } try: self.fireEvent(broadcast("users", alert_packet)) except Exception as e: self.log("Transmission error before broadcast: %s" % e, lvl=error) except Exception as e: self.log("Error: '%s' %s" % (e, type(e)), lvl=error)