Мне нужно разобраться в async(qt)-pyside-коде, в котором есть подключение к серверу. Должен быть флаг, который проверяет, нужно ли опять подключаться. Я не понимаю, как его сделать, и можно ли его сделать вообще (я немного чайник в этой области). Помогите пожалуйста ( уже третий день бьюсь )
Вот код:
(вид класса Chat есть чуть повыше в коде)
from PySide2.QtWidgets import *
from PySide2.QtWidgets import QMainWindow
import asyncio
from asyncio import transports
from asyncqt import QEventLoop
host = "127.0.0.1"
port = 4000
class ClientProtocol(asyncio.Protocol):
transport: transports.Transport
window: 'Chat'
def __init__(self, chat):
self.window = chat
self.flag = False # Сам флаг
def data_received(self, data: bytes):
decoded = data.decode()
self.window.plainTextEdit.appendPlainText(decoded)
if decoded == "True":
self.flag = True
def connection_made(self, transport: transports.Transport):
self.transport = transport
print("Conn made")
def connection_lost(self, exception):
print("Conn lost")
class Chat(QMainWindow, Ui_JustMessenger):
protocol: ClientProtocol
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.send_message)
self.setWindowTitle("JustMessenger")
self.pushButton.setShortcut("Return")
def send_message(self):
message = self.lineEdit.text()
self.lineEdit.clear()
self.protocol.transport.write(message.encode())
def create_protocol(self):
self.protocol = ClientProtocol(self)
return self.protocol
"""Проверка флага должна быть
(по крайней мере мне так кажется)
где-то здесь |
\|/ """
async def start(self):
self.show()
loop = asyncio.get_running_loop()
with open('ip_enter.txt') as file:
ip = file.readline().split()
coroutine = loop.create_connection(
self.create_protocol,
host,
port
)
await asyncio.wait_for(coroutine, 1000)
application = QApplication()
chat = Chat()
loop = QEventLoop(application)
asyncio.set_event_loop(loop)
loop.create_task(chat.start())
loop.run_forever()