我在 Twisted 中有一个需要从 echoclient 获取输入的 echoserver。echocient 是一个 GUI (Panda3D)。单击按钮时,客户端仅发送一条短消息。
所以我有消息要在不规则的时间发送(仅在单击按钮时)。
如何建立永久连接(reactor.run() 已在客户端程序开始时启动)并发送消息。
我不想在 EchoClient/connectionMade 中编写轮询机制。我看到了一个 gtk+ 的例子,但不能把它翻译成 Panda。怎么走。下面的代码根本不起作用,但让您了解我想要什么(基本上是永久连接,有时用户在按下按钮时会发送一些东西)。
from direct.showbase.ShowBase import ShowBase
from direct.gui.DirectButton import DirectButton
from panda3d.core import Vec3
from direct.task import Task
from twisted.internet import protocol, reactor, defer
from twisted.internet.task import LoopingCall
from twisted.spread import pb
FRAMERATE = 32
class LoginDialog:
def __init__(self, deferred):
self.deferredResult = deferred
class EchoClient(ShowBase, protocol.Protocol):
def __init__(self):
ShowBase.__init__(self)
self.echoer = echoer
self.button = DirectButton(pos = Vec3(.1,0,.1), text = "Send request",
scale = .1, pad = (.5, .5),
rolloverSound = None, clickSound = None,
command = self.Request)
def Request():
self.echoer.transport.write("Message from client")
def dataReceived(self, data):
print "Server said: ", data
cf = pb.PBClientFactory()
cf.getRootObject().addCallback(EchoClient)
reactor.connectTCP("localhost", 17000, cf)
LoopingCall(taskMgr.step).start(1 / FRAMERATE)
reactor.run()