Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zugriff mehrerer User auf eine Datei (https://www.delphipraxis.net/175647-zugriff-mehrerer-user-auf-eine-datei.html)

sx2008 7. Jul 2013 18:46

AW: Zugriff mehrerer User auf eine Datei
 
Also ich würde wenn es nur um zentrale Highscores geht die Sache mit einer exklusiv gelockten Datei erledigen.
Hier mal Stichpunktartig der Ablauf:

Eingabeparameter:
* Dateiname
* Highscorename
* scorewert (-1 bedeutet: Highscore nicht schreiben)
Ausgabe
* Stringliste mit Highscores

Ablauf
1.) Datei exklusiv öffnen
dabei hilft dieser Code http://www.delphipraxis.net/52135-ex...f-dateien.html
2.) Inhalt aus dem Stream in die Stringliste einlesen
Delphi-Quellcode:
Liste.ReadFromStream(stream);
3.) Wenn scorewert = -1 dann gehts weiter mit Punkt 8
4.) Zeile mit dem Highscorename suchen und aktualisieren
der Inhalt der Datei könnte z.B. so aussehen
Code:
Gametester|200000
Predator|80500
Fredl|60000
Beginner|5500
Also immer Name|score in einer Zeile
5.) Falls der eigene Name nicht in der Liste enthalten dann neuen Eintrag einfügen
6.) Liste ggf. sortieren
7.) Stream Position auf Anfang setzen und aktualisiert Liste schreiben
8.) Streamobjekt freigeben

Man kann den beschriebenen Auflauf in einer Procedure unterbringen oder (besser) man schreibt eine Klasse dafür.
Nachtrag: man kann die Stringliste auch in ein
Delphi-Quellcode:
TMemIniFile
kopieren (Methoden
Delphi-Quellcode:
SetStrings
,
Delphi-Quellcode:
GetStrings
) und so den Datenzugriff vereinfachen

Sir Rufo 8. Jul 2013 11:29

AW: Zugriff mehrerer User auf eine Datei
 
Zitat:

Zitat von Aphton (Beitrag 1220958)
Bei einer Highscore dürftest du das Problem mit dem "dirty writing" haben, sofern derjenige, der schreibt, auch die Logik ausführt (einsortieren in die Highscore Liste). Dafür muss es einen wechselseitigen Ausschluss geben.
Für soetwas dürfte das Fassade-Pattern angebracht sein - eine Schnittstelle, die das Eintragen übernimmt.

Wie das Facade-Pattern hier jetzt konkret helfen soll ist mir allerdings ein Rätsel.

Das Strategy-Pattern könnte ich mir gut vorstellen, aber nur um die konkrete Implementierung zu verstecken und später sehr leicht eine andere Speichermethode (Datenbank, Webdienst, etc.) einzuführen.

Konkret hilft das aber auch nicht, aber damit würde ich den Ansatz von sx2008 kapseln ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz