Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

m3xx

Alter Hase

  • »m3xx« ist der Autor dieses Themas

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

1

16.10.2012, 15:09

Updateabfrage aber wie?

Hey Leute ich bins mal wieder, ich habe eine kleine Frage die sich mir selbst nicht erschließt. Wie ist es möglich, eine Version eines Spiels oder eines Tools abzufragen. Also ich denke das Downloaden einer Textdatei bei jedem start des Programms ist viel zu aufwändig, da gibt es doch bestimmt bessere Methoden.
Mir geht es nicht über irgend nen code etc. Sondern darum wo bzw wie soll ich die Version abfragen? :o

Mir steht ein FTP server zur verfügung, eine Top-Level-Domain und ich glaube noch MySQL-Datenbanken aber da kenne ich mich nicht mit aus.


Google hilft mir nicht wirklich ich hab nur son Mist über n Navigon gefunden etc :D

2

16.10.2012, 15:15

Selbst große Spielehersteller laden einfach nur eine XML Datei aus dem Netz in der die aktuelle Version steht. In der XML Datei kannst du ja direkt den Link zum downloaden des Updates angeben. Das muss aber nicht zwingend XML sein. War nur ein Beispiel.

Im .Net Framework wird das auch nicht anders gelöst. Datei runterladen, checken ob die Version passt und ggf. neu laden.

Einen direkten Datenbankzugriff würde ich aus dem Tool vermeiden.

3

16.10.2012, 15:15

Ich würde zuerst eine Datei auf den Server hoch laden und der Inhalt der Datei ist die neuste Versionsnummer. Dann kannst du Client-Seitig z.B. mit libcurlden Inhalt dieser Datei sehen und dann vergleichen. Wenn ja, dann downloadest du einen Patch vom Server oder gleich das gerammte Programm neu runter. Oder du machst eine Abfrage von einem PHP-Skript, der dir deine Version checkt.

m3xx

Alter Hase

  • »m3xx« ist der Autor dieses Themas

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

4

16.10.2012, 15:24

Zur PHP-Abfrage: Wie genau sieht das aus, also was befindet sich den in dieser PHP, ich beschäftige mich nicht sonderlich mit Webentwicklung außer HTML.

FSA

Community-Fossil

  • Private Nachricht senden

5

16.10.2012, 15:30

In Breaknaoid2 wurde das so gelöst:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
HINTERNET hInternet = InternetOpen("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
HINTERNET hURL = InternetOpenUrl(hInternet, "http://update.jbtechnologies.de/get_version.php?product=breakanoid", 0, 0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0);
            
            if(!hURL)
            {
                MessageBox(NULL, "Update fehlgeschlagen: Es konnte keine Verbindung zum Server hergestellt werden!", "Breakanoid - Update Fehler", MB_ICONSTOP);
                goto closeInternetHandles;
            }

            char acVersion[4];
            DWORD dwNumBytesRead;

            InternetReadFile(hURL, acVersion, 3, &dwNumBytesRead);
            if(atoi(acVersion) > PRG_VERSION)
            {
                CloseHandle(hURL);
                HINTERNET hURL = InternetOpenUrl(hInternet, "http://update.jbtechnologies.de/get_version.php?product=breakanoid&option=info", 0, 0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0);
                char acUptinfo[512];
                char acTmp[1024];
                ZeroMemory(acUptinfo, 512 * sizeof(char));
                InternetReadFile(hURL, acUptinfo, 1023, &dwNumBytesRead);
                sprintf(acTmp, "Es ist eine neue Version von Breakanoid verfügbar!\n\nWollen Sie jetzt eine Website öffnen, wo Sie diese herunterladen können (empfohlen)?\n\nBeschreibung:\n%s", acUptinfo);
                if(MessageBox(NULL, acTmp, "Breakanoid - Updater", MB_ICONINFORMATION | MB_YESNO) == IDYES)
                {
                    ShellExecute(NULL, "open", "http://www.jbtechnologies.de/projects/programms/breakanoid2.html", NULL, NULL, SW_SHOWDEFAULT);
                    CloseHandle(hURL);
                    CloseHandle(hInternet);
                    exit(0);
                }
            }
            else
            {
                MessageBox(NULL, "Ihre Version von Breakanoid ist auf dem neuesten Stand.", "Breakanoid - Updater", MB_ICONINFORMATION);
            }

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

6

16.10.2012, 17:00

Also ich denke das Downloaden einer Textdatei bei jedem start des Programms ist viel zu aufwändig, da gibt es doch bestimmt bessere Methoden.

Ob etwas zu aufwändig ist oder nicht hängt ganz vom Kontext ab. Eine solche Datei ist vermutlich enorm klein und ein einzelnes IP Paket kann bis zu 64kb Daten beinhalten. Die Datenmenge kann die also fast egal sein und die Verzögerung beim versenden wirst du mit keiner Technik wirklich viel verringern können.
Außerdem prüfst du die Version beim starten des Spiels, selbst wenn das eine Sekunde dauern sollte, wird das niemand merken.
Anders sähe es aus, wenn du ein Echtzeit-Netzwerkspiel realisieren willst, da muss du schon darauf achten, dass Daten effizient übertragen werden. Aber wieso solltest du dir für einen Versionscheck Arbeit für Optimierungen machen, wenn du deren Effekt nichteinmal vernünftig messen kannst?
Was ich damit sagen will: Hab keine Angst vor ineffizienten Lösungen, wenn du weißt, dass du an dieser Stelle schlichtweg keine effiziente Benötigst.
Lieber dumm fragen, als dumm bleiben!

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

7

16.10.2012, 22:52

Ich habe auch mal einen automatischen Updater geschrieben, der ein Zip-Archiv downloaden, entpacken und an den Zielspeicherort kopieren kann. Falls Interesse besteht kann ich den Quellcode hochladen. (Aber Achtung: Zum Testen verwendete ich damals C++/CLI in seiner hässlichsten Form.)

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

17.10.2012, 15:25

Du könntest auch den Hash Wert der vorhandenen Datei(en) einfach mit dem aktuellstem vom Server vergleichen.

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

9

17.10.2012, 17:19

Ich habe auch mal einen automatischen Updater geschrieben, der ein Zip-Archiv downloaden, entpacken und an den Zielspeicherort kopieren kann. Falls Interesse besteht kann ich den Quellcode hochladen.
So etwas wäre aber nicht nötig, wenn er das "Visual Studio" benutzt, da kann man doch nach einem Klick auf Veröffentlichen einfach auf "Anwendung soll automatisch nach Updates suchen" klicken und dann den zu durchsuchenden Pfad angeben.
Kenn mich damit aber nicht aus, habs nur schon ein paar mal gelesen und die Funktion scheint sich ja beim Lesen im Programm selbst erklärt zu haben :rolleyes:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

17.10.2012, 17:20

@Kugelschieber: Das würde ich nicht machen. Da weiß man dann nicht, ob die Version auf dem Server neuer oder älter ist. Manchmal gibt es ja auch inoffizielle Pre-Releases. Dann lieber gleich Versions-Nummern prüfen. Mit Hashes kommt man ganz schnell in Teufels Küche.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige