main.py 3.4 KB

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