从一个协议发送数据到扭曲的另一个协议?
问题描述:
我的一个协议连接到一个服务器,并与我希望将其发送到其他协议的输出。从一个协议发送数据到扭曲的另一个协议?
我需要从ClassB的访问 '味精' 的方法在ClassA的,但我不断收到:exceptions.AttributeError: 'NoneType' object has no attribute 'write'
实际代码:
from twisted.words.protocols import irc
from twisted.internet import protocol
from twisted.internet.protocol import Protocol, ClientFactory
from twisted.internet import reactor
IRC_USERNAME = 'xxx'
IRC_CHANNEL = '#xxx'
T_USERNAME = 'xxx'
T_PASSWORD = md5.new('xxx').hexdigest()
class ircBot(irc.IRCClient):
def _get_nickname(self):
return self.factory.nickname
nickname = property(_get_nickname)
def signedOn(self):
self.join(self.factory.channel)
print "Signed on as %s." % (self.nickname,)
def joined(self, channel):
print "Joined %s." % (channel,)
def privmsg(self, user, channel, msg):
if not user:
return
who = "%s: " % (user.split('!', 1)[0],)
print "%s %s" % (who, msg)
class ircBotFactory(protocol.ClientFactory):
protocol = ircBot
def __init__(self, channel, nickname=IRC_USERNAME):
self.channel = channel
self.nickname = nickname
def clientConnectionLost(self, connector, reason):
print "Lost connection (%s), reconnecting." % (reason,)
connector.connect()
def clientConnectionFailed(self, connector, reason):
print "Could not connect: %s" % (reason,)
class SomeTClass(Protocol):
def dataReceived(self, data):
if data.startswith('SAY'):
data = data.split(';', 1)
# RAGE
#return self.ircClient.msg(IRC_CHANNEL, 'test')
def connectionMade(self):
self.transport.write("mlogin %s %s\n" % (T_USERNAME, T_PASSWORD))
class tClientFactory(ClientFactory):
def startedConnecting(self, connector):
print 'Started to connect.'
def buildProtocol(self, addr):
print 'Connected.'
return t()
def clientConnectionLost(self, connector, reason):
print 'Lost connection. Reason:', reason
def clientConnectionFailed(self, connector, reason):
print 'Connection failed. Reason:', reason
if __name__ == "__main__":
#chan = sys.argv[1]
reactor.connectTCP('xxx', 6667, ircBotFactory(IRC_CHANNEL))
reactor.connectTCP('xxx', 20184, tClientFactory())
reactor.run()
任何想法吗? :-)
答
扭曲FAQ:
如何使输入一个连接 结果在输出上的另一个?
这看起来就像是一个扭曲的 的问题,但实际上它是一个Python 问题。每个协议对象 代表一个连接;你可以用 来调用它的transport.write来写一些 的数据给它。这些是常用的Python 对象;您可以将它们放入列表中, 字典或任何其他数据 结构适用于您的 应用程序。
举一个简单的例子,添加一个列表来 你的工厂,并在协议的 connectionMade和connectionLost,将其添加到 并从列表中删除。 这里的Python代码:
from twisted.internet.protocol import Protocol, Factory from twisted.internet import reactor class MultiEcho(Protocol): def connectionMade(self): self.factory.echoers.append(self) def dataReceived(self, data): for echoer in self.factory.echoers: echoer.transport.write(data) def connectionLost(self, reason): self.factory.echoers.remove(self) class MultiEchoFactory(Factory): protocol = MultiEcho def __init__(self): self.echoers = [] reactor.listenTCP(4321, MultiEchoFactory()) reactor.run()
可以粘贴实际的代码? 理想情况下,一个最小的非工作示例。因此,可能有六个原因导致它无法正常工作。 – moshez 2010-04-14 02:25:17
对不起 - http://pastebin.com/MQPhduSY – veb 2010-04-14 02:36:30
你能发布完整的错误信息吗? – zoli2k 2010-04-14 11:42:05