Hello, i made a client and server and added a security way, i send the requested security message but server still saying that there are no security message.
Server: (Read from handleDatagram)
import util.Globals as Globals
from panda3d.core import *
from direct.task.TaskManagerGlobal import *
from direct.directbase.DirectStart import *
import util.IMAMsgTypes as MsgTypes
from direct.distributed.PyDatagram import *
from direct.distributed.PyDatagramIterator import *
class Server:
def __init__(self):
self.cManager = QueuedConnectionManager()
self.cListener = QueuedConnectionListener(self.cManager, 0)
self.cReader = QueuedConnectionReader(self.cManager, 0)
self.cWriter = ConnectionWriter(self.cManager,0)
self.activeConnections=[]
self.connectionsIP = []
self.client = None
self.tcpSocket = self.cManager.openTCPServerRendezvous(Globals.port,Globals.backlog)
self.cListener.addConnection(self.tcpSocket)
taskMgr.add(self.listenerPolling,"pool listener",-39)
taskMgr.add(self.readerPolling,"pool reader",-40)
print('Advs is running!')
def listenerPolling(self,task):
if self.cListener.newConnectionAvailable():
self.rendezvous = PointerToConnection()
self.netAddress = NetAddress()
self.newConnection = PointerToConnection()
if self.cListener.getNewConnection(self.rendezvous,self.netAddress,self.newConnection):
self.newConnection = self.newConnection.p()
self.activeConnections.append(self.newConnection)
self.connectionsIP.append(self.netAddress)
self.client = self.newConnection
self.cReader.addConnection(self.newConnection)
print('New connection at: %s, IP: %s' %(self.newConnection,self.netAddress))
self.listAllClientsIP()
return task.cont
def readerPolling(self,task):
if self.cReader.dataAvailable():
self.datagram=NetDatagram()
if self.cReader.getData(self.datagram):
self.handleDatagram(self.datagram)
return task.cont
def closeConnections(self):
for aClient in self.activeConnections:
self.cReader.removeConnection(aClient)
self.activeConnections=[]
self.cManager.closeConnection(self.tcpSocket)
def listAllClientsIP(self):
for ip in self.connectionsIP:
print('%s\n' %ip)
def handleDatagram(self,datagram):
iterator = PyDatagramIterator(datagram)
msgid = iterator.getUint8()
if msgid == 0:
if iterator.getUint8 != 3:
pd = PyDatagram()
pd.addUint8(1)
pd.addString("The first message isn't YAHOO.")
self.cWriter.send(pd,self.client)
print('Client tried to connect without YAHOO.')
else:
pd = PyDatagram()
pd.addUint8(2)
self.cWriter.send(pd,self.client)
server=Server()
run()
Client:
from pandac.PandaModules import *
loadPrcFile('data/etc/config.prc')
import direct.directbase.DirectStart
from ima.gui.StartScreen import *
from ima.localizer.IMALocalizerEnglish import *
import ima.util.Globals as Globals
import server.util.IMAMsgTypes as MsgTypes
import __builtin__
from panda3d.core import *
import sys
from direct.distributed.PyDatagram import *
from direct.distributed.PyDatagramIterator import *
class Game:
name = 'I\'m Adventure'
author = 'Rounder Square'
copyright = 'Copyright 2014 - Rounder Square - All rights reserved.'
def __init__(self):
pass
def connect(self):
print('Connecting to Advs')
self.cManager = QueuedConnectionManager()
self.cReader = QueuedConnectionReader(self.cManager, 0)
self.cWriter = ConnectionWriter(self.cManager,0)
self.myConnection=self.cManager.openTCPClientConnection(Globals.ip_address,Globals.port_address,
Globals.timeout)
if self.myConnection:
self.cReader.addConnection(self.myConnection)
print('Connected to Advs!')
self.sendYahoo()
taskMgr.add(self.startDatagramHandling,'incoming datagram handling')
def startDatagramHandling(self,task):
if self.cReader.dataAvailable():
self.datagram=NetDatagram()
if self.cReader.getData(self.datagram):
self.handleDatagram(self.datagram)
return task.cont
def handleDatagram(self,datagram):
iterator = PyDatagramIterator(datagram)
msgid = iterator.getUint8()
if msgid == 1:
print('Advs: %s' %iterator.getString())
sys.exit()
elif msgid == 2:
print('Advs: Client send YAHOO! Continuing...')
def sendYahoo(self):
dg = PyDatagram()
dg.addUint8(0)
dg.addUint8(3)
self.cWriter.send(dg,self.myConnection)
__builtin__.game = Game()
game.connect()
__builtin__.startscreen = StartScreen()
run()
My MsgTypes:
from direct.showbase.PythonUtil import invertDictLossless
MsgName2Id = {
'CLIENT_YAHOO':0,
'CLIENT_FAIL_YAHOO':1,
'CLIENT_CONNECTION_SUCCESS':2,
'CLIENT_SEND_YAHOO':3
}
MsgId2Names = invertDictLossless(MsgName2Id)
for name, value in MsgName2Id.items():
exec '%s = %s' % (name, value)
del name, value
Error (Server and Client):
prntscr.com/35h2ku
prntscr.com/35h2o3
What is wrong?