| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import datetime
- import json
- import os
- from websocket_server import WebsocketServer
- from api.api_app import open_file_by_wps
- from config import args
- from tools.serve_client import server_client
- from tools.check import is_file_open_in_wps
- from tools.logger_handle import logger
- def ws_send(client, server, data):
- server.send_message(client, json.dumps(data))
- def on_message(client, server, data):
- '''
- data:{
- 'option':'download_and_open_file',
- 'params':{
- 'file_id':'********',
- 'is_template':0
- }
- }
- '''
- logger.info(f'reve data: {data}')
- try:
- data = json.loads(data)
- except Exception:
- return ws_send({'code':2003, 'msg':'参数错误'})
- if data.get('option') == 'download_and_open_file':
- file_id = data['params'].get('file_id')
- is_template = data['params'].get('is_template')
- # 判断是否为exe模式执行
- if is_template:
- file_info = server_client.get_template_file_info(file_id)
- time_str = datetime.datetime.now().strftime('%Y-%m-%dT%H-%M-%S')
- local_path = os.path.join(args['work_path'],
- f'{file_info["name"]}({time_str}).{file_info["nameSuffix"]}')
- if server_client.download_template(file_info['fileLink'], local_path):
- return ws_send(client, server, open_file_by_wps(local_path))
- else:
- return ws_send(client, server, {'code': 3006, 'msg': '文件不存在'})
- file_info = server_client.get_file_info(file_id)
- if not file_info:
- return ws_send(client, server, {'code': 3006, 'msg': '文件不存在'})
- logger.info(f'args:{args}, file_info:{file_info}')
- local_file = os.path.join(args['work_path'], file_info['filePath'].replace('/', '_'))
- # 判断本地是否存在已下载的同名文件
- if not os.path.exists(local_file) or not os.path.exists(local_file + '.metadata.json'):
- server_client.download_file(file_info, args['work_path'])
- return ws_send(client, server, open_file_by_wps(local_file))
- # 判断本地文件是否被打开
- if is_file_open_in_wps(local_file):
- return ws_send(client, server, {'code': 1000, 'msg': '检测到文件已被打开'})
- # 判断本地文件和线上文件是否一致
- local_file_metadata = server_client.load_metadata(local_file)
- if local_file_metadata['update_time'] == file_info['updateTime']:
- return ws_send(client, server, open_file_by_wps(local_file))
- if local_file_metadata['md5'] == server_client.get_file_md5(local_file):
- server_client.download_file(file_info, args['work_path'])
- return ws_send(client, server, open_file_by_wps(local_file))
- return ws_send(client, server, {'code': 2002, 'msg': '检测到远程文件已经更新本地文件也发生改动,终止操作'})
- def start_ws_server():
- ws_server = WebsocketServer(host='0.0.0.0', port=5856)
- ws_server.set_fn_message_received(on_message)
- from tools.logger_handle import logger
- logger.info('ws server start')
- ws_server.run_forever()
- if __name__ == '__main__':
- start_ws_server()
|