|
@@ -0,0 +1,114 @@
|
|
|
+import asyncio
|
|
|
+import datetime
|
|
|
+import os
|
|
|
+import websockets
|
|
|
+import uuid
|
|
|
+import config
|
|
|
+from loguru import logger
|
|
|
+import json
|
|
|
+
|
|
|
+logger.add(config.log_path, rotation="50 MB", encoding='utf-8')
|
|
|
+
|
|
|
+CONNECT_TYPE = 'connect'
|
|
|
+ERROR_TYPE = 'error'
|
|
|
+CLOSE_TYPE = 'close'
|
|
|
+XLS_TYPE = 'xls'
|
|
|
+DB_TYPE = 'db'
|
|
|
+TXT_TYPE = 'txt'
|
|
|
+XLSX_TYPE = 'xlsx'
|
|
|
+XML_TYPE = 'xml'
|
|
|
+
|
|
|
+
|
|
|
+class MessageOperation:
|
|
|
+
|
|
|
+ def __init__(self, uid: str):
|
|
|
+ self._uid = uid
|
|
|
+
|
|
|
+ async def handle(self, msg: str) -> str:
|
|
|
+ try:
|
|
|
+ ask = json.loads(msg)
|
|
|
+ self.msg_type = ask['msg_type']
|
|
|
+ self.msg_type = ask['msg_type']
|
|
|
+ self.record_id = ask['recordId']
|
|
|
+ self.msg_content = ask['msg_content']
|
|
|
+ if self.msg_type == XLS_TYPE:
|
|
|
+ self.response_status = True
|
|
|
+ self.response_content = "response"
|
|
|
+ #TODO: 计算 self.msg_content
|
|
|
+ print(XLS_TYPE)
|
|
|
+ elif self.msg_type == DB_TYPE:
|
|
|
+ self.response_status = True
|
|
|
+ self.response_content = "response"
|
|
|
+ #TODO: 计算 self.msg_content
|
|
|
+ print(DB_TYPE)
|
|
|
+ elif self.msg_type == TXT_TYPE:
|
|
|
+ self.response_status = True
|
|
|
+ self.response_content = "response"
|
|
|
+ #TODO: 计算 self.msg_content
|
|
|
+ print(TXT_TYPE)
|
|
|
+ elif self.msg_type == XLSX_TYPE:
|
|
|
+ self.response_status = True
|
|
|
+ self.response_content = "response"
|
|
|
+ #TODO: 计算 self.msg_content
|
|
|
+ print(XLSX_TYPE)
|
|
|
+ elif self.msg_type == XML_TYPE:
|
|
|
+ self.response_status = True
|
|
|
+ self.response_content = "response"
|
|
|
+ #TODO: 计算 self.msg_content
|
|
|
+ print(XML_TYPE)
|
|
|
+ elif self.msg_type == CLOSE_TYPE:
|
|
|
+ self.response_status = True
|
|
|
+ self.response_content = "close success"
|
|
|
+ else:
|
|
|
+ self.response_status = False
|
|
|
+ self.response_content = "无法识别"
|
|
|
+ self.record_id = "null"
|
|
|
+ except Exception as e:
|
|
|
+ self.msg_type = ERROR_TYPE
|
|
|
+ self.response_status = False
|
|
|
+ self.response_content = str(e)
|
|
|
+ self.record_id = "null"
|
|
|
+
|
|
|
+ def pack(self) -> str:
|
|
|
+ return json.dumps({
|
|
|
+ 'Sender': self._uid,
|
|
|
+ 'Recipient': 'server',
|
|
|
+ 'recordId': self.record_id,
|
|
|
+ 'status': self.response_status,
|
|
|
+ 'msg_type': self.msg_type,
|
|
|
+ 'content': self.response_content,
|
|
|
+ 'time': str(datetime.datetime.now())
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+async def main():
|
|
|
+ uid = str(uuid.uuid4())
|
|
|
+ async with websockets.connect(f'{config.WS_URI}?uid={uid}&to_uid=server') as websocket:
|
|
|
+ pid = os.getpid()
|
|
|
+ logger.info(f'uid: {uid}')
|
|
|
+ logger.info(f'pid: {pid}')
|
|
|
+
|
|
|
+ greeting = json.dumps({
|
|
|
+ 'status': True,
|
|
|
+ 'msg_type': CONNECT_TYPE,
|
|
|
+ 'pid': pid,
|
|
|
+ 'content': '',
|
|
|
+ 'time': str(datetime.datetime.now())
|
|
|
+ })
|
|
|
+ logger.debug(f">>> {greeting}")
|
|
|
+ await websocket.send(greeting)
|
|
|
+
|
|
|
+ while True:
|
|
|
+ ask = await websocket.recv()
|
|
|
+ logger.debug(f"<<< {ask}")
|
|
|
+ msg_operation = MessageOperation(uid)
|
|
|
+ await msg_operation.handle(ask)
|
|
|
+ await websocket.send(msg_operation.pack())
|
|
|
+ if msg_operation.msg_type == CLOSE_TYPE:
|
|
|
+ break
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ logger.info('Starting...')
|
|
|
+ asyncio.run(main())
|
|
|
+ logger.info('End')
|