Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

TSNE_Play SpielerIDs und so

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.02.2013, 15:18    Titel: TSNE_Play SpielerIDs und so Antworten mit Zitat

Auch nach mehreren harten Stunden ist es mir nicht gelungen Kontakt mit PuppetMaster aufzunehmen. Aber vielleicht kann mir auch hier geholfen werden?

Es geht um die SpielerIDs. Jeder Spieler, der sich mit einem TSNE_Play Server verbindet, erhält eine bestimmte ID. Der erste Spieler, der sich verbindet hat die ID 1, der zweite dann die ID 2 ... etc.
Nun aber das Problem. Nehmen wir an, es befindet sich ein Spieler mit der ID 1 auf dem Server und verlässt diesen dann. Kurz darauf verbindet sich ein weiterer Spieler mit dem nun leeren Server und bekommt dann die ID 2. Aber wieso? Er ist doch der einzige Spieler dort?
Ist das gewollt? lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.02.2013, 15:28    Titel: Re: TSNE_Play SpielerIDs und so Antworten mit Zitat

Hallo Westbeam,

ich habe bisher immer nur TSNE-pur verwendet und nicht TSNE_Play,
Westbeam hat Folgendes geschrieben:
Nehmen wir an, es befindet sich ein Spieler mit der ID 1 auf dem Server und verlässt diesen dann. Kurz darauf verbindet sich ein weiterer Spieler mit dem nun leeren Server und bekommt dann die ID 2. Aber wieso? Er ist doch der einzige Spieler dort?

aber ich vermute, dass das so gewollt ist. Die Spieler-ID wird für jeden neuen Spieler inkrementiert. Das heißt, wenn bspw. die IDs 1, 2, 5 und 8 belegt sind, dann bekommt ein neuer Spieler nicht etwa die frei gewordene 3, sondern die 9. Fortlaufend eben. Das führt dazu, dass nach ein paar Jahren oder so - je nach Spielerzahl und Fluktuation - die ID überläuft. Ich glaube TSNE_Play handhabt diesen Fall so, dass dann wieder on vorne begonnen wird zu zählen. In einem normalen Programm wird dieser Fall aber wahrscheinlich nicht eintreten.

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 24.02.2013, 17:04    Titel: Antworten mit Zitat

TPM hat sich dazu schon einmal geäußert; es ist so gewollt. So mus das Serverprogramm nicht jedes Mal alle vorhandenen IDs durchlaufen, um zu schauen, welche frei ist (außer die IDs wären bereits "übergelaufen"). Möglicherweise ist es auch eine Frage der Eindeutigkeit: wenn der Client 4 dem Client 2 eine Nachricht schicken will, sollte er sich darauf verlassen können, dass da nicht plötzlich jemand ganz anderes sitzt.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 25.02.2013, 04:42    Titel: Antworten mit Zitat

Also .. es ist eigentlich ein JAIN zu meinen vorrednern.

Zum einen Checkt der Server durchaus ob die ID schon vorhanden ist, bevor er diese vergibt. Zum anderen hat es den ganz einfachen grund, das es mal vor einiger Zei tmit TSNE einige Probleme mit den ID's gab, wenn sie "wiederverwendet" wruden. Das Problem beruhte jedoch nicht am TSNE / Play, sondern am Coder, aber um das im vornherein auzuschliessen, das hier komplikationen eintreten, habe ich den weg gewählt, eine fortlaufende Nummer zu nutzen.

Das "zwingt" jeden coder dazu, diese ID's nicht als Array-Index zu nutzen. Prinzipiel wäre das durchaus möglich und problemlos machbar. Allerdings musste ich feststellen, das oft der fall eintritt das die Coder nicht richtig mit diesen verbindugnen (vorallem durch die Parallelität) umgehen.

Das hatte z.B. zu dem Fall geführt, das offensichtlich mehrmals eine ID genutzt wird, oder noch nicht als "frei" im app deklariert wurde, obwohl dies bereits gemeldet wurde.

Viele würden sicher gerne die ID's (auch bei TSNE) als Array-Index heranziehen.
Allerdings gebe ich hier mal zu bedenken, das es z.B. möglich sein kann, das 2 Server im selben App arbeiten. Oder ein Client und ein Server. Da für beide die Selbe Variable für diese ID's genutzt wird, wäre es sehr umständlich zu realisieren, welche ID Frei ist und damit in das Array-Boundary passt.

Die ID's können überlaufen. Das ist Prinzipiel beabsichtigt. Es ist eien UInteger. Damit viel Potential für mögliche ID's vorhanden. Zunge rausstrecken Und das dauert, bis sie überläuft. Wenn Sie es tut, dan beginnt Sie wieder bei 1, vorrausgesetzt frei, sonst bei 2, wenn frei, sonst 3, ....

PS: Die Socket-Nummern sind übrigens deutlich größer als im Normalem arbeitsfall bei TSNE. Meist fangen die erst bei 2000 (nach meienr erfahrung) an. Je nachdem, was da schon so alles offen is.


MfG
TPM

PPS: Sry für meinen text .. bin quasi schon am pennen Zunge rausstrecken
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz