Ich versuche mich an einem Onlinespiel mit der BlenderGameEngine. Stecke allerdings seit einiger Zeit fest.
Für das senden und empfangen der Daten wollte ich einen eigenen Thread erstellen.
Das Problem scheint zu sein, dass nun mein Dictionary/Eintrag verschwindet. (Ohne Threading hatte es funktioniert.)
Was habe ich übersehen? (Die Lösung wird wahrscheinlich sehr einfach sein)
Code: Reproduzierter Fehler:
PHP-Code:
#------------RECEIVE--------------#
# Empfängt stetig Daten und speichert sie nach der IP in "user"
def receive(server):
print("Empfangen aktiv")
global user
while(True):
try:
recPackedData,ip = server.recvfrom(1024)
recData = pickle.loads(recPackedData) # Dateipack öffnen
if ip not in user:
addUser(ip)
user[ip] = recData
own["ip_other"] = ip # Für Movetest
except:
pass
#------------SetPosition--------------#
# Hier sollte die Daten ausgelesen und verarbeitet werden.
# Einfachheitshalber nur mit Print (Konsolenausgabe weiter unten)
def setPosition(own):
global user
print ("Ip: " +str(own["ip_other"]))
print ("Inhalt: " +str(user[own["ip_other"]]))
print ("Inhalt nur X: " +str(user[own["ip_other"]]["X"]))
#------------MAIN--------------#
if 'Init' not in own:
serverSocket = initServer(own)
thread.start_new_thread(receive,(serverSocket,))
thread.start_new_thread(send,(serverSocket,))
time.sleep(5)
setPosition(own)
Konsole:
Code:
Addresse: 192.168.1.20
Empfangen aktiv
Senden aktiv
Neuer User hinzugefuegt
ip: ('192.168.1.39',43320)
Ip: ('192.168.1.39',43320)
Inhalt: {'Z': 1.0, 'Y': 0.0, 'X': 0.0}
Inhalt nur X: 0.0
#Hier wird setPosition() erneut aufgerufen
Ip: ('192.168.1.39',43320)
Python script error - object 'Hauptlogik', controller 'Python':
Traceback (most recent call last):
File "Server", line 140, in (module)
File "Server", line 117, in setPosition
KeyError: ('192.168.1.39',43320)
Beim 1. Durchlauf funktioniert es scheinbar - beim 2. nicht.
ED: Habe für Testzewcke das Skript auf den Kern vereinfacht. Gleicher Fehler:
ED2:
Die Lösung: Umbauen zu einem Modul. Mein Fehler