[C++/Source] Whisper ReportSystem

02/09/2015 12:01 TiRez#1
Ahoi Seemänner!

Ich hab mal wieder was für euch. Der Titel ist zwar, dass es ein Report-System ist, aber eigentlich ist es ein Caching-System für private Nachrichten - das Report-System ist nur eine Verwendungsmöglichkeit davon, die ich mit Release (das Report-System ist gekennzeichnet mit #ifdef's) ;)

[Nicht interessanter Teil für diejenigen, die das System nur einbauen möchten]
Soo, was tut dieses sogenannte Caching-System genau? Es speichert alle privaten Nachrichten in den Speicher (RAM) und löscht sie nach fünf Minuten wieder. Das Report-System besitzt ebenso ein eigenes Caching-System für das Abspeichern in der Datenbank (da die normalen Nachrichten nur in den Cache geschrieben werden): sobald ein Spieler gemeldet wurde, werden nach fünf Minuten das erste Mal Nachrichten in die Datenbank geschrieben (beide Namen & Nachrichten) - allerdings maximal bis zu 15 Nachrichten pro Spieler werden alle 5 Minuten gespeichert, sollten mehr geschrieben worden sein, so werden diese nach und nach alle 5 Minuten abgearbeitet. Noch zu sagen wäre, dass alle Teile in "std::queue"'s eingereiht werden, so dass die benötigte CPU-Zeit auf ein Minimum reduziert sein sollte; falls jemand hinweise zur Performance hat, nehme ich sie gern entgegen ;)
[Ende dieses Teils]

Ich würde dieses System allerdings in Verbindung mit einem HP-Admin-Skript nutzen, da es doch sehr aufwendig sein kann, per Hand die Reports in der Datenbank durchzugehen... :p

Nochmal kurz und knapp: Dieses System ermöglicht es, im "Flüstern"-Fenster Spieler zu melden, wodurch beide Spieler + alle Nachrichten in den letzten fünf Minuten und alle Nachrichten in Zukunft in den Server geschrieben werden (in die neu erstellten Tabellen durch die .sql).
02/09/2015 12:09 .K0rí#2
Sehr gut gemacht, mir gefällt was du in lezter Zeit Releast ;)

Mit freundlichen Grüßen
.Kori
02/09/2015 12:31 DasSchwarzeT#3
Idee hapert ein bisschen, wenn man jemanden beleidigt könnte man danach einfach 15x a schreiben und alle "Beweise" wären wieder weg. Wenn man unendlich viele Nachrichten speichert könnte man mega easy die DB zumüllen (ich denke daher auch deine 5 min + 15 Nachrichten pro Spieler).
Da müsste man wiederum am WhisperPacket Sicherheitsmaßnahmen treffen. Alternativ könnte man das ganze auch auf eine zusätzliche Datenbank setzen, die nicht so wichtig ist. Umsetzung der Idee ist gut, die Idee an sich hat jedoch noch ein paar Lücken, danke trotzdem.
02/09/2015 12:48 TiRez#4
@Noo'DasSchwarzeT:
Nein, das ist falsch. Es werden alle Nachrichten, die in den fünf Minuten vor dem Report geschrieben wurden, gespeichert und alle Nachrichten, die danach geschrieben werden. Ich habe lediglich eingebaut, dass er alle 5 Minuten maximal 15 Nachrichten pro Person in die Datenbank schreibt & sobald er das getan hat, gibt er diese 15 Nachrichten zum Löschen aus dem Cache frei. Solange die Nachrichten nicht gespeichert wurden, werden sie unter keinen Umständen aus dem Cache gelöscht. Sobald der Server heruntergefahren wird, werden alle Nachrichten in die Datenbank geschrieben, die noch nicht gespeichert wurden.

Somit soll lediglich abgesichert werden, dass nicht plötzlich 1000 Nachrichten reingeschrieben werden müssen o.ä..
Es gehen keine Nachrichten verloren.

Kind Regards
02/09/2015 12:58 Poccix#5
Sieht gut aus du Pott-Verkäufer.
Hoffe man sieht noch mehr Modifikationen, hast schon ein bisschen was drauf :o
02/09/2015 13:11 EULOG1SON#6
Any image?
02/09/2015 13:13 DasSchwarzeT#7
Quote:
Originally Posted by TiRez View Post
@Noo'DasSchwarzeT:
Nein, das ist falsch. Es werden alle Nachrichten, die in den fünf Minuten vor dem Report geschrieben wurden, gespeichert und alle Nachrichten, die danach geschrieben werden.
Kind Regards
Dann reported man seinen 2. Account und spammt mit diesem den 1. Account mit 10 Nachrichten/Sekunde zu. Wenn man sich paar Kumpels schnappt und die das alles machen ist die DB schneller "voll" als gewollt.
02/09/2015 13:42 TiRez#8
Quote:
Originally Posted by Isaac™ View Post
Sieht gut aus du Pott-Verkäufer.
Besser als
[12:57:14] Isaac™ | poccix | lucas: Ich erteile Loginerlaubnisse
[12:57:21] Isaac™ | poccix | lucas: Fertige die Anfragen ab

Quote:
Originally Posted by Noo'DasSchwarzeT View Post
Dann reported man seinen 2. Account und spammt mit diesem den 1. Account mit 10 Nachrichten/Sekunde zu. Wenn man sich paar Kumpels schnappt und die das alles machen ist die DB schneller "voll" als gewollt.
Nunja, dagegen habe ich auf meinem Server eine Whisper-Sperre (Limitierung der Nachrichten pro Minute), da sonst der Whisper-Kickhack ebenso funktionieren würde. Des Weiteren - das würde dir gar nichts bringen. Wie bereits gesagt, er speichert maximal 15 Nachrichten pro User alle 5 Minuten - er würde über einen Tag lang jeweils 15 Nachrichten speichern & es gäbe kein einziges Problem. Dann dumpst du am nächsten Tag die Logs & löschst sie - und nichts ist mehr da. Du kannst damit gar nichts erreichen, diese paar Einträge mit etwas Text machen der Datenbank nichts aus. Die Log-Tabelle hat oft über 10k Einträge oder über 100k Einträge - und es macht gar nichts aus.
Ich versteh deine Sorgen, aber darüber hab ich mir schon einige Gedanken gemacht; bin aber jederzeit bereit, Hinweise zu hören :)

Quote:
Any image?
Well... it's just a small button in the "whisper"-window which you can click and the player is reported. Nothing more^^
02/09/2015 16:09 Alergix2#9
Bester Typ <3
Danke ;)
02/09/2015 17:44 Da' Real Pαιη#10
Sehr nützlich danke (Y)
02/14/2015 19:13 Freezy01#11
Hey,

Habe folgendes Problem..

Bei mir scheitert es beim compilen an folgender Stelle. (in der input_main.cpp)

CWhisperManager::instance().AddMessage(ch->GetName(), ch->GetPlayerID(), szOpponentName, dwOpponentPID, buf);

[Only registered and activated users can see links. Click Here To Register...]

Kann mir wer weiterhelfen?

Vielen Dank
Freezy01
02/14/2015 22:08 Myrelle#12
Schickes Ding :) Danke