# 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))