Image

Imagenikon_nlg wrote in Imageru_python

Twisted

Здравствуйте.
Ещё раз прошу помощи
Со стороны клиента вместо socket.send/recv решил использовать twisted, и наткнулся на засаду:
Никак не могу понять как сделать интерактивный dummy-клиент.
Т.е. жёстко прописаный код подключается, принимает и отправляет данные, и т.д., а вне класса не могу сделать sendMessage()

При чём код
# -*- coding: windows-1251 -*-

from twisted.internet.protocol import Protocol, ClientFactory
from sys import stdout
from twisted.internet import reactor
import threading


myhost = 'localhost'
myport = '10101'

class Echo(Protocol):
    def dataReceived(self, data):
        stdout.write(data)
    
    def sendMessage(self, data):
        self.transport.write(data + "\r\n")
    
    def connectionMade(self):
        print "It made"

class EchoClientFactory(ClientFactory):
    def startedConnecting(self, connector):
        print "Started to connect"
    
    def buildProtocol(self, addr):
        print "Connected"
        return Echo()
    
    def clientConnectionLost(self, connector, reason):
        print "Lost connection. Reason: ", reason
        
    def clientConnectionFailed(self, connector, reason):
        print "Connection failed. Reaason: ", reason

def doQuery():
    x = Echo()
    x.sendMessage("Hi")

t = threading.Thread(target = doQuery)
reactor.connectTCP('localhost', 10101, EchoClientFactory())
t.start()
reactor.run()

ругается на

File "C:\py\client.py", line 38, in doQuery
x.sendMessage("Hi")
File "C:\py\client.py", line 17, in sendMessage
self.transport.write(data + "\r\n")
AttributeError: 'NoneType' object has no attribute 'write'

Покопался в doc/examples, почитал Writing Clients -- так и не понимаю :(
Может я не с тем классом пытаюсь работать?