AACA/Scripts/service.py

237 lines
8.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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()