AACA/Scripts/service.py

237 lines
8.8 KiB
Python
Raw Permalink Normal View History

2025-03-07 02:37:50 +00:00
# import socket
# import threading
# import aacecontrol
# import ctypes,win32con,win32gui,sys,json
# import logging
# # import file_script
# IpAddress = '127.0.0.1'
# FilePath = 'D:\\MegaSoft\\Scripts'
# Port = 2016
# # device = md.MultiWinDevice("multiWin")
# device = aacecontrol.AppService()
# # 定义互斥量名称
# mutex_name = "aaca_mutex"
# def handle_client(client_socket,addr):
# device.loginformation(f'监听{addr}的数据')
# while True:
# try:
# # 接收客户端发送的数据
# data = client_socket.recv(2048)
# if not data:
# device.loginformation(f'{addr}-接收到空数据')
# break
# # # 处理接收到的数据
# # device.loginformation(f"Received from {client_socket.getpeername()}: {data.decode('utf-8')}")
# datadecode = data.decode('utf-8')
# command = datadecode.partition(':')[0] # 只分割一次
# paras = datadecode.partition(':')[2]
# result = -1
# if 'makeGraph' in command:
# command = 'makeGraph'
# device.loginformation(f'---收到制图指令 {datadecode}---')
# result = device.click_create_table(paras)
# elif 'operate' in command:
# command = 'operate'
# device.loginformation(f'---收到创建任务指令 {datadecode}---')
# result = device.start(paras)
# elif 'createTask' in command:
# command = 'createTask'
# device.loginformation(f'---收到制图创建任务命令 {datadecode}---')
# result = device.create(paras)
# elif 'start' in command:
# command = 'start'
# device.loginformation(f'---收到启动命令 {datadecode}---')
# result = device.run(paras)
# elif 'status' in command:
# device.loginformation(f'---收到查询状态命令 {datadecode}---')
# result = 2
# if device.is_finished():
# result = 1
# else:
# command = '未知命令'
# device.loginformation('---未知命令---')
# reponse_txt = command + ':' + str(result) + '\n'
# client_socket.send(reponse_txt.encode('utf-8'))
# device.loginformation(f'---返回-{reponse_txt}---')
# except:
# device.loginformation(f'{addr}-接收数据异常')
# client_socket.close()
# return
# # 关闭连接
# device.loginformation(f'{addr}-连接断开')
# client_socket.close()
# def start_server():
# server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# server.bind((IpAddress, Port))
# server.listen(20)
# device.loginformation(f"Server listening on port {IpAddress}:{Port}...")
# try:
# while True:
# client_socket, addr = server.accept()
# device.loginformation(f"Accepted connection from {addr}")
# # 启动一个新线程来处理客户端请求
# client_handler = threading.Thread(target=handle_client, args=(client_socket,addr))
# client_handler.start()
# except:
# print('服务结束了。。。')
# finally:
# ctypes.windll.kernel32.CloseHandle(mutex)
# def message_box(title, message, type=win32con.MB_OK):
# """
# 弹出一个消息框
# :param title: 消息框的标题
# :param message: 消息框显示的消息
# :param type: 消息框的类型例如MB_OK, MB_ICONERROR等
# :return: 用户点击的消息框按钮的标识符
# """
# return win32gui.MessageBox(None, message, title, type)
# if __name__ == "__main__":
# # 定义互斥锁名称,可以是任意字符串
# mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name)
# # 检查互斥量是否已经存在
# if ctypes.windll.kernel32.GetLastError() == 183: # ERROR_ALREADY_EXISTS
# message_box("提醒", "脚本正在运行中,请点击确定关闭。", win32con.MB_ICONWARNING)
# sys.exit(0)
# ctypes.windll.kernel32.SetThreadExecutionState(0x80000002) # 确保桌面不息屏
# server_thread = threading.Thread(target=start_server)
# server_thread.start()
# # w = file_script.Watcher(FilePath)
# # file_thread = threading.Thread(target=w.run)
# # file_thread.start()
import ctypes
import socket
import sys
import threading
import win32con
import win32gui
from file_script import Watcher
import aacecontrol
IpAddress = '127.0.0.1'
FilePath = 'D:\\MegaSoft\\Scripts'
Port = 2016
device = aacecontrol.AppService()
# 定义互斥量名称
mutex_name = "aaca_mutex"
def handle_client(client, addr):
while True:
try:
data = client.recv(2048)
if not data:
device.loginformation("接收数据异常")
break
datadecode = data.decode('utf-8')
device.loginformation(f"接收到---{client.getpeername()}---数据---{datadecode}")
result = -1
command = datadecode.partition(':')[0] # 只分割一次
paras = datadecode.partition(':')[2] # 返回包含分隔符
# if 'makeGraph' in command:
# command = 'makeGraph'
# device.loginformation(f'---收到制图指令 {datadecode}---')
# result = device.click_create_table(paras)
# elif 'operate' in command:
# command = 'operate'
# device.loginformation(f'---收到创建任务指令 {datadecode}---')
# result = device.start(paras)
if 'createTask' in command:
command = 'createTask'
device.loginformation(f'收到创建任务并执行命令 {datadecode}')
result = device.createThenStart(paras)
# elif 'start' in command:
# command = 'start'
# device.loginformation(f'---收到启动命令 {datadecode}---')
# result = device.run(paras)
elif 'status' in command:
device.loginformation(f'收到查询状态命令 {datadecode}')
result = 2
if device.is_finished():
result = 0
else:
command = '未知命令'
device.loginformation('未知命令')
response_txt = command + ':' + str(result) + '\n'
device.loginformation(f'返回:{command}:{str(result)}')
client.send(response_txt.encode('utf-8'))
except:
device.loginformation(f'{addr}通讯异常')
break
# 关闭连接
device.loginformation(f'关闭{addr}连接')
client.close()
def message_box(title, message, type=win32con.MB_OK):
"""
弹出一个消息框
:param title: 消息框的标题
:param message: 消息框显示的消息
:param type: 消息框的类型例如MB_OK, MB_ICONERROR等
:return: 用户点击的消息框按钮的标识符
"""
return win32gui.MessageBox(None, message, title, type)
class TCPThread(threading.Thread):
def run(self):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((IpAddress, Port))
server.listen(20)
device.loginformation(f"服务端---{IpAddress}---{Port}---启动")
connected_clients = 0
try:
while True:
client, addr = server.accept()
connected_clients = connected_clients + 1
device.loginformation(f"客户端---{addr}---已连接,已连接客户端数量:{connected_clients}")
client_handle = threading.Thread(target=handle_client, args=(client,addr))
client_handle.start()
except Exception as e:
device.loginformation(f"{str(e)}服务端正在关闭...")
server.close()
device.loginformation("服务端已关闭")
finally:
# 释放互斥量
ctypes.windll.kernel32.CloseHandle(mutex)
if __name__ == "__main__":
# 定义互斥锁名称,可以是任意字符串
mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name)
# 检查互斥量是否已经存在
if ctypes.windll.kernel32.GetLastError() == 183: # ERROR_ALREADY_EXISTS
message_box("提醒", "脚本正在运行中,请点击确定关闭。", win32con.MB_ICONWARNING)
sys.exit(0)
ctypes.windll.kernel32.SetThreadExecutionState(0x80000002)
tcp_thread = TCPThread()
tcp_thread.start()
# 创建线程
watcher = Watcher(FilePath)
watcher_thread = threading.Thread(target=watcher.run)
watcher_thread.start()