SyncHTTP - Synchrone HTTP Kommunikation

  • SyncHTTP


    SyncHTTP ist ein neues Plugin von mir, welches nur eine einzige Funktion bereit stellt.
    Dieses Plugin kann genutzt werden um synchrone HTTP Anfragen zu versenden. Im Gegensatz zu der asynchronen HTTP Funktion von SA:MP wartet SyncHTTP auf die Antwort und gibt sie zurück.
    Dieses vereinfacht und erleichtert das Scripting von bestimmten Funktionen enorm!


    Mögliche Einsatzgebiete

    • Kommunikation mit Control Panel
    • Auslesen einfacher Daten von Drittanbietern, wie zum Beispiel Wetterinformationen
    • Prüfen ob ein Server online ist


    Geschrieben habe ich das Plugin eigentlich nur, um WBB_Connect 3 entwickeln zu können. Die neue WBB_Connect API arbeitet zusammen mit diesem Plugin sehr schnell und zuverlässig.


    Funktion
    native SynchronizedHTTP ( URL[ ] , Data[ ] , const Result[] , Length , Method = HTTP_POST , Timeout = 5 , EnableDebug = false );
    Parameter:
    [table=3][*]Parameter[*]Typ[*]Beschreibung
    [*]URL[*]string[*]Die Adresse, die aufgerufen werden soll. (ohne http://)
    [*]Data[*]Typ[*]Die Daten, die an den Server gesendet werden sollen als normaler GET oder POST string. (Informationen)
    [*]Result[*]ref string[*]Der String, der die Rückgabe - also den Inhalt der Seite - enthalten soll.
    [*]Length[*]int[*]Die Länge des Strings, der die Rückgabe enthalten soll.
    [*]Method[*]int[*]Die Methode, die zur Argumentenübertragung verwendet werden soll. Möglich sind HTTP_GET und HTTP_POST. Dieser Parameter ist optional.
    [*]Timeout[*]int[*]Die Zeit in Sekunden, die eine Anfrage maximal benötigen darf, bevor sie abgebrochen wird. Dieser Parameter ist optional.
    [*]EnableDebug[*]bool[*]Aktiviert oder deaktiviert den intigrierten Debug-Modus. Dieser ist nützlich um Fehler zu finden und die Zeit einer Anfrage zu messen. Dieser Parameter ist optional.[/table]
    Rückgabe:
    Den HTTP-Statuscode der Anfrage als Zahl.


    Verwendungsbeispiel

    new Webseite[2000];
    new HTTP_Status = SynchronizedHTTP("www.example.com", "", Webseite, sizeof Webseite, HTTP_GET);
    if(HTTP_Status == 200)
    {
    printf("Die Seite wurde erfolgreich geladen.\nInhalt: %s", Webseite);
    }
    else
    {
    print("Die Seite konnte nicht geladen werden.");
    }


    Hinweis
    DIe synchronen HTTP Anfragen sollten nur sehr kleine Inhalte von Webseiten abfragen. In der Zeit, in der die Funktion ausgeführt wird, kann der SA:MP Server keine anderen Operationen bearbeiten. Je größer der Inhalt ist, desto länger kann das Laden dauern.
    Aber keine Angst, kleine Rückgaben, wie zum Beispiel bei der WBB_Connect API dauern nur einen Bruchteil einer Sekunde.


    Installation
    Windows:

    • Lade dir die Datei SyncHTTP_WIN.zip herunter
    • Entpacke die Datei
    • Kopiere die Datei "SyncHTTP.dll" in den Ordner "plugins" deines SA:MP Servers
    • Kopiere die anderen beiden Dateien ("zlib1.dll" und "libcurl.dll") in den Hauptordner deines Servers. (Dort wo sich die "samp-server.exe" befindet)
    • Zum Schluss musst du nur noch das Plugin in deiner server.cfg eintragen und schon können die Funktionen der Include "sync_http.inc" genutzt werden

    Linux:

    • Lade dir die Datei SyncHTTP_LINUX.zip herunter
    • Entpacke die Datei
    • Kopiere die Datei "SyncHTTP.so" in den Ordner "plugins" deines SA:MP Servers
    • Gehe sicher, dass curl installiert ist. Im Normalfall ist curl schon vorinstalliert. Beipsiel um curl zu installieren: "sudo apt-get install curl".
    • Zum Schluss musst du nur noch das Plugin in deiner server.cfg eintragen und schon können die Funktionen der Include "sync_http.inc" genutzt werden

    Download

    Quellcode

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

    Einmal editiert, zuletzt von |-|auke () aus folgendem Grund: Rechtschreibfehler

  • Dieses vereinfacht und erleichtert das Scripting von bestimmten Funktionen enorm!


    In wiefern vereinfacht es das Scripting?


    Ist das nicht eher eine sehr Subjektive Einschätzung?


    Für mich ist es eher einfacher das asyncron über ein Callback laufen zu lassen.
    Wo ist also der genaue Vorteil?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • @NicoWiss:
    Wenn du die HTTP Funktion von SA:MP nutzt, dann erhälst du die Antwort erst in einem Callback - also in einer anderen Funktion, welche asynchron aufgerufen wird. Das heißt du kannst mit den Daten nicht in einem Ablauf arbeiten.
    SyncHTTP kann dir die Rückgabe direkt in deinem Programmablauf geben.


    @BlackAce:
    Das ist weniger Subjektiv als Situationsbedingt. Wenn man auf eine kleine Rückgabe angewiesen bist (z.B. 256 bytes), dann ist es einfacher, wenn man die Daten in einem Ablauf verarbeiten kann. Daher ist diese Funktion auch kein Ersatz oder Alternative zu der asynchronen Funktion, die es bereits gibt.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Mal wieder ein Top Plugin, nur verstehe ich nicht ganz wieso du alles direkt Kostenlos abgibst es ist doch viel Zeit für so eine Arbeit.

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • Dieses Plugin bietet eine nützliche Funktion, die anderen beim Scripten helfen soll. Das ist für die Community, nicht für mein Portemonnaie. :)

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Der Server hängt sich dann 5 Sekunden auf, wenn die HTTP URL nicht erreichbar bzw. offline ist, weil er auf einen Rückgabewert wartet, richtig?
    Das ist das gleiche Probleme, wie bei den alten MySQL Plugins.

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • Atrox : richtig, aber das ist kein Problem, sondern genau das, was die Funktion machen soll. Ob der Server erreichbar ist kann man vorher mit der asynchronen Funktion testen oder den Timeout verringern.


    @NicoWiss: Du kannst alle Parameter mit einem & verbinden. Du kannst dir das in der neuen WBB_Connect include abgucken :)

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Der Server hängt sich dann 5 Sekunden auf, wenn die HTTP URL nicht erreichbar bzw. offline ist, weil er auf einen Rückgabewert wartet, richtig?


    Plugins laufen aber in einem eigenen Thread, von daher ist da kein Problem ^^

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Atrox : richtig, aber das ist kein Problem, sondern genau das, was die Funktion machen soll. Ob der Server erreichbar ist kann man vorher mit der asynchronen Funktion testen oder den Timeout verringern.


    @NicoWiss: Du kannst alle Parameter mit einem & verbinden. Du kannst dir das in der neuen WBB_Connect include abgucken :)


    Wo find ich die

  • So in etwa:

    new Result[32];
    new HTTP_Status = SynchronizedHTTP("www.nicowiss.de", "email=nicowiss@xyz.de&benutzername=NicoWiss", Result, sizeof Result, HTTP_GET);
    if(HTTP_Status == 200)
    {
    printf("Erfolgreich! %s", Result);
    }
    else
    {
    printf("Fehler %d", HTTP_Status);
    }

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Bei mir wird der Text so ausgegeben: (ä) ö und wenn ich ä mache steht im Dialog ä...
    Und \n wird auch ignoriert. Weiß jemand eine Möglichkeit?
    /edit: Das mit den Absätzen ist jetzt geklärt, nur das mit den Umlauten nicht. :wacko:
    |-|auke :

    Einmal editiert, zuletzt von [GDM] John ()


  • new status_code = 0, website[500];
    status_code = SynchronizedHTTP("http://test.xxxxxx.de/index.php/LoginServer/", "username=hzuggugi8&password=iohgiutg98&api=hhhh", website, sizeof website, HTTP_POST);// <- anpassen POST/GET
    if(status_code != 200) {
    // Error
    printf("Fehler: %s", website);
    return 0;
    }
    return 1;


    Der String "website" erhält dann die Rückgabe des Links.