HTTP zur Überprüfung von Updates

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • N'abend zusammen,


    Dieses Tutorial befasst sich mit der neuen HTTP Funktion, die seit Samp 0.3b verfügbar ist.
    Ich werde hier allerdings nur auf den Typ HTTP_GET eingehen !


    Dieses Tutorial ist vor allem für Anbieter von Filterscripts, die ihre Anwender sofort über Updates informieren möchten.
    Aber zunächst müsst ihr sicherstellen, dass ihr die Serverdateien der Version Samp 0.3b habt. Desweiteren muss jeder Anwender eures Produkts die neuste Sampversion besitzen.


    Wenn diese Anforderungen erfüllt sind kanns auch schon losgehen :



    // Unter #include <a_samp> fügen wir folgendes ein :
    #include <a_http>
    // Dieses Include ist dafür da, damit ihr die HTTP Funktion verwenden könnt.
    // ===================================================================
    // Bevor wir überhaupt nach Updates ausschau halten können, müssen wir diesem
    // Script eine Versionsnummer geben
    #define Version "0.1"
    // In diesem Beispiel wäre das 0.1


    Wenn ihr nun ein Update veröffentlicht, müsst ihr wie folgt vorgehen :
    Ihr erstellt auf eurem Desktop eine neue Text-Datei : version.txt.
    Diese öffnet ihr mit dem Editor und fügt eure neue Versionsnummer ein ( In meinem Beispiel 0.2).
    Nun müsst ihr diese Datei hochladen. Für alle die keinen eigenen Root/V-server haben, gibt es natürlich auch eine Lösung.
    Auf der Seite http://www.autohotkey.net könnt ihr die Datei hochladen. (Bevor Fragen aufkommen : Ich habe früher mit AHK gescriptet, daher kenne ich die Seite.
    Ihr könnt die Datei natürlich auch woanders hochladen. Dies ist nur eine Möglichkeit).


    So, jetzt gehts an die HTTP Funktion :

    HTTP(index, type, url[], data[], callback[])
    //index : Die ID der Anfrage (Nur wichtig, wenn man mehrere HTTP-Anfragen auf ein Callback richtet)
    //type : Typ der Anfrage (In unserem Fall HTTP_GET)
    // url[] : Die URL von der die Daten geladen werden sollen (ohne http:// davor)
    // data[] : Daten, die mit der Anfrage mitgesendet werden sollen (In unserem Fall wird dies nicht benötigt,
    // da wir nichts versenden, sondern nur Daten abrufen)
    // callback[] : An dieses Callback wird das Ergebniss der Anfrage gesendet



    // So sieht mein HTTP-Befehl aus :
    HTTP(1,HTTP_GET,"www.autohotkey.net/~Snail/version.txt","","Updatetest");

    Ihr müsst bei eurem Befehl lediglich die URL ändern.
    Es gibt verschiedene Möglichkeiten, diesen Befehl auszuführen. Ihr könnt es z.B. unter OnFilterScriptInit() einfügen.
    Dann wird allerdings nur beim Laden des Filterscripts nach Updates überprüft.
    Meine Empfehlung : ein Timer der alle 24 Stunden nach Updates sucht. Wie man einen Timer erstellt erkläre ich jetzt aber nicht, dazu gibt es andere Tutorials.


    Wie euch wahrscheinlich schon aufgefallen ist, wird meine HTTP-Anfrage an das Public Updatetest gesendet. Dieses sieht folgendermaßen aus :



    forward Updatetest(index, response_code, data[]);
    public Updatetest(index, response_code, data[])
    {
    if(response_code == 200) //Response_Code 200 bedeuted, dass die Anfrage erfolgreich war (s. Wiki)
    {
    if(strcmp(data,Version, false)) // Hier wird nun das Ergebniss der Anfrage mit der Version dieses Scripts verglichen.
    {
    // Falls diese Ungleich sind kommt folgendes :
    printf("Ein neues Update ist verfügbar (Version %s).",data);
    // Ihr könnt natürlich auch SendClientMessage oder ähnliches machen
    }
    }
    return 1;
    }

    Bei Fragen/Problemen einfach hier posten.


    Gruß Snail



    PS : Über eine Bewertung würde ich mich freuen :)


    //Edit : Tut mir Leid wegen Einrücken, aber dieser Editor hat alles kaputt gemacht -_-


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • Klein aber Fein :D!


    Gut erklärt die neue Funktion ;) ich denke mal jemand der POST von html / php kennt, weiß dann bestimmt auch wie er mit POST umzugehen hat, oder mit HEAD :>


    10/10 finds wirklich gut.

  • Danke sehr, allerdings arbeite ich derzeit viel an meinem Gamemode und hab daher nicht ganz so viel Zeit.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • Beim Typ HTTP_GET bleibt das leer.
    Wenn du HTTP_POST verwendest kannst du so Daten versenden.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Danke für die positiven Rückmeldungen.
    Mit diesem Tutorial könnt ihr übrigens auch euren Gamemode schützen. Dies geht wie folgt :
    Ihr erstellt eine .txt Datei und schreibt

    Code
    ein

    rein.
    Dann ladet ihr diese Datei hoch. Nun fragt ihr wie oben erklärt mit HTTP_GET ab, ob in der Datei "ein" steht :
    HTTP(1,HTTP_GET,"www.beispiel.de/eure.txt","","Publicname"); // URL durch euren Link ersetzten
    // Die HTTP-Abfrage unter OnGameModeInit, sowie mit einem Timer alle 24 Stunden wiederholen
    // =====================================================


    forward Publicname(index, response_code, data[]);
    public Publicname(index, response_code, data[])
    {
    if(response_code == 200)
    {
    if(strcmp(data,"ein", false))
    {
    print("Der Server wird heruntergefahren.");
    OnGameModeExit();
    }
    }
    else
    {
    print("Der Server wird heruntergefahren.");
    OnGameModeExit();
    }
    return 1;
    }


    kurze Erklärung zum Code :
    Ihr erstellt eine Datei auf einem Server mit Inhalt "ein".
    Dann wird bei OnGameModeInit sowie alle 24 h überprüft, ob "ein" in dieser Datei steht.
    Sollte dies nicht der Fall sein, fährt der Server runter.
    Wenn ihr dazu noch den Anti-De-Amx Code einfügt, kann man weder euren Code entschlüsseln, noch die .amx verweden.
    Denn ihr könnt jederzeit die .txt löschen um den Server abzuschalten.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • HTTP_GET ist ja schön und gut, jedoch blicke ich bei HTTP_POST nicht so ganz durch.
    Ich denke mal, das man damit Werte an eine Variable in einer .php Datei weitergeben kann.
    So könnte man ein komplett neues Account System machen.

  • Nicht unbedingt, denn meines Wissens nach ist HTTP_POST keine sichere Datenübertragung.
    Zumindest hab ich das im Englischen Forum gelesen.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------