Browse Source

add python server

Signed-off-by: codeClown <zhaomengshou@126.com>
codeClown 1 year ago
parent
commit
320280f824

+ 4 - 0
classify-ai-backend/algo/__init__.py

@@ -0,0 +1,4 @@
+__version__ = "0.1.0"
+__name__ = "classify"
+__author__ = "Fangbing Qiu"
+__email__ = ""

+ 7 - 0
classify-ai-backend/config.py

@@ -0,0 +1,7 @@
+import os
+
+base_path = os.path.dirname(os.path.abspath(__file__))
+
+log_path = os.path.join(base_path, "logs", "app.log")
+
+WS_URI = "ws://10.113.248.3:8000/ws"

+ 114 - 0
classify-ai-backend/main.py

@@ -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')

+ 2 - 0
classify-ai-backend/requirements.txt

@@ -0,0 +1,2 @@
+loguru==0.7.0
+websockets==11.0.3