AI Repositories
AI Servers are clients that reside on a server rather than on the end users’ client machines. An AI server (usually called AI Repository) is used to create distributed objects which are usually used to handle game logic that should not be run by end user clients.
In networked games, most of the game logic should be handled by the server. Clients shouldn’t be trusted as it’s not possible to ensure that they haven’t been compromised in one way or another.
Similar to the server repositories, for AI repositories most of the low-level
networking code is neatly hidden by Panda3D which makes setting up a basic AI
server rather simple too. Though rather than having a dedicated AIRepository
class, we have to use the ClientRepository
as, as stated before, the
AI repository is nothing else than a client.
ClientRepository.__init__(
self,
dcFileNames = dcFileNames,
dcSuffix = 'AI',
threadedNet = True)
The setup is quite similar to the one of a normal client repository which we
will take a look at in the next sections. The main difference is that for an AI
repository we pass the dcSuffix = ‘AI’ to the ClientRepository
initialization.
This makes sure that the correct definitions of the DC definition file will be
used. Another method that should be specifically defined in an AI Repository is
the following.
def deallocateChannel(self, doID):
print("Client left us: ", doID)
This function will be called whenever a client has disconnected and gives us the chance to react to its disconnection.