main.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import asyncio
  2. import datetime
  3. import os
  4. import websockets
  5. import uuid
  6. import config
  7. from loguru import logger
  8. import json
  9. from algo.car_cf import car_classification
  10. logger.add(config.log_path, rotation="50 MB", encoding='utf-8')
  11. CONNECT_TYPE = 'connect'
  12. ERROR_TYPE = 'error'
  13. CLOSE_TYPE = 'close'
  14. XLS_TYPE = 'xls'
  15. XLSX_TYPE = 'xlsx'
  16. TXT_TYPE = 'txt'
  17. WAV_TYPE = 'wav'
  18. JSON_TYPE = 'json'
  19. NPY_TYPE = 'npy'
  20. class MessageOperation:
  21. def __init__(self, uid: str):
  22. self._uid = uid
  23. async def handle(self, msg: str) -> str:
  24. try:
  25. ask = json.loads(msg)
  26. self.msg_type = ask['msg_type']
  27. self.msg_type = ask['msg_type']
  28. self.record_id = ask['recordId']
  29. self.msg_content = ask['content']
  30. if self.msg_type == XLS_TYPE:
  31. self.response_status, self.response_content = car_classification(
  32. self.msg_content)
  33. elif self.msg_type == XLSX_TYPE:
  34. self.response_status, self.response_content = car_classification(
  35. self.msg_content)
  36. elif self.msg_type == TXT_TYPE:
  37. self.response_status, self.response_content = car_classification(
  38. self.msg_content)
  39. elif self.msg_type == WAV_TYPE:
  40. self.response_status, self.response_content = car_classification(
  41. self.msg_content)
  42. elif self.msg_type == JSON_TYPE:
  43. self.response_status, self.response_content = car_classification(
  44. self.msg_content)
  45. elif self.msg_type == NPY_TYPE:
  46. self.response_status, self.response_content = car_classification(
  47. self.msg_content)
  48. elif self.msg_type == CLOSE_TYPE:
  49. self.response_status = True
  50. self.response_content = "close success"
  51. else:
  52. self.response_status = False
  53. self.response_content = "无法识别"
  54. # self.record_id = "null"
  55. except Exception as e:
  56. self.msg_type = ERROR_TYPE
  57. self.response_status = False
  58. self.response_content = str(e)
  59. # self.record_id = "null"
  60. def pack(self) -> str:
  61. return json.dumps({
  62. 'Sender': self._uid,
  63. 'Recipient': 'server',
  64. 'recordId': self.record_id,
  65. 'status': self.response_status,
  66. 'msg_type': self.msg_type,
  67. 'content': self.response_content,
  68. 'time': str(datetime.datetime.now())
  69. })
  70. async def main():
  71. uid = str(uuid.uuid4())
  72. async with websockets.connect(
  73. f'{config.WS_URI}?uid={uid}&to_uid=server') as websocket:
  74. pid = os.getpid()
  75. logger.info(f'uid: {uid}')
  76. logger.info(f'pid: {pid}')
  77. greeting = json.dumps({
  78. 'status': True,
  79. 'msg_type': CONNECT_TYPE,
  80. 'pid': pid,
  81. 'content': '',
  82. 'time': str(datetime.datetime.now())
  83. })
  84. logger.debug(f">>> {greeting}")
  85. await websocket.send(greeting)
  86. await websocket.recv()
  87. while True:
  88. ask = await websocket.recv()
  89. logger.debug(f"<<< {ask}")
  90. msg_operation = MessageOperation(uid)
  91. await msg_operation.handle(ask)
  92. await websocket.send(msg_operation.pack())
  93. if msg_operation.msg_type == CLOSE_TYPE:
  94. break
  95. if __name__ == "__main__":
  96. logger.info('Starting...')
  97. asyncio.run(main())
  98. logger.info('End')