Skip to content

Commit 1ffcda3

Browse files
committed
Fun server client stuff do now be working xP
1 parent 9826d87 commit 1ffcda3

11 files changed

Lines changed: 71 additions & 21 deletions

File tree

Blobtory/Scripts/Main.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,32 @@
1818

1919

2020
class Main(ShowBase):
21-
server: Server.Server
22-
client: Client.Client
21+
server: Server.Server = None
22+
client: Client.Client = None
2323

2424
def __init__(self):
2525
super().__init__()
2626
self.winCreator = WindowCreator(self, enableRP=False, isFullscreen=False)
2727
self.scene: SceneBuilder = SceneBuilder(self.winCreator)
2828
self.accept("c", self.ConnectClient)
2929
self.accept("v", self.StartServer)
30+
self.accept("r", self.GoToNext)
3031

3132
def StartServer(self):
32-
self.server: Server = Server.Server(self.winCreator)
33+
if self.server is None:
34+
self.server: Server = Server.Server(self.winCreator)
35+
else:
36+
self.winCreator.baseData.debuggerMain.Inform("Server already connected")
3337

3438
def ConnectClient(self):
35-
self.client = Client.Client(self.winCreator)
39+
if self.client is None:
40+
self.client = Client.Client(self.winCreator, self.scene)
41+
else:
42+
self.winCreator.baseData.debuggerMain.Inform("Client already connected")
43+
44+
def GoToNext(self):
45+
if self.client is not None:
46+
self.client.GoNextMsg()
3647

3748

3849
loadPrcFileData('', 'framebuffer-srgb #t')

Blobtory/Scripts/Server/Client.py

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
from direct.distributed.PyDatagram import PyDatagram
2+
from direct.distributed.PyDatagramIterator import PyDatagramIterator
3+
from direct.task import Task
24
from panda3d.core import QueuedConnectionManager, QueuedConnectionListener, QueuedConnectionReader, ConnectionWriter
35
from panda3d.core import PointerToConnection, NetAddress, NetDatagram
46

57
from Blobtory.Scripts.Pipeline.WindowCreator import WindowCreator
8+
from Blobtory.Scripts.game.SceneBuilder import SceneBuilder
9+
610

711
class Client:
8-
def __init__(self, winCreator: WindowCreator):
12+
def __init__(self, winCreator: WindowCreator, scene: SceneBuilder):
13+
self.winCreator = winCreator
14+
self.scene = scene
915
self.cManager = QueuedConnectionManager()
1016
self.cReader = QueuedConnectionReader(self.cManager, 0)
1117
self.cWriter = ConnectionWriter(self.cManager, 0)
@@ -14,12 +20,35 @@ def __init__(self, winCreator: WindowCreator):
1420
ip_address = "localhost"
1521
timeout = 3000 # 3 seconds
1622

17-
myConnection = self.cManager.openTCPClientConnection(ip_address, port_address, timeout)
18-
if myConnection:
19-
self.cReader.addConnection(myConnection) # receive messages from server
23+
self.winCreator.base.taskMgr.add(self.tskReaderPolling, "Poll the connection reader", -41)
24+
25+
self.myConnection = self.cManager.openTCPClientConnection(ip_address, port_address, timeout)
26+
if self.myConnection:
27+
self.cReader.addConnection(self.myConnection) # receive messages from server
28+
29+
def tskReaderPolling(self, taskdata):
30+
if self.cReader.dataAvailable():
31+
datagram = NetDatagram() # catch the incoming data in this instance
32+
# Check the return value; if we were threaded, someone else could have
33+
# snagged this data before we did
34+
if self.cReader.getData(datagram):
35+
self.myProcessDataFunction(datagram)
36+
return Task.cont
37+
38+
def myProcessDataFunction(self, datagram):
39+
myIterator = PyDatagramIterator(datagram)
40+
msgID = myIterator.getUint8()
41+
if msgID == 1:
42+
messageToPrint = myIterator.getString()
43+
if "Go" in messageToPrint:
44+
if "Next" in messageToPrint:
45+
print("yay it worked")
46+
self.scene.planetGen.NextPoint()
2047

