Zaključano

[Include] Koristite PHP u PAWN-u

pre 10 godina
1,575
pregleda
8
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Marjan_King
Kingpin
pre 10 godina

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 posaljete
url[] - URL query (bez "http://")
data[] - sve poruke i podaci koji ce biti poslati na zahtev
callback[] - 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                    1
HTTP_ERROR_NO_SOCKET                  2
HTTP_ERROR_CANT_CONNECT              3
HTTP_ERROR_CANT_WRITE                  4
HTTP_ERROR_CONTENT_TOO_BIG        5
HTTP_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




Ovo je radni kod sa kojim zelim da dobijem broj primljenih/poslatih poruka odredjenom korisniku.
new parameters, switch_case = "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_CODE)
{
    $caseQuery = mysql_real_escape_string($_POST);
    if(!empty($caseQuery))
    {
        switch($_POST)
        {
            case "inputAndOutputMessages":
                // Ovde sta zelimo da uradimo.
            die;
            break;
        }
    } else {
        echo 'Error.';
    }
   
} else {
    echo('Pogresan sigurnosni kod!');
}




a_php.inc
#include 

#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¶meters=%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;
}


PedjaZakon
Godfather
pre 10 godina
veoma korisna i dobra fora 🙂 svaka cas
Vuzimir
Kingpin
pre 10 godina
Ljepo odradjeno, pohvale 🙂
Rax_King
Godfather
pre 10 godina
HTTP je spor, ali oke je ovo 😄
Damjan_Nole
Enforcer
pre 10 godina
Vrlo korisno hehe 🙂
Marjan_King
Kingpin
pre 10 godina
MG | RaKee wrote on September 24, 2015, 9:24 am:
HTTP je spor, ali oke je ovo 😄

Jeste malo sporiji, ali za ovu namenu je to sasvim okej.
Ostali, hvala. 🙂
EuroGaming
Underboss
pre 10 godina
Dobro odradjeno,pohvala 😄
LeooStoimenov
Wheel Man
pre 10 godina
dobro je odradeno pohvale

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava