My attempt as a trivial client:
import direct.directbase.DirectStart from direct.showbase import DirectObject from direct.showbase.DirectObject import DirectObject from direct.task.Task import Task from pandac.PandaModules import * import sys def tskReaderPolling(taskdata): print "task Started" if cReader.dataAvailable(): print "task data" print "task done" return Task.cont cManager = QueuedConnectionManager() cListener = QueuedConnectionListener(cManager, 0) cReader = QueuedConnectionReader(cManager, 0) cWriter = ConnectionWriter(cManager,0) port_address=4519 # same for client and server # a valid server URL. You can also use a DNS name # if the server has one, such as "localhost" or "panda3d.org" ip_address="fg.98115.net" # how long until we give up trying to reach the server? timeout_in_miliseconds=3000 # 3 seconds myConnection=cManager.openTCPClientConnection(ip_address,port_address,timeout_in_miliseconds) if myConnection: cReader.addConnection(myConnection) # receive messages from server print "Connected" taskMgr.add(tskReaderPolling,"Poll the connection reader",-40) run()
I have a server, and connecting to it should get some data (used for login). I’m working on my new Panda3D client, however Panda freezes after running my task a few times(variable, 2 to maybe 10). “task data” is never printed and it freezes after “task Started” so I think it is freezing on cReader.dataAvailable(). My server logs indicate that connections were made.
I would like to get data and have panda not freeze, but right now I can’t do either.
I suspect the issue is just that my server is not using Panda’s protocol, and I can’t get raw TCP data with those classes, however, Panda shouldn’t freeze right? I have to force it to quit. Freezing on unexpected network data is very bad.
I could, and may, port some of the networking portions of my server to panda, but I like to keep my options open, so if the panda networking has some protocol (other than basic TCP), I would like to know both what it is (so I can implement it in other languages), and how to get around it (do I simply use other python networking setups?)