| """ | |
| The DTScripts Universal Networking script | |
| I made this as a base for communication for my upcoming racing game. I hope that you find this useful for your project as well. :) | |
| The DTScripts Universal Networking script is free software: you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation, either version 3 of the License, or | |
| (at your option) any later version. | |
| The DTScripts Universal Networking script is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| GNU General Public License for more details. | |
| You should have received a copy of the GNU General Public License | |
| along with the DTScripts Universal Networking script. If not, see | |
| """ | |
| import bge | |
| from bge import logic | |
| from GameLogic import * | |
| from socket import * | |
| from pickle import * | |
| def networkInitServer(): | |
| cont = bge.logic.getCurrentController() | |
| globaldict = bge.logic.globalDict | |
| obj = cont.owner | |
| host = ´127.0.0.1´ | |
| ServerPort = 45000 | |
| globaldict[´sServer´] = socket(AF_INET, SOCK_DGRAM) | |
| globaldict[´sServer´].setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) | |
| globaldict[´sServer´].bind((host,ServerPort)) | |
| globaldict[´sServer´].setblocking(0) | |
| globaldict[´connection_type´] = ´server´ | |
| def networkInitClient(): | |
| cont = bge.logic.getCurrentController() | |
| obj = cont.owner | |
| globaldict = bge.logic.globalDict | |
| ServerIP = ´127.0.0.1´ | |
| ServerPort = 45000 | |
| Clientname = ´´ | |
| ClientPort = 45001 | |
| globaldict[´sClient´] = socket(AF_INET, SOCK_DGRAM) | |
| globaldict[´sClient´].setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) | |
| globaldict[´sClient´].bind((Clientname,ClientPort)) | |
| globaldict[´host´] = (ServerIP,ServerPort) | |
| globaldict[´sClient´].setblocking(0) | |
| globaldict[´connection_type´] = ´client´ | |
| def updateData(cont): | |
| cont = bge.logic.getCurrentController() | |
| obj = cont.owner | |
| globaldict = bge.logic.globalDict | |
| PosYou = [obj.position[0], obj.position[1], obj.position[2]] | |
| scene = getCurrentScene() | |
| if globaldict[´connection_type´] == "server": | |
| Client = scene.objects[´OBClient´] | |
| try: | |
| #print(´stuff received?´) | |
| Data, CLIP = globaldict[´sServer´].recvfrom(1024) | |
| #print(Data) #data coming in confirmed | |
| UPData = loads(Data) | |
| PosClient = [UPData[0], UPData[1], UPData[2]] | |
| Client.worldPosition = PosClient | |
| Data = dumps((PosYou)) | |
| #print("wtf: " + str(Data)) | |
| globaldict[´sServer´].sendto(Data, CLIP) | |
| #print(Data) | |
| except: | |
| pass | |
| if globaldict[´connection_type´] == "client": | |
| Server = scene.objects[´OBServer´] | |
| Data = dumps((PosYou)) | |
| globaldict[´sClient´].sendto(Data, globaldict[´host´]) | |
| try: | |
| Data1, SRIP = globaldict[´sClient´].recvfrom(1024) | |
| UPData = loads(Data1) | |
| #print(SRIP) | |
| #print("woot" + str(UPData)) | |
| PosServer = [UPData[0], UPData[1], UPData[2]] | |
| Server.worldPosition = PosServer | |
| except: | |
| pass |
