|
|
@ -5,19 +5,9 @@ import sys |
|
|
import asyncio |
|
|
import asyncio |
|
|
from time import time |
|
|
from time import time |
|
|
from typing import List, Dict |
|
|
from typing import List, Dict |
|
|
|
|
|
import copy |
|
|
|
|
|
|
|
|
class logger: |
|
|
from logger import logger |
|
|
@staticmethod |
|
|
|
|
|
def info(t): |
|
|
|
|
|
print("[INFO]", t) |
|
|
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
|
def error(t): |
|
|
|
|
|
print("[ERROR]", t) |
|
|
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
|
def debug(t): |
|
|
|
|
|
print("[DEBUG]", t) |
|
|
|
|
|
|
|
|
|
|
|
#mesh |
|
|
#mesh |
|
|
from mesht_device import MeshtDevice |
|
|
from mesht_device import MeshtDevice |
|
|
@ -32,6 +22,9 @@ from contextlib import asynccontextmanager |
|
|
#mongo |
|
|
#mongo |
|
|
from pymongo import AsyncMongoClient |
|
|
from pymongo import AsyncMongoClient |
|
|
|
|
|
|
|
|
|
|
|
#other |
|
|
|
|
|
from botManager import BotManager |
|
|
|
|
|
|
|
|
def isInt(any): |
|
|
def isInt(any): |
|
|
try: |
|
|
try: |
|
|
int(any) |
|
|
int(any) |
|
|
@ -73,7 +66,7 @@ class MeshListener(MeshArgsParse): |
|
|
self.meshState = AVAILABLE |
|
|
self.meshState = AVAILABLE |
|
|
while True: |
|
|
while True: |
|
|
from_radio, _ = await self.device.recv() |
|
|
from_radio, _ = await self.device.recv() |
|
|
logger.debug(from_radio) |
|
|
#logger.debug(from_radio) |
|
|
await queue.put(from_radio) |
|
|
await queue.put(from_radio) |
|
|
except asyncio.exceptions.CancelledError: |
|
|
except asyncio.exceptions.CancelledError: |
|
|
logger.info("Kill mesh device") |
|
|
logger.info("Kill mesh device") |
|
|
@ -119,7 +112,7 @@ class MongoDriver(MeshArgsParse): |
|
|
self.dbStore = self.dbClient[self.args.mongo_db] |
|
|
self.dbStore = self.dbClient[self.args.mongo_db] |
|
|
#self.dbCollection = self.dbStore.from_radio |
|
|
#self.dbCollection = self.dbStore.from_radio |
|
|
|
|
|
|
|
|
async def dbSaveRadio(self, from_radio): |
|
|
async def dbSaveRadio(self, new_from_radio): |
|
|
'''try: |
|
|
'''try: |
|
|
anyJson = from_radio["packet"] |
|
|
anyJson = from_radio["packet"] |
|
|
except: |
|
|
except: |
|
|
@ -128,6 +121,7 @@ class MongoDriver(MeshArgsParse): |
|
|
|
|
|
|
|
|
#logger.debug(from_radio) |
|
|
#logger.debug(from_radio) |
|
|
#logger.debug(len(list(from_radio.keys()))) |
|
|
#logger.debug(len(list(from_radio.keys()))) |
|
|
|
|
|
from_radio = copy.deepcopy(new_from_radio) |
|
|
for k, v in from_radio.items(): |
|
|
for k, v in from_radio.items(): |
|
|
if type(v) != dict: |
|
|
if type(v) != dict: |
|
|
v = {"data": v, "ts": time()} |
|
|
v = {"data": v, "ts": time()} |
|
|
@ -149,7 +143,7 @@ class MongoDriver(MeshArgsParse): |
|
|
|
|
|
|
|
|
await self.dbStore[k].insert_one(v) |
|
|
await self.dbStore[k].insert_one(v) |
|
|
|
|
|
|
|
|
async def dbQueueListener(self, queue: asyncio.Queue): |
|
|
'''async def dbQueueListener(self, queue: asyncio.Queue): |
|
|
logger.info("Start db queue listener") |
|
|
logger.info("Start db queue listener") |
|
|
run = True |
|
|
run = True |
|
|
while run: |
|
|
while run: |
|
|
@ -163,7 +157,7 @@ class MongoDriver(MeshArgsParse): |
|
|
logger.info("Kill db listener") |
|
|
logger.info("Kill db listener") |
|
|
run = False |
|
|
run = False |
|
|
except: |
|
|
except: |
|
|
traceback.print_exc() |
|
|
traceback.print_exc()''' |
|
|
|
|
|
|
|
|
class MeshCenter(MeshListener, MeshApi, MongoDriver, MeshArgsParse): |
|
|
class MeshCenter(MeshListener, MeshApi, MongoDriver, MeshArgsParse): |
|
|
queue: asyncio.Queue = asyncio.Queue() |
|
|
queue: asyncio.Queue = asyncio.Queue() |
|
|
@ -174,15 +168,37 @@ class MeshCenter(MeshListener, MeshApi, MongoDriver, MeshArgsParse): |
|
|
MeshApi.__init__(self, args) |
|
|
MeshApi.__init__(self, args) |
|
|
MongoDriver.__init__(self, args) |
|
|
MongoDriver.__init__(self, args) |
|
|
self.buildBackgroundTasks() |
|
|
self.buildBackgroundTasks() |
|
|
|
|
|
self.bot = BotManager(self) |
|
|
|
|
|
|
|
|
|
|
|
async def queueHandler(self): |
|
|
|
|
|
logger.info("Start queue handler") |
|
|
|
|
|
run = True |
|
|
|
|
|
while run: |
|
|
|
|
|
try: |
|
|
|
|
|
from_radio = await self.queue.get() |
|
|
|
|
|
if from_radio: |
|
|
|
|
|
yield from_radio |
|
|
|
|
|
|
|
|
|
|
|
except asyncio.exceptions.CancelledError: |
|
|
|
|
|
run = False |
|
|
|
|
|
except: |
|
|
|
|
|
traceback.print_exc() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def buildBackgroundTasks(self): |
|
|
def buildBackgroundTasks(self): |
|
|
|
|
|
#input queue |
|
|
async def mL(): |
|
|
async def mL(): |
|
|
await self.meshWorker(self.queue) |
|
|
await self.meshWorker(self.queue) |
|
|
self.tasks.append(mL) |
|
|
self.tasks.append(mL) |
|
|
|
|
|
|
|
|
async def dbL(): |
|
|
#output |
|
|
await self.dbQueueListener(self.queue) |
|
|
async def handlerTask(): |
|
|
self.tasks.append(dbL) |
|
|
async for from_radio in self.queueHandler(): |
|
|
|
|
|
#logger.debug(from_radio) |
|
|
|
|
|
asyncio.create_task(self.dbSaveRadio(from_radio)) |
|
|
|
|
|
asyncio.create_task(self.bot.handleMessage(from_radio)) |
|
|
|
|
|
|
|
|
|
|
|
self.tasks.append(handlerTask) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
if __name__ == "__main__": |
|
|
parser = argparse.ArgumentParser() |
|
|
parser = argparse.ArgumentParser() |
|
|
|