[Include] Koristite PHP u PAWN-u


Započeo []Flynâ„¢, Septembar 24, 2015, 00:18:47 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

[]Flynâ„¢

*

Never look down on anybody unless you're helping them up.



PHP u PAWN-u



Skoro sam se suocio sa problemom multi-threaded zahteva u pisanoj formi sistema za razmenu poruka za svoj projekat. Sustina problema je da upravo izracuna broj dolaznih i odlaznih poruka od odredjenog korisnika. Dakle, sve u principu moze, ali bi morali za svaki zahtev da kreirate poseban Public, zato je tu multi-threaded. To izgleda sve  redu, dva zahteva = dva Publica, nije to pogresno, to je samo prljavstina od koda.


Resenje:



Zapravo, nalazio sam na internetu gomilu korisnih stvari, medjutim, nisu odgovarali mojim potrebama. Ubrzo nakon malo guglanja, odlucio sam da ostanem u dobrim funkcijama kao sto su HTTP();.



Funkcija parametri
(index, type, url[], data[], callback[])index - ID (playerid, giveplayerid)type - tip zahteva koji zelite da posaljeteurl[] - URL query (bez "http://")data[] - sve poruke i podaci koji ce biti poslati na zahtevcallback[] - ime callback funkcije, ako zelite da koristite za obradu odgovara na zahtev.  ?>




Vrste upita (type):
HTTP_GET - Salje zahtev na HTTP.HTTP_POST - Salje zahtev podacima (data).HTTP_HEAD - Salje zahteve na HTTP, ali ignorise sve odgovore u podacima(data).  ?>




Response codes:
HTTP_ERROR_BAD_HOST                     1HTTP_ERROR_NO_SOCKET                   2HTTP_ERROR_CANT_CONNECT              3HTTP_ERROR_CANT_WRITE                  4HTTP_ERROR_CONTENT_TOO_BIG         5HTTP_ERROR_MALFORMED_RESPONSE   6?>




Standardni Response codes:
HTTP 404 (stranica nije pronadjena), 500 (server error) ili 403 (forbidden).?>


Dalje o opisu i primerima funkcije necu ici. Kome treba -> Google u ruke i search.



Koriscenje funkije u praksi
U mom slucaju HTTP interakciju sa PHP fajlom na serveru koja salje specijalni zahtev i prima kodiran(ako je potrebno) odgovor, koji se kasnije desifruje, i zatim koristi po potrebi.


Primer:
/* Na vrh moda */
#define PHP_FILE_LOCATION "adresa/ime.php" //Web adresa ( putanja ) do vaseg PHP fajla ( bez http:// )
#define SECURITY_CODE "12345" // Sigurnosni kod. Koristi se za sprecavanje neovlascenog pristupa php fajlu.
#include <a_php>




Ovo je radni kod sa kojim zelim da dobijem broj primljenih/poslatih poruka odredjenom korisniku.
new parameters[24], switch_case[24] = "inputAndOutputMessages";
format(parameters, sizeof(parameters), "%s", getName(playerid));
RunMySQLQuerySwitch(100, switch_case, parameters); // Posaljite zahtev




PHP fajl


define('SECURITY_CODE', 'Ovo je sigurnosni kod koji se mora poklapati sa onim iz PAWNa.');
if($_POST[security] == SECURITY_CODE)
{
    $caseQuery = mysql_real_escape_string($_POST[switch_case]);
    if(!empty($caseQuery))
    {
        switch($_POST[switch_case])
        {
            case "inputAndOutputMessages":
                // Ovde sta zelimo da uradimo.
            die;
            break;
        }
    } else {
        echo 'Error.';
    }
    
} else {
    echo('Pogresan sigurnosni kod!');
}




[INC] a_php.inc
#include <a_http>
 
#define MAX_PHP_LENGTH 256
 
forward OnServerTryingToRunPHP(index, response_code, data[]);
forward OnScriptResponse(scriptid, contents[]);
 
stock RunMySQLQuerySwitch(scriptid, const switch_case[], const parameters[])
{
        new string[MAX_PHP_LENGTH+5];
        format(string, sizeof(string), "switch_case=%s&parameters=%s&security="SECURITY_CODE, switch_case, parameters);
        HTTP(scriptid, HTTP_POST, PHP_FILE_LOCATION, string, "OnServerTryingToRunPHP");
}
 
public OnServerTryingToRunPHP(index, response_code, data[])
{
        if(response_code != 200)
        {
                printf("Greska: %d, pokusava da sastavi PHP na spoljnom serveru.", response_code);
                return 0;
        }
        CallLocalFunction("OnScriptResponse", "ds", index, data); // Povratak kod odgovora u PAWNu
        return 1;
}




Obrada server response-a
public OnScriptResponse(scriptid, contents[])
{
    if(scriptid == 100) // Navedite sta da radi sa odredjenim upitom ID
        // Ovde akcija
            // Ako zelite, mozete nositi zahteve pristigle iz kodiranja
    return 1;
}



veoma korisna i dobra fora :) svaka cas

i am king!

Ljepo odradjeno, pohvale :)

My Bike KTM 450 SXF 2008


Vrlo korisno hehe :)
✨ Story Life - NOVI IP: 51.195.126.176:7777 !✨
https://www.youtube.com/watch?v=MbZzh-HmtY8
Story Life RPG - priča koja traje od davne 2016. 🔥
Server koji svaki dan broji preko 50+ igrača InGame i sa preko 4000 registriranih članova na forumu 📌
Server posjeduje Launcher sa optimiziranim modovima koji će vam maksimalno uljepšati doživljaj na SA:MP serveru 🎮
Svakodnevni eventi (HotPursuit, DM Event, TourSL, KOTH, Masakr...) te specijalni eventi i nagrade svaki vikend u večernjim satima ‼️
Uz mnogobrojne pogodnosti, na serveru će biti upaljen .HappyHours te HappyJob na nekim od poslova 😁.
📡 51.195.126.176:7777
🌐 www.sl-rpg.info
🎧 / discord
🎥 / storylifecommunity
🌟 Pridruži se i postani dio najbolje zajednice! !🌟

[]Flynâ„¢

*

Never look down on anybody unless you're helping them up.

Citat: MG | RaKee poslato Septembar 24, 2015, 11:24:49 PRE PODNE
HTTP je spor, ali oke je ovo :D
Jeste malo sporiji, ali za ovu namenu je to sasvim okej.
Ostali, hvala. :)
Poslednja Izmena: Septembar 24, 2015, 17:50:16 POSLE PODNE od []MaKiâ„¢



Forum za San Andreas Multiplayer i open.mp modifikaciju

Dobrodošli na najdugovječniji i najutjecajniji Balkan SAMP forum – mjesto okupljanja igrača, developera i server vlasnika još od 2009. godine. Naša zajednica prati evoluciju SAMP-a od njegovih ranih dana pa sve do modernih open.mp rješenja, pružajući podršku, tutorijale, modifikacije, server reklame, tehničku pomoć i mjesto za diskusiju o svemu vezanom za multiplayer svijet GTA: San Andreas. Bez obzira jeste li početnik ili veteran, ovdje ćete pronaći sve što vam treba za razvoj i uživanje u SAMP sceni.