Ich habe eine neue Version auf GitHub gepusht. Der Fehler sollte jetzt behoben sein, und clients werden auch korrekt getrennt.
Das Problem war, dass doch nicht sichergestellt wurde, dass die Client-ID, welche CloseNetworkConnection übergeben wird, noch gültig ist. Wobei hier die Hilfe nicht eindeutig ist, und nicht sagt, dass es verboten wäre eine Client-ID zu verwenden, welche durch eine Rückgabe von #PB_NetworkEvent_Disconnect als getrennt gekennzeichnet wurde (muss != darf):
Wenn ein Server ein #PB_NetworkEvent_Disconnect Ereignis empfängt, wird seine zugehörige Client-Verbindung automatisch geschlossen und CloseNetworkConnection() muss in diesem Fall nicht aufgerufen werden.
Das Problem ist nun gelöst, indem ich sicherstelle, dass NetworkServerEvent nie parallel mit anderen Netzwerkbefehlen aufgerufen wird. Vorher war es möglich, dass beim einem Aufruf von NetworkServerEvent die Client-ID ungültig gemacht wurde, was natürlich schlecht ist, wenn zur gleichen Zeit irgendwas mit diesem client gemacht wird. Was genau intern passiert kann ich nicht sagen, es kann sein, dass das Problem unabhängig vom Multithreading existiert. Also es reichen würde Netzwerkbefehle mit gerade abgelaufenen Client-IDs zu bombadieren, bis es crasht. Oder es kann sein, dass nur der gleichzeitige Zugriff auf Netzwerkbefehle Probleme macht, unabhängig ob die IDs noch gültig sind oder nicht. Letztendlich weiß Fred ob die Befehle ein Problem mit Multithreading haben, oder ob nur die Dokumentation angepasst werden muss.
mk-soft hat geschrieben:Das senden mit SendNetworkData oder SendNetworkString von einen anderen Thread auf einer nicht mehr vorhanden Connection Crash bei macOS
Ich habe deinen Thread im englischen Forum erst jetzt gesehen. Eventuell hilft es auch bei dir, den Zugriff auf Netzwerkfunktionen per Mutex einzuschränken.
Edit:
Ich hab mir gerade die englische Hilfe angesehen, da steht was anderes:
When a server receives a #PB_NetworkEvent_Disconnect event its associated client connection is automatically closed and CloseNetworkConnection() must not be called in this case.
Ist also nen typischer übersetzungsfehler: must not --> muss nicht anstatt darf nicht :/