SFGame_Tool/main.py
2021-12-24 18:15:44 +08:00

225 lines
9.9 KiB
Python
Raw 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.

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