Files
WLUS/WorldServer.py
wesleyd1124 cf038762b8 Lots of Stuff
Worked on server architecture, added minifigure creation, ditched server database all together for a pickling system
2018-05-28 14:55:11 -04:00

46 lines
2.0 KiB
Python

from typing import Callable
import WorldPackets
from PacketHeaders import PacketHeader
from Enum import ZoneID
from GameManager import GameManager
from GameDB import GameDB
import threading
from ServerUtilities import *
import pyraknet
from GameManager import Zone
from pyraknet.replicamanager import *
from core import GameServer
class WorldServer(GameServer):
def __init__(self, address: Address, max_connections: int, incoming_password: bytes, GameManager : GameManager, CDClient : GameDB):
super().__init__(address, max_connections, incoming_password, GameManager, CDClient)
self.add_handler(pyraknet.server.Event.UserPacket, self.handlePacket)
self.WorldHandlers = {}
self.ReplicaManagers = {}
self.registerWorldHandler(PacketHeader.ClientUserSessionInfo.value, WorldPackets.HandleSessionKey)
self.registerWorldHandler(PacketHeader.ClientMinifigureListRequest.value, WorldPackets.HandleMinifigListRequest)
self.registerWorldHandler(PacketHeader.ClientMinifigureCreateRequest.value, WorldPackets.HandleMinifigureCreation)
self.registerWorldHandler(PacketHeader.Handshake.value, WorldPackets.HandleHandshake)
print("World Server Started")
self.registerZone(ZoneID.VentureExplorer.value)
def handlePacket(self, data : bytes, address):
if(data[0:8] in self.WorldHandlers):
t = threading.Thread(target=self.WorldHandlers[data[0:8]], args=[self, data[8:], address])
t.start()
else:
print("Header {} Has No Handler!".format(data[0:8]))
def registerReplicaManager(self, WorldID : int):
self.ReplicaManagers[WorldID] = ReplicaManager(self)
def registerWorldHandler(self, header : PacketHeader, function : Callable):
self.WorldHandlers[header] = function
def registerZone(self, WorldID : int, lvlFiles : list = None):
World = Zone(self.Game)
World.ZoneID = WorldID
self.registerReplicaManager(WorldID)
if(lvlFiles != None):
"""Parse Lvl Files"""
result = self.Game.registerZone(World)
if(result is not Exception): print("Registered Zone {}".format(WorldID))