在Twisted中,buildProtocol函数允许我为每个用户创建一个类。我希望能够为每个用户创建两个单独的类。一个用于他们连接时,另一个用于他们进行身份验证并准备加入房间并与客户聊天时。
这是我当前的buildProtcol:
def buildProtocol(self, addr):
connection = self.playerManager.createConnectionClient (addr)
return connection
我希望能够在对象进行身份验证并将现有数据传输到新对象(self.playerManager.createPlayerClient (addr)
)后删除此对象。
我如何能够将Twisted已存储的原始对象与新对象交换,以便新对象从现在开始接收所有数据?
我可以很容易地创建一个布尔值(isAuthenticated
),然后将所有数据转发到新对象,但是如果有一个方法,我宁愿不要同时拥有两个现有对象。销毁原来的并用新的替换它。
答案 0 :(得分:0)
您正在寻找的完全事项 - 在运行时将运输协议切换出来 - 尚未实施。有关详细信息,请参阅https://twistedmatrix.com/trac/ticket/3204。
然而,你正在寻找的是略有错误。协议的工作是解析线路上的字节。如果您需要切换要与之对话的协议对象以实现身份验证,那么您已经对协议对象负有太多责任。
相反,让您的协议解析消息,并在解析它们之后,将实际的应用程序逻辑委托给User对象上的方法。然后,当您进行身份验证时,请切换出与之通话的User对象。这就是Twisted本身在IMAP,POP,SSH,HTTP和其他协议中实现身份验证的方式。