Во-первых, не звоните writeSomeData
никогда.Звоните write
.Во-вторых, наличие экземпляра глобального протокола, вероятно, является плохой идеей, поскольку по всем обычным причинам глобальные переменные обычно являются плохой идеей.
В-третьих, добавьте метод в подкласс ProcessProtocol
для получения необходимой информации.Работа протокола заключается в том, чтобы знать, как превратить абстрактные действия, такие как «запрос списка игроков» в байтовые последовательности для передачи, и как превратить полученные байтовые последовательности обратно в абстрактные действия, такие как «процесс сказал, что эти игроки подключены».
class NotchianProcessProtocol(protocol.ProcessProtocol):
...
def listPlayers(self):
self.transport.write("list")
self._waiting.append(Deferred())
return self._waiting[-1]
def outReceived(self, bytes):
outbuffer = self.outbuffer + bytes
lines, leftover = parseLines(outbuffer)
self.outbuffer = leftover
for line in lines:
if line.startswith('[INFO] Connected players: '):
self._waiting.pop(0).callback(line)
Теперь любой ваш код, имеющий ссылку на подключенный NotchianProcessProtocol
, может вызвать listPlayers
и получить обратно Deferred
, который вскоре после этого отправит информацию о подключенном игроке.