121 lines
4.1 KiB
Python
121 lines
4.1 KiB
Python
# main_window.py
|
|
|
|
from PySide6.QtWidgets import (
|
|
QMainWindow,
|
|
QTextEdit,
|
|
QPushButton,
|
|
QVBoxLayout,
|
|
QWidget,
|
|
QLabel,
|
|
QStatusBar,
|
|
QHBoxLayout,
|
|
QCheckBox,
|
|
)
|
|
from PySide6.QtCore import Qt
|
|
from GUI.Widgets.json_viewer import JsonViewer
|
|
from Core.UnrealApi.unreal_api import (
|
|
UnrealApi,
|
|
) # Assurez-vous d'importer correctement la classe UnrealApi
|
|
import json
|
|
|
|
|
|
class MainWindow(QMainWindow):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.setWindowTitle("WebSocket JSON Sender")
|
|
self.setGeometry(100, 100, 1000, 900)
|
|
self.statusBar = QStatusBar()
|
|
self.setStatusBar(self.statusBar)
|
|
self.statusBar.showMessage("[Disconnected]")
|
|
|
|
layout = QVBoxLayout()
|
|
|
|
self.json_input = QTextEdit(self)
|
|
self.json_input.setPlaceholderText("Entrez le JSON ici...")
|
|
layout.addWidget(self.json_input)
|
|
|
|
self.send_button = QPushButton("Envoyer", self)
|
|
self.send_button.clicked.connect(self.send_json_message)
|
|
layout.addWidget(self.send_button)
|
|
|
|
self.ping_button = QPushButton("Ping", self)
|
|
self.ping_button.clicked.connect(self.send_ping)
|
|
layout.addWidget(self.ping_button)
|
|
|
|
self.sent_display = JsonViewer("Sent to server", self)
|
|
self.sent_display.set_emit_double_click_on_header(True)
|
|
self.sent_display.viewer.header_double_clicked.connect(self.sent_display_header_double_clicked)
|
|
layout.addWidget(self.sent_display)
|
|
|
|
self.server_layout = QHBoxLayout()
|
|
self.server_widget = QWidget()
|
|
|
|
self.response_display = JsonViewer("Received from server", self, True)
|
|
self.filter_avalanche_checkbox = QCheckBox("Filter Avalanche", self)
|
|
# default to checked
|
|
self.filter_avalanche_checkbox.setChecked(True)
|
|
self.filter_avalanche_checkbox.stateChanged.connect(self.filter_avalanche)
|
|
self.server_layout.addWidget(self.response_display)
|
|
self.server_layout.addWidget(self.filter_avalanche_checkbox)
|
|
self.server_widget.setLayout(self.server_layout)
|
|
layout.addWidget(self.server_widget)
|
|
|
|
|
|
|
|
container = QWidget()
|
|
container.setLayout(layout)
|
|
self.setCentralWidget(container)
|
|
|
|
self.unreal_api = UnrealApi(
|
|
"ws://localhost:30021", self
|
|
) # Assurez-vous que le second argument est correct
|
|
self.unreal_api.set_filtered(True)
|
|
# Connecter les signaux aux slots
|
|
self.unreal_api.message_received.connect(self.on_message_received)
|
|
self.unreal_api.message_sent.connect(self.on_message_sent)
|
|
self.unreal_api.ws_connected.connect(self.ws_connected)
|
|
self.unreal_api.ws_connect()
|
|
|
|
def send_json_message(self):
|
|
message_text = self.json_input.toPlainText().strip()
|
|
print(f"About to send {message_text}")
|
|
if message_text:
|
|
self.unreal_api.send_message(message_text)
|
|
# self.sent_display.add_row(data=message_text)
|
|
|
|
def on_message_received(self, message):
|
|
# print(f"MainWindow received message: {message}")
|
|
self.response_display.add_row(data=message)
|
|
|
|
def on_message_sent(self, sent) -> None:
|
|
self.sent_display.add_row(data=sent)
|
|
|
|
def ws_connected(self, connected: bool) -> None:
|
|
if connected:
|
|
self.statusBar.showMessage("[Connected]")
|
|
else:
|
|
self.statusBar.showMessage("[Disconnected]")
|
|
|
|
def closeEvent(self, event):
|
|
self.unreal_api.close_websocket() # Assurez-vous de fermer correctement le websocket
|
|
event.accept()
|
|
|
|
def filter_avalanche(self, state):
|
|
print(f"filter_avalanche state: {state}")
|
|
if (state == 2):
|
|
print("changing state to True")
|
|
self.unreal_api.set_filtered(True)
|
|
elif (state == 0):
|
|
print("changing state to False")
|
|
self.unreal_api.set_filtered(False)
|
|
|
|
|
|
def send_ping(self):
|
|
print("sending ping to unreal")
|
|
self.unreal_api.send_ping()
|
|
|
|
def sent_display_header_double_clicked(self, data):
|
|
self.json_input.clear()
|
|
self.json_input.append(json.dumps(data, indent=2))
|