225 lines
9.9 KiB
Python
225 lines
9.9 KiB
Python
# -*- coding:utf-8 -*-
|
||
import ast
|
||
import configparser
|
||
import re
|
||
import psutil
|
||
import time
|
||
from subprocess import Popen
|
||
import sys
|
||
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
|
||
from configparser import ExtendedInterpolation
|
||
|
||
# 界面文件为 mainui.py
|
||
from mainui import *
|
||
import requests
|
||
import os
|
||
|
||
configFile = 'config.ini'
|
||
# 创建配置文件对象
|
||
config = configparser.ConfigParser(interpolation=ExtendedInterpolation(), inline_comment_prefixes=['#', ';'], allow_no_value=True)
|
||
# 读取配置文件
|
||
config.read(configFile, encoding='utf-8')
|
||
|
||
|
||
class MainWindow(QMainWindow, Ui_MainWindow):
|
||
def __init__(self, parent=None):
|
||
super(MainWindow, self).__init__(parent)
|
||
self.setupUi(self)
|
||
# 初始赋值
|
||
self.nowIpLabel.setText(config['GAME_SET']['now_ip'])
|
||
self.newIpInput.setText(config['GAME_SET']['new_ip'])
|
||
self.nowGameLabel.setText(config['GAME_SET']['game_name'])
|
||
self.newGameInput.setText(config['GAME_SET']['game_name'])
|
||
if isinstance(checkprocess("nginx.exe"), int):
|
||
# self.启动Nginx.Label = '关闭Nginx'
|
||
self.nginxButton.setText("关闭Nginx")
|
||
else:
|
||
# self.启动Nginx.Label = '启动Nginx'
|
||
self.nginxButton.setText("启动Nginx")
|
||
|
||
def saveSet(self, event):
|
||
print('保存设置,按钮被单击')
|
||
# print(config['GAME_PATH']['game'])
|
||
# tinydict = ast.literal_eval(config['GAME_PATH']['game'])
|
||
# print("字典值 : %s" %tinydict.items())
|
||
# # 遍历字典列表
|
||
# for key, values in tinydict.items():
|
||
# print(key, values)
|
||
# for key, value in config['GAME_PATH'].items():
|
||
# print(key, value)
|
||
# print(config.options('GAME_PATH'))
|
||
# return
|
||
message = QMessageBox.information(self, "提示信息", "确定要保存设置吗?", QMessageBox.Ok | QMessageBox.No, QMessageBox.No)
|
||
if message == QMessageBox.No:
|
||
return
|
||
now_ip = config['GAME_SET']['now_ip']
|
||
new_ip = self.newIpInput.text()
|
||
now_game = config['GAME_SET']['game_name']
|
||
new_game = self.newGameInput.text()
|
||
compile_ip = re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
|
||
# 验证IP地址格式
|
||
if (new_ip == "") or new_game == "" or not (compile_ip.match(new_ip)):
|
||
QMessageBox.information(self, "提示信息", "IP地址、游戏名称为空或有误,请正确填写IPv4地址或游戏名称!")
|
||
return
|
||
dirname = config['MODFILE']['dirname']
|
||
sum = 0
|
||
for filedir in dirname.split("|"):
|
||
# 执行文本替换
|
||
if len(filedir.split(",")) < 2:
|
||
isencoding = config['DEFAULT']['file_encoding']
|
||
else:
|
||
isencoding = filedir.split(",")[1]
|
||
filename = filedir.split(",")[0]
|
||
|
||
try:
|
||
with open(filename, 'rt+', encoding=isencoding) as f:
|
||
t = f.read()
|
||
t = t.replace(now_ip, new_ip)
|
||
t = t.replace(now_game, new_game)
|
||
# 读写偏移位置移到最开始处
|
||
f.seek(0, 0)
|
||
f.write(t)
|
||
# 设置文件结尾 EOF
|
||
f.truncate()
|
||
sum = sum + 1
|
||
except:
|
||
QMessageBox.information(self, "提示信息", "替换“" + filename + "”出错,可能文件不存在或编码不对,请检查需要替换的文件编码与配置文件编码是否相符!")
|
||
return
|
||
# 写入配置文件
|
||
config.set('GAME_SET', 'game_name', new_game)
|
||
config.set('GAME_SET', 'now_ip', new_ip)
|
||
config.set('GAME_SET', 'new_ip', new_ip)
|
||
saveconfig = open(configFile, 'wt', encoding=config['DEFAULT']['file_encoding'])
|
||
config.write(saveconfig) # 把要修改的节点的内容写到文件中
|
||
saveconfig.close()
|
||
# 设置界面显示
|
||
self.nowGameLabel.setText(new_game)
|
||
self.nowIpLabel.setText(new_ip)
|
||
# 成功提示
|
||
QMessageBox.information(self, "提示信息", "配置保存成功!重启游戏后生效!<br>游戏名称:" + new_game + "----游戏IP:" + new_ip + "<br>共配置了" + str(sum) + "个文件")
|
||
print('修改完成:' + new_game + ':' + new_ip)
|
||
return
|
||
|
||
def nginx(self, event):
|
||
if self.nginxButton.text() == '启动Nginx':
|
||
nginx_process = Popen('start .\\nginx.exe',
|
||
shell=True,
|
||
cwd=config['SERVER_PATH']['nginx_path'],
|
||
# encoding='utf-8'
|
||
)
|
||
php_process = Popen(config['SERVER_PATH']['php_spawner_path'] + 'php-cgi-spawner.exe "' + config['SERVER_PATH']['php_path'] + 'php-cgi.exe -c ' + config['SERVER_PATH']['php_path'] + 'php.ini" ' + config['SERVER_PATH']['php_cgi_port'] + ' 1+16',
|
||
shell=True,
|
||
# cwd=config['DEFAULT']['dir'] + 'phpstudy_pro',
|
||
# encoding='utf-8'
|
||
)
|
||
self.nginxButton.setText("关闭Nginx")
|
||
else:
|
||
nginx_process = Popen('.\\nginx.exe -s stop',
|
||
shell=True,
|
||
cwd=config['SERVER_PATH']['nginx_path'],
|
||
# encoding='utf-8'
|
||
)
|
||
spawner_process = Popen('taskkill /f /t /im php-cgi-spawner.exe',
|
||
shell=True,
|
||
# encoding='utf-8'
|
||
)
|
||
PHP_process = Popen('taskkill /f /t /im php-cgi.exe',
|
||
shell=True,
|
||
# encoding='utf-8'
|
||
)
|
||
self.nginxButton.setText("启动Nginx")
|
||
# print(process)
|
||
# os.chdir("D:\\LYserver\\phpstudy_pro\\Extensions\\Nginx1.15.11")
|
||
# nginxtype = os.system('start .\\nginx.exe') # 不弹出界面
|
||
# if nginxtype
|
||
# os.system('start .\\nginx.exe') #弹出界面
|
||
print('启动Nginx,按钮被单击')
|
||
|
||
def mysql(self, event):
|
||
if self.mysqlButton.text() == '启动MySql':
|
||
php_process = Popen('.\\mysqld.exe',
|
||
shell=True,
|
||
cwd=config['SERVER_PATH']['mysql_path'] + 'bin',
|
||
# encoding='utf-8'
|
||
)
|
||
self.mysqlButton.setText("关闭MySql")
|
||
else:
|
||
kill_process = Popen('taskkill /f /t /im mysqld.exe',
|
||
shell=True,
|
||
# encoding='utf-8'
|
||
)
|
||
self.mysqlButton.setText("启动MySql")
|
||
print('启动MySql,按钮被单击')
|
||
|
||
def game(self, event):
|
||
if self.gameButton.text() == '启动游戏':
|
||
# tinydict = ast.literal_eval(config['GAME_PATH']['game_path'])
|
||
game_path = config['GAME_PATH']['game_path'].split("|")
|
||
# print("字典值 : %s" %game_path.items())
|
||
# 遍历字典列表
|
||
for f in game_path:
|
||
print(f)
|
||
# 执行文本替换
|
||
if len(f.split(",")) < 2:
|
||
sleeptime = 0
|
||
else:
|
||
sleeptime = float(f.split(",")[1])
|
||
game_file = f.split(",")[0]
|
||
try:
|
||
Popen('start ' + game_file,
|
||
shell=True,
|
||
# cwd=values,
|
||
# encoding='utf-8'
|
||
)
|
||
time.sleep(float(sleeptime)) # 延迟时间
|
||
except:
|
||
QMessageBox.information(self, "提示信息", "启动“" + game_file + "”出错,可能文件不存在或配置不对!")
|
||
return
|
||
self.gameButton.setText("关闭游戏")
|
||
else:
|
||
Popen(
|
||
'taskkill /f /t /im LocalLogServer64_R.exe & taskkill /f /t /im LoggerServer64_R.exe & taskkill /f /t /im SessionServer64_R.exe & taskkill /f /t /im NameServer64_R.exe & taskkill /f /t /im LogicServerCQ64_R.exe & taskkill /f /t /im GateServer64_R.exe & taskkill /f /t /im DBCenterServer64_R.exe & taskkill /f /t /im DBServer64_R.exe & taskkill /f /t /im BackStageServer64_R.exe & taskkill /f /t /im AMServer64_R.exe',
|
||
shell=True,
|
||
# encoding='utf-8'
|
||
)
|
||
self.gameButton.setText("启动游戏")
|
||
print('启动游戏,按钮被单击')
|
||
|
||
def fanbianyi(self, event):
|
||
apktool = Popen('apktool d game.apk',
|
||
shell=True,
|
||
cwd=config['DEFAULT']['dir'] + 'apk',
|
||
# encoding='utf-8'
|
||
)
|
||
print('反编译APK,按钮被单击')
|
||
|
||
def shengcheng(self, event):
|
||
apktool = Popen('apktool b game',
|
||
shell=True,
|
||
cwd=config['DEFAULT']['dir'] + 'apk',
|
||
# encoding='utf-8'
|
||
)
|
||
print('生成APK,按钮被单击')
|
||
|
||
def qianming(self, event):
|
||
apktool = Popen('jarsigner -verbose -keystore key.keystore -storepass 123456 -signedjar game-signed.apk game/dist/game.apk key.keystore',
|
||
shell=True,
|
||
cwd=config['DEFAULT']['dir'] + 'apk',
|
||
# encoding='utf-8'
|
||
)
|
||
print('APK签名,按钮被单击')
|
||
|
||
# 进程判断,返回进程ID
|
||
def checkprocess(processname):
|
||
pl = psutil.pids()
|
||
for pid in pl:
|
||
if psutil.Process(pid).name() == processname:
|
||
return pid
|
||
|
||
|
||
if __name__ == '__main__':
|
||
app = QApplication(sys.argv)
|
||
myWin = MainWindow()
|
||
myWin.show()
|
||
sys.exit(app.exec_())
|