diff --git a/networking_universal.py b/networking_universal.py new file mode 100644 index 0000000..dd14b7d --- /dev/null +++ b/networking_universal.py @@ -0,0 +1,88 @@ +""" +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