1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import logging
- import simplejson as json
- from typing import TYPE_CHECKING
- from apps.web.constant import DeviceCmdCode
- from apps.web.core.accounting import Accounting
- from apps.web.core.helpers import ActionDeviceBuilder
- from apps.web.core.networking import MessageSender
- from apps.web.device.timescale import FluentedEngine, OfflineManager
- from apps.web.eventer import EventBuilder
- from script.eventer.handlers import Handler
- logger = logging.getLogger(__name__)
- if TYPE_CHECKING:
- pass
- class SimpleAckHandler(Handler):
- def do(self):
- if not self.payload:
- logger.info('device event is null.')
- return
- if 'ackid' not in self.payload:
- logger.info('has not ackid in payload.')
- return
- ackid = self.payload['ackid']
- if not self.dev.is_registered:
- logger.warning('{} is not registered, so ignore ackid<{}>'.format(self.dev, ackid))
- return MessageSender.send_no_wait(
- device = self.dev, cmd = DeviceCmdCode.SIMPLE_ACKED, payload = {"ackid": ackid})
- eventer = ActionDeviceBuilder.create_eventer(self.dev) # type:EventBuilder
- if not eventer:
- logger.error('no smartbox or no eventer. imei = {}'.format(self.dev.devNo))
- return
- # 业务模块处理各自的ACK事件, 是否还需要继续上报由业务模块决定, 如果抛异常则不ACKED
- try:
- event = eventer.getEvent(self.payload)
- if event:
- event.do()
- except Exception as e:
- logger.exception(e)
- else:
- MessageSender.send_no_wait(
- device = self.dev, cmd = DeviceCmdCode.SIMPLE_ACKED, payload = {"ackid": ackid})
|