я делаю свой хостинг по майнкрафту, но консоль не передаёт строки от сервера
я делаю свой хостинг по майнкрафту, но консоль не передаёт строки от сервера. Но находясь в браузере на сайте моего хостинга пишет что браузер что-то передаёт серверу до тех пор пока сервер не выключится. я пробовал много способов, но не один ничего не передал консоли на сайте. я делаю на Flask и HTML с его интеграциями.
код python:
import os
import subprocess
import threading
import json
from js import window
from flask import Flask
from flask import render_template
from flask_sockets import Sockets
from flask import request
from flask import jsonify
app = Flask(__name__)
sockets = Sockets(app)
def read_server_output(p, window):
while True:
line = p.stdout.readline().decode().strip()
if line:
window.postMessage({'action': 'log', 'message': line}, '*');
@app.route('/')
def index():
return render_template('base.html')
@app.route('/my-endpoint', methods=['POST'])
def my_endpoint():
data = request.form.to_dict()
if data['action'] == 'my-action':
p = subprocess.Popen([
'java',
'-Xmx1024M',
'-Xms1024M',
'-jar',
'~/server/minecraft_server.1.16.5.jar',
'nogui',
'&'
], stdout=subprocess.PIPE)
thread = threading.Thread(target=read_server_output(), args=(p, window))
thread.daemon = True
thread.start()
return jsonify({'success': True})
if __name__ == '__main__':
app.run(debug=True)
код html: (css убран для читабельности.)
<!DOCTYPE html>
<html>
<head>
<title>Панель управления LimeHost</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap');
</style>
</head>
<body>
<div id="top-bar">
<!--<img src="logo.png" alt="">-->
<h1>LimeHost</h1>
<button id="exit-button" onclick="document.close(); return false;">Выйти</button>
</div>
<div id="main-content">
<div id="server-controls">
<h2>Управление сервером</h2>
<button id="start-button" type="submit" form="my-form" onclick="startserver()">Включить</button>
<button id="stop-button" onclick="startserver()">Выключить</button>
<button id="restart-button" onclick="startserver()">Перезагрузить</button>
<div id="server-metrics">
<h2>Метрики сервера</h2>
<p>TPS: <span id="tps-output"></span></p>
</div>
</div>
<div id="server-console">
<h2>Консоль сервера</h2>
<textarea id="console-output" readonly></textarea>
<input type="text" id="console-input">
</div>
</div>
<form id="my-form" action="/my-endpoint" method="POST">
<input type="hidden" name="action" value="my-action">
</form>
<script>
function startserver() {
let windowAnimanal = window.open("", "", "width=200,height=100");
windowAnimanal.close()
}
const consoleInput = document.getElementById('console-input');
consoleInput.addEventListener('keypress', (event) => {
if (event.key === 'Enter') {
consoleInput.value = '';
}
});
</script>
<script>
const start = document.getElementById('start-button');
start.addEventListener('click', () => {
fetch('/my-endpoint', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: JSON.stringify({
action: 'my-action',
}),
});
});
</script>
<script>
window.addEventListener('message', function(event) {
if (event.data.action === 'log') {
const consoleOutput = document.getElementById('console-output');
consoleOutput.value += event.data.message + '\n';
consoleOutput.scrollTop = consoleOutput.scrollHeight;
}
});
</script>
</body>
</html>