While were working with networking in panda3d I came up to this example of trivial server that prints received data.
I needed to connect other programs with panda without datagrams.
You can connect to this server through telnet, for example, and send some data by typing it in.
telnet localhost 1234
from direct.showbase.ShowBase import ShowBase
from panda3d.core import *
from direct.task import Task
PORT = 1234
CLIENTS = {}
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.lastConnection = None
self.cManager = QueuedConnectionManager()
self.cListener = QueuedConnectionListener(self.cManager, 0)
self.cReader = QueuedConnectionReader(self.cManager, 0)
# set raw mode - no datagrams requierd
self.cReader.setRawMode(True)
self.cWriter = ConnectionWriter(self.cManager,0)
self.tcpSocket = self.cManager.openTCPServerRendezvous(PORT, 1)
self.cListener.addConnection(self.tcpSocket)
taskMgr.add(self.listenTask, "serverListenTask",-40)
taskMgr.add(self.readTask, "serverReadTask", -39)
def listenTask(self, task):
if self.cListener.newConnectionAvailable():
rendezvous = PointerToConnection()
netAddress = NetAddress()
newConnection = PointerToConnection()
if self.cListener.getNewConnection(rendezvous,netAddress,newConnection):
newConnection = newConnection.p()
# tell the Reader that there's a new connection to read from
self.cReader.addConnection(newConnection)
CLIENTS[newConnection] = netAddress.getIpString()
self.lastConnection = newConnection
print "Got a connection!"
else:
print "getNewConnection returned false"
return Task.cont
def readTask(self, task):
if self.cReader.dataAvailable():
datagram = NetDatagram()
if self.cReader.getData(datagram):
# print received message
msg = datagram.getMessage()
print msg
return Task.cont
app = MyApp()
app.run()