21-
myPyDatagram = PyDatagram()
22-
myPyDatagram.addUint8(1)
23-
myPyDatagram.addString("Hello, world!")
48+
print(messageToPrint)
2449

25-
self.cWriter.send(myPyDatagram, myConnection)
50+
def GoNextMsg(self):
51+
myPyDatagram = PyDatagram()
52+
myPyDatagram.addUint8(1)
53+
myPyDatagram.addString("Go Next")
54+
self.cWriter.send(myPyDatagram, self.myConnection)

Blobtory/Scripts/Server/Server.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from direct.distributed.PyDatagram import PyDatagram
12
from direct.distributed.PyDatagramIterator import PyDatagramIterator
23
from panda3d.core import QueuedConnectionManager, QueuedConnectionListener, QueuedConnectionReader, ConnectionWriter
34
from panda3d.core import PointerToConnection, NetAddress, NetDatagram
@@ -54,4 +55,13 @@ def myProcessDataFunction(self, datagram):
5455
msgID = myIterator.getUint8()
5556
if msgID == 1:
5657
messageToPrint = myIterator.getString()
58+
if "Go" in messageToPrint:
59+
if "Next" in messageToPrint:
60+
print("go next on all clients")
61+
for clientConnection in self.activeConnections:
62+
myPyDatagram = PyDatagram()
63+
myPyDatagram.addUint8(1)
64+
myPyDatagram.addString("Go Next")
65+
self.cWriter.send(myPyDatagram, clientConnection)
66+
5767
print(messageToPrint)

Blobtory/Scripts/game/SceneBuilder.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88

99
class SceneBuilder:
10+
planetGen: PlanetGenerator
11+
1012
def __init__(self, winCreator: WindowCreator):
1113
self.winCreator = winCreator
1214
self.base = winCreator.base
@@ -31,11 +33,11 @@ def SetupScene(self):
3133
Sequence(startInterval, endInterval).loop()
3234

3335
def SetupPlanets(self):
34-
planetGen: PlanetGenerator = PlanetGenerator(self.winCreator, 128, 450)
35-
self.base.accept("d", self.IncreaseSize, [planetGen, 1.5])
36-
self.base.accept("d-repeat", self.IncreaseSize, [planetGen, 1.5])
37-
self.base.accept("a", self.IncreaseSize, [planetGen, -1.5])
38-
self.base.accept("a-repeat", self.IncreaseSize, [planetGen, -1.5])
36+
self.planetGen = PlanetGenerator(self.winCreator, 128, 450)
37+
self.base.accept("d", self.IncreaseSize, [self.planetGen, 1.5])
38+
self.base.accept("d-repeat", self.IncreaseSize, [self.planetGen, 1.5])
39+
self.base.accept("a", self.IncreaseSize, [self.planetGen, -1.5])
40+
self.base.accept("a-repeat", self.IncreaseSize, [self.planetGen, -1.5])
3941

4042
def IncreaseSize(self, planetGen: PlanetGenerator, a):
4143
planetGen.cubeformer.mouseTime.setData(PTAFloat([10, 0, 0, planetGen.cubeformer.mouseTime.getElement(3)+a]))

Blobtory/Scripts/planet_former/PlanetGenerator.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ def __init__(self, winCreator: WindowCreator, gridSize: int, radius: float):
6161
self.RegenPlanet()
6262
self.winCreator.base.taskMgr.doMethodLater(1, self.UpdatePhysicsMesh, "Planet Physics Updater")
6363

64-
self.winCreator.base.accept("r", self.NextPoint)
65-
6664
def NextPoint(self):
6765
for i in range(20): next(self.listOfItems)
6866
examplePointTo: NodeKey = next(self.listOfItems)
1.32 MB
Binary file not shown.

docs/Concept Art/PlanetIcon.kra

1.91 MB
Binary file not shown.

docs/Concept Art/PlanetIcon.kra~

1.91 MB
Binary file not shown.

docs/Concept Art/PlanetIcon.png

474 KB
Loading

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
panda3d~=1.10.7
2-
numpy~=1.19.3
2+
numpy~=1.19.4
33
setuptools~=50.3.2
44
multipledispatch~=0.6.0
55
pip~=20.3b1

0 commit comments

Comments
 (0)