2019-10-27 21:41:21 +01:00
|
|
|
from threading import Thread
|
|
|
|
from tkinter import Tk, StringVar, Label, Frame, Entry, Button, Scrollbar, Text, END, LabelFrame, IntVar
|
|
|
|
from tkinter.messagebox import showerror
|
|
|
|
from api import API
|
|
|
|
from execptions import InvalidLogin, InvalidURL, InvalidServerState
|
|
|
|
from time import sleep
|
|
|
|
|
|
|
|
api = None
|
|
|
|
destroy = False
|
|
|
|
|
|
|
|
|
|
|
|
def login_close():
|
|
|
|
if not api:
|
|
|
|
login_w.destroy()
|
|
|
|
exit()
|
|
|
|
|
|
|
|
|
|
|
|
def main_close():
|
|
|
|
global destroy
|
|
|
|
destroy = True
|
|
|
|
main_w.destroy()
|
|
|
|
|
|
|
|
|
|
|
|
def login():
|
|
|
|
if url.get() and username.get() and password.get():
|
|
|
|
try:
|
|
|
|
global api
|
|
|
|
api = API(url.get(), username.get(), password.get())
|
|
|
|
except InvalidLogin:
|
|
|
|
showerror("Login error", "Login invalid !")
|
|
|
|
except InvalidURL:
|
|
|
|
showerror("URL error", "Invalid URL !")
|
|
|
|
except ConnectionError:
|
|
|
|
showerror("Connexion error", "Connexion error !")
|
|
|
|
else:
|
|
|
|
login_w.destroy()
|
|
|
|
|
|
|
|
|
|
|
|
def start():
|
|
|
|
try:
|
|
|
|
api.start()
|
|
|
|
except InvalidServerState:
|
|
|
|
showerror("Invalid state", "The server is online !")
|
|
|
|
|
|
|
|
|
|
|
|
def stop():
|
|
|
|
try:
|
|
|
|
api.stop()
|
|
|
|
except InvalidServerState:
|
|
|
|
showerror("Invalid state", 'The server is offline !')
|
|
|
|
|
|
|
|
|
|
|
|
def restart():
|
|
|
|
try:
|
|
|
|
api.stop()
|
|
|
|
while api.status():
|
|
|
|
sleep(1)
|
|
|
|
sleep(2)
|
|
|
|
api.start()
|
|
|
|
except InvalidServerState:
|
|
|
|
showerror("Invalid state", "The server is offline !")
|
|
|
|
|
|
|
|
|
|
|
|
def kill():
|
|
|
|
try:
|
|
|
|
api.kill()
|
|
|
|
except InvalidServerState:
|
|
|
|
showerror("Invalid state", "The server is online !")
|
|
|
|
|
|
|
|
|
|
|
|
def thread_loop():
|
|
|
|
while not destroy:
|
|
|
|
try:
|
|
|
|
state = api.status()
|
|
|
|
msg = api.logs()
|
|
|
|
except InvalidServerState:
|
|
|
|
online.set("Offline")
|
|
|
|
toggle_b.configure(text="Start", command=start)
|
|
|
|
reboot_b.configure(state="disable")
|
|
|
|
kill_b.configure(state="disable")
|
|
|
|
players.set(0)
|
|
|
|
latency.set(0)
|
|
|
|
field.configure(state="disable")
|
|
|
|
send.configure(state="disable")
|
|
|
|
logs_text.delete("1.0", END)
|
|
|
|
sleep(4)
|
|
|
|
else:
|
|
|
|
if state:
|
|
|
|
toggle_b.configure(text="Stop", command=stop)
|
|
|
|
reboot_b.configure(state="normal")
|
|
|
|
kill_b.configure(state="normal")
|
|
|
|
online.set("Online")
|
|
|
|
players.set(state[0])
|
|
|
|
latency.set(state[1])
|
|
|
|
field.configure(state="normal")
|
|
|
|
send.configure(state="normal")
|
|
|
|
else:
|
|
|
|
online.set("Idle...")
|
|
|
|
update_logs(msg)
|
|
|
|
sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
def update_logs(msg: str):
|
|
|
|
# msg = msg.split("\n")
|
|
|
|
# content = logs.get("1.0", END).split("\n")
|
|
|
|
# msg = "\n".join(msg[len(content):])
|
|
|
|
if not destroy:
|
|
|
|
logs_text.configure(state="normal")
|
|
|
|
logs_text.replace("1.0", END, msg)
|
|
|
|
logs_text.configure(state="disable")
|
|
|
|
logs_text.yview(END)
|
|
|
|
|
|
|
|
|
|
|
|
def command_send(event=None):
|
|
|
|
try:
|
|
|
|
api.cmd(cmd.get())
|
|
|
|
except InvalidServerState:
|
|
|
|
showerror("Server error", "Command not send, can't connect to the server !")
|
|
|
|
cmd.set("")
|
|
|
|
|
|
|
|
|
|
|
|
login_w = Tk()
|
|
|
|
login_w.title("Minecraft Server Login")
|
|
|
|
login_w.resizable(0, 0)
|
|
|
|
login_w.protocol("WM_DELETE_WINDOW", login_close)
|
|
|
|
username = StringVar()
|
|
|
|
password = StringVar()
|
|
|
|
url = StringVar()
|
|
|
|
username.set("admin")
|
|
|
|
password.set("admin")
|
|
|
|
url.set("http://127.0.0.1:5000")
|
|
|
|
Label(login_w, text="Url:").pack()
|
|
|
|
login_hp = Frame(login_w)
|
|
|
|
login_hp.pack()
|
|
|
|
Entry(login_hp, textvariable=url, width=28).grid(row=0, column=0)
|
|
|
|
Label(login_w, text="Username & password:").pack()
|
|
|
|
login_up = Frame(login_w)
|
|
|
|
login_up.pack()
|
|
|
|
Entry(login_up, textvariable=username, width=14).grid(row=0, column=0)
|
|
|
|
Entry(login_up, textvariable=password, show="*", width=14).grid(row=0, column=1)
|
|
|
|
Button(login_w, text="Submit", command=login).pack()
|
|
|
|
login_w.mainloop()
|
|
|
|
|
|
|
|
|
|
|
|
main_w = Tk()
|
|
|
|
main_w.title("Minecraft Server")
|
|
|
|
main_w.resizable(0, 0)
|
|
|
|
main_w.protocol("WM_DELETE_WINDOW", main_close)
|
|
|
|
|
|
|
|
sid_bar = Frame(main_w)
|
|
|
|
sid_bar.grid(row=0, column=0)
|
|
|
|
status = LabelFrame(sid_bar, text="Status")
|
|
|
|
status.pack()
|
|
|
|
Label(status, text="State:").grid(row=0, column=0)
|
|
|
|
online = StringVar()
|
|
|
|
online.set("N/A")
|
|
|
|
Label(status, textvariable=online).grid(row=0, column=1)
|
|
|
|
Label(status, text="Players:").grid(row=1, column=0)
|
|
|
|
players = IntVar()
|
|
|
|
players.set(0)
|
|
|
|
Label(status, textvariable=players).grid(row=1, column=1)
|
|
|
|
Label(status, text="Latency:").grid(row=2, column=0)
|
|
|
|
latency = IntVar()
|
|
|
|
latency.set(0)
|
|
|
|
Label(status, textvariable=latency).grid(row=2, column=1)
|
|
|
|
actions = LabelFrame(sid_bar, text="Actions")
|
|
|
|
actions.pack()
|
|
|
|
toggle_b = Button(actions, text="Start", command=start)
|
|
|
|
toggle_b.pack()
|
|
|
|
reboot_b = Button(actions, text="Reboot", command=restart)
|
|
|
|
reboot_b.pack()
|
|
|
|
kill_b = Button(actions, text="Kill", command=kill)
|
|
|
|
kill_b.pack()
|
|
|
|
|
|
|
|
console = LabelFrame(main_w, text="Console")
|
|
|
|
console.grid(row=0, column=1)
|
|
|
|
logs = Frame(console)
|
|
|
|
logs.pack()
|
|
|
|
scrollbar = Scrollbar(logs)
|
|
|
|
scrollbar.pack(side="right", fill="y")
|
|
|
|
logs_text = Text(logs, height=30, width=100, yscrollcommand=scrollbar.set, state="disable")
|
|
|
|
logs_text.pack(side="left", fill="both")
|
|
|
|
command = Frame(console)
|
|
|
|
command.pack()
|
|
|
|
cmd = StringVar()
|
|
|
|
field = Entry(command, textvariable=cmd, width=80)
|
|
|
|
field.bind("<Return>", command_send)
|
|
|
|
field.grid(row=0, column=0)
|
|
|
|
send = Button(command, text="Send", command=command_send)
|
|
|
|
send.grid(row=0, column=1)
|
|
|
|
|
|
|
|
thread = Thread(target=thread_loop)
|
|
|
|
thread.start()
|
|
|
|
main_w.mainloop()
|
|
|
|
|