main.py 3.5 KB

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