wxSocket Client identifikation
-
Hi,
habe eine Frage zur Identifikation von Clients. Wenn sich ein client mit dem Server verbindet, sendet er eine Benutzerkennung. Kann ich diese Kennung dem Socket irgendwie zuweisen? Und wie finde ich herraus wenn sich ein client disconnected(wxSOCKET_LOST) welcher das war?
switch(event.GetSocketEvent()) { case wxSOCKET_INPUT: { .... sock->ReadMsg(buf, MAX_MSG_SIZE * sizeof(wxChar)).LastCount(); data=buf; //Userkennung AddUser(data); SetStatusText("User connected", 1); sock->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG); sock->Notify(true); break; } case wxSOCKET_LOST: { //hier jetzt rausfinden finden welches Socket verloren gegangen ist und dann den User deregistrieren m_numClients--; SetStatusText("User disconnected.", 1); sock->Destroy(); break; } default: ; }
Ich denke mal ich muss eine Art zuordnung machen, wie IP-Adresse(wie bekomme ich die? Mittels GetPeer oder GetLocal oder ...) und User!?
Und wie bekomme ich dann raus welche Verbindung beendet wurde?Danke & Gruß
-
Hm, das mit der IP weiss ich jetzt nicht sofort.
Aber generell würde ich das in einer wxHashMap oder std::map verwalten.// in deiner klasse std::map<wxSocket*,wxString> usermap; //im socket event: // accept client usermap.insert(event.GetEventObject(),"username der vorher gelesen wurde")); // erase client usermap.erase(usermap.find(event.GetEventObject()));
Eine Hashmap könnte tendenziell schneller sein, müsste man aber evtl. erstmal austesten.