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:
Spoiler:(zum lesen bitte Text markieren)
PHP-Code:
import bge
import time
import _thread 
as thread

#user = {}
#xxx = {}

cont bge.logic.getCurrentController()
own cont.owner

scene 
bge.logic.getCurrentScene()
objList scene.objects



#------------RECEIVE--------------#
def receive(own):
    
    
    global 
user
    
global xxx
    
    
print("Empfangen aktiv")
    
recData,ip = (111,222)
    
user[ip] = recData
    own
["ip_other"] = ip # Für Movetest
    
xxx[0] = ip
    
print ("\n\nEmpfange:  "+str(recData))
    print (
"IP:  "+str(ip))
    print (
"xxx0:  "+str(xxx[0]))



#------------SetPosition--------------#
def setPosition(own):

    global 
user
    
global xxx
    
    
print (xxx[0])
    
    print (
own["ip_other"])
    print (
"uIp:" +str(user[own["ip_other"]]))


#------------MAIN--------------#
if 'Init' not in own:
    
own["Init"] = True
    
    user 
= {}
    
xxx = {}
    
    
thread.start_new_thread(receive,(own,))
#receive(own)
time.sleep(5)
setPosition(own



ED2:
Die Lösung: Umbauen zu einem Modul. Mein Fehler