Struct frage.
-
Hallo,
Ich habe einen kleinen Client und Server geschrieben (Chat) wenn man sich mit den Chat verbinden will muss man Charaktername (Username) Gender (Geschlecht) eingeben
dies habe ich ihn eine Structur gepacket
struct Spieler{ char Charaktername[56]; int Charakterlevel; int Online; bool Gender; };So wenn sich jetzt ein Client Verbindet setze ich die Daten die ich bekommen haben doch wenn sich jetzt ein neuer Benutzer verbindet muss ich dies ja noch mal setzen doch den ist der andere ja weg .. weil ich will wenn ein Benutzer eine nachricht sendet das alle von ihn gesetzte Information mit gesendet werden
zum Beispiel so :
[Charaktername][Gender][Charakterlevel] Nachricht : buhh !
ich habe schon gelesen das dies mit alloziert also die Structur allozieren so doch so wirklich habe ich das nicht verstanden weil der Server immer prüfen soll
ob der Client noch online ist dies macht er mitdo { // laufen lassen }while(Online == 1);vlt kann mir jemand aus dem Forum helfen

Lg.IchBinDu
-
Du brauchst für jeden Benutzer eine eigene Struktur.
Entweder brauchst du ein Strukturarray, oder ne Liste, etc...Das simpelste wäre
struct Spieler spieler[1000];Damit könntest du maximal 1000 Benutzer auf einmal verwalten.
Schöner ist es, wenn du das ganze dynamisch machst, also die Strukturen dynamisch zur Laufzeit des Programms erzeugst.
-
Erstmal Danke

Ich möchte das gerne sauber haben es heißt wenn sich ein Client ausloggt das dieser den aus diesen Array gelöscht wird ist dies möglich
:?
-
IchBinNichtDu schrieb:
[...] ist dies möglich
:?Ja.
-
Charaktername sollte ein std::string sein, Charakterlevel sollte unsigned sein (z.B: std::uint32_t aus <cstdint>), Online sollte bool sein (falls das den online Status anzeigen soll), und Gender sollte ein enum sein:
enum gender { male, female, };Dieses while online == 1 sieht irgendwie nicht sinnvoll aus, na ja..
Mehrere Spieler kannst du in einem Container wie z.B. std::vector oder std::list (oder std::deque) halten. Diese bringen bereits alles mit was du brauchst, und räumen hinter sich auf. Damit brauchst du dich nicht manuell um den ganzen Speicherkram kümmern.
std::list<player> players; players.push_back(...);
-
Wenn ich Vectoren Benutze und sich 2 Client zu gleichen zeit verbinden gibt es doch einen Deadlook
?
-
IchBinNichtDU schrieb:
Wenn ich Vectoren Benutze und sich 2 Client zu gleichen zeit verbinden gibt es doch einen Deadlook
?Du musst die Zugriffe syncronisieren.
-
IchBinNichtDu schrieb:
Erstmal Danke

Ich möchte das gerne sauber haben es heißt wenn sich ein Client ausloggt das dieser den aus diesen Array gelöscht wird ist dies möglich
:?klaei dann schreibstde nullen ins array rein oda wennses dynamic machst tustes deleten die struct
-
IchBinNichtDU schrieb:
Wenn ich Vectoren Benutze und sich 2 Client zu gleichen zeit verbinden gibt es doch einen Deadlook
?nein es gibt keine tote lokomotive(dad lok) weil dein accept in einem separate fred laufern tut
-
Danke erstmal an alle
,Ich habe das ganze jetzt ein bissel erweitert mit einer MySQL - Verbindung
,Wenn sich ein Client Verbindet werden die Daten der Client zum Server schickt geprüft .. das klappt auch alles die Informationen speichere ich ihn einen Vector
so jetzt verbindet sich ein 2ter Client klappt auch alles speichert wieder alles in den Vector .. so ich schließe den Client 1 so auch Client 2 jetzt Verbinde ich mich wieder mit einen Client schupps ich bekomme die Daten von Client 1 darbei habe ich mich mit Client drei angemeldet ..Der Code (*nicht gerade sauber*)
// Die Vectoren Definieren std::vector<std::string> Charname; std::vector<std::string> Charsex; // Wenn Client Verbunden prüfen string Query = "SELECT * FROM nostale.account WHERE Password ='"+SplitConvertor(Password)+"'"; MYSQL_RES *Result; MYSQL_ROW Row; // Wenn richtig Result = mysql_store_result(nosdb); Row = mysql_fetch_row(Result); Charname.push_back(Row[6]); Charsex.push_back(Row[8]); // Wenn Client die Verbindung schließt Charname[i].pop_back(); Charsex[i].pop_back(); Charsex.erase(Charsex.begin()+i); Charname.erase(Charname.begin()+i);Ich weiss echt nicht mehr was ich machen soll vlt könnt ihr mir wieder helfen
