Twisted: как отправить сообщение при наступлении какого-то события в GUI?
Сейчас реализовано то, что клиент подключается к известным ему другим клиентам, "здоровается с ними", обмениваются пирами и дальше просто слушают.
И есть GUI приложение, которое в последствии будет состыковываться с Twisted. Так вот, как сделать так, чтобы при совершении какого-либо события в GUI, я оповещал других клиентов об этом событии?
Я правильно понимаю, что из GUI приложения мне нужно как-то вызывать метод, который отправляет сообщения в Классе-протоколе?
Самый правильный вариант - в обработчике события GUI-приложения сделать определённый запрос к twisted-серверу, в ответы на который сервер разошлёт в активные подключения уведомления.
А если нету как-такового сервера (что-то типо p2p), но при этом у меня есть таблица с моими пирами и я держу с ними постоянное соединение.
И что вы имеете ввиду под "определенный запрос": self.transport.write(message), которое вызовется при обработке события GUI?
snegirev_news, если в "таблице с пирами" у вас хранятся протоколы, то тогда используйте QTReactor и в обработчике события GUI обходите пиры в цикле и вызывайте у каждого какой-нибудь метод "eventTriggered", который будет писать нужные данные в свой транспорт.
Сергей Горностаев, уже чуточку понятнее, хотя бы есть ориентир в каком направлении двигаться.
А если еще задача усложняется и в "таблице" хранятся только пары (host:port)?
Просто изначально я подключаюсь к единственному известному мне клиенту. После знакомства, он мне отправляет List с host:port других клиентов которые он знает и я внутри протокола подключаюсь к этим присланным host:port и повторяю процедуру знакомства пока каждый не будет знать каждого. В результате у каждого клиента храниться таблица с host:port с кем он держит соединение.
Сергей Горностаев, можно резюмировать все вышесказанно, дабы проверить, что я все понял правильно?
Клиенты обмениваются пирами в виде таблицы содержащие host:port. При получении данной таблицы я подключаюсь к данным пирам и при обмене "приветственными" сообщениями я сохраняю протоколы данных пиров в Лист.
После всех предварительных действий мои клиенты ожидают дальнейших действий и крутятся в лупе.
Когда в GUI происходит нужное событие, я в обработчике данного события через QTReactor получаю доступ к этому List, содержащий протоколы тех, с кем я сейчас соединен.
Обходя List в цикле, я у каждого протокола вызываю какой-то метод, который описан в этом протоколе.
snegirev_news, всё верно. Только QTReactor - это цикл событий общий для Qt и Twisted. Вы его инсталлируете один раз при запуске программы и в последствии все события как GUI, так и Twisted происходят и обрабатываются в одном цикле.