Jump to content

návod MySQL Registrácia [****]


Recommended Posts

XS7b.png

OBSAH
   Obtiažnosť
   Predslov
   Úvod
   Obsah 
   Záver

 

Funkční pouze do verze 39

Tento návod je aktuální pouze do verze 39. Na aktualizaci návodu se pracuje.

 
Obtiažnosť
4.png

Predslov
  Vážení čitatelia.
  Už dlhšie som si všímam, ako sa všetci neustále delíte, na viac táborov, a pritom, máte celý čas, ten vysnení, ukladací

  systém, podnosom.
  V konečnom dôsledku, aj chápem, prečo málo kto skočí, po MySQL databáze. Jednak, sa musíte učiť nový jazyk, SQL,
  a na stránke druhej, nikto nenapísal, žiadny komplexný návod.
  Samozrejme, že niekto môže podotknúť „Ale v roku 2011 napísal jeden mladí junák ...“ áno, máte pravdu, niečo
  podobné návodu, na MySQL ukladací systém, som tu videl, ale za ten čas, sa toho veľa zmenilo. Neskôr to zistí, aj
  náš miestni spochybňovač.
Úvod
  Tak, ak si prežil môj predslov, môžeme pokračovať ďalej, v návode. Ako prvé, budete potrebovať prístup, k vašej
  databáze. Ja osobne, používam na tvorbu tabuliek, phpMyAdmin. Ak ste skúsenejší, môžete to robiť aj manuálne, cez
  konzolu. Ďalej budete potrebovať MySQL plugin, a includ. Všetko potrebné, samozrejme prikladám, na konci tohto
  návodu, spolu, s návodom, na jazyk SQL. Jazyk SQL, budete potrebovať, pri rozsiahlom využití, pluginu. Tiež chcem
  podotknúť, že tento návod, počíta že ovládate jednotlivé datatypy, a samotný jazyk SQL.
 
Príprava
  tcrU.pngAk ovládate phpMyAdmin prosím prejdite na ďalší bod.
 
  V príprave, vás naučím, ako vytvoriť databázu, a samotnú tabuľku, ktorá bude slúžiť, na ukladanie, a čítanie vašich dát.
  Samotní systém, sa bude skladať z atribútov, ktoré, budú mať v sebe isté informácie. Ako napríklad Meno hráča. Tak 
  tiež, jeden z atribútov, musí byť kľúč, teda atribút, ktorý, je nemenný. V tomto návode, to bude, naša vytvorená,
  premenná ID.
  
 
  Po prihlásení do systému môžte vidieť následovné menu. Kde kliknete v hornej lište na ikonku databázy. 
 

yCBR.png

 
  Po kliknutí, sa nám zobrazí žiadosť, na vytvorenie databázy. Do prázdnej kolonky, napíšeme “Database“. Tím pádom, sa 
  bude naša databáza, volať Database. Potom, kliknite na “vytvoriť“.
 

SZIb.png

 
  Teraz, sa nám vytvorila naša databáza. Ďalší krok, bude vytvoriť tabuľku, a následne do nej vložiť naše atribúty. 
  Pre editáciu databázy, musíte kliknúť na ikonku, v ľavej lište, s názvom našej databázy, ktorú sme vytvorili “Database“.
  Následne, sa nám zobrazí menu, na vytvorenie spomínanej tabuľky. Do prázdnej kolonky, napíšeme názov našej tabuľky,
  s ktorou budeme neskôr pracovať. My si tam napíšeme “account“. 
  Vedľa našej “account“ kolonky, máme ešte tzv. “počet polí“. Počet polí, značí, že koľko atribútov, budeme používať. My 
  osobne, budeme ukladať, 12 atribútov. Tím pádom, si zmeňte default 4, na 12. Následne, kliknite na vykonaj.
 
 

jEpn.png

 
  Naša tabuľka, je teraz vytvorená. Teraz stačí, do nej vložiť, naše atribúty. V tomto kroku, nesmieme zabudnúť, na
  funkciu A_I. Vďaka tejto funkcií sa za každým novým záznamom pripočíta hodnota od poslednej hodnoty. 
 

 RA6O.png

 
  Gratulujem. Vaša databáza s tabuľkami, je vytvorená. Sami musíte uznať, že to nebolo nič ťažké. Dúfam, že sa rovnako
  tešíte aj na ďalší krok. 
 
Obsah
  Vítam vás, v ďalšom bode, kde vás naučím, ako vytvoriť jednoduchú registráciu, pomocou MySQL pluginu. 
  Opäť, vás chcem informovať, že bude potrebné, vedieť aspoň základy jazyka SQL! Ak, tieto znalosti nemáte, prosím
  prejdite, na bod, Záver. 
 
  Špecifikácia
    Ako aj iné pluginy, ako SSCANF 2, používa aj MySQL plugin, isté špecifikácie na používanie. 
    

Špecifikátor          Meno  
    e                 dostanete reťazec naraz. Nemusíte používať, mysql_real_escape_string().
    s                 String
    q                 Rovnaké ako %s. Pridané v SA:MP 0.3.7 R2
  d | i               Integer
    f                 Float
    x                 Hex
    b                 Binar

 
  Ako prvé, je potrebné, si stiahnuť plugin, aj s includom. Ten môžte stiahnuť, rolovaním stránky, na bod záver, kde sú
  jednotlivé linky na download, alebo učebný materiál SQL. Po pridaní includu, si otvoríme editor, do ktorého si napíšeme,
  následovné kód. 

#include <a_samp>                           
#include <a_mysql>                          

#define MYSQL_DB     "Your_Database"    
#define MYSQL_USER   "Name"          
#define MYSQL_PASS   "Pass" 
#define MYSQL_HOST   "IP"  

#define D_REG   0
#define D_LOG   1

native WP_Hash(buffer[], len, const str[]); 

 
  Definície 
    Najprv sme si zapísali použité include s ktorými budeme pracovať a to “<a_samp>“ a “<a_mysql>“.
    Potom sme vytvorili definície ktoré nám poslúžia ako skratka.  
   

    #define MYSQL_DB      - Meno databázy.
    #define MYSQL_USER  - Meno užívateľa phpMyAdmin.
    #define MYSQL_PASS  - Heslo užívateľa do phpMyAdmin.
    #define MYSQL_HOST - IP Serveru. Ak máte MySQL databázu, u seba na VPS, na ktorom vám beží aj server, použite local host ip “[/size]127.0.0.1“.[/size]
    #define D_REG             - Dialog ID Registrácie
    #define D_LOG             - Dialog ID Prihlásenia
     
     O hash hesla sa bude starať ďalší plugin ktorý by mal byť najbezpečnejší a to Whirlpool. 
     native WP_Hash(buffer[], len, const str[]);
    

// MySQL 
new 
    MySQL;

// REGISTER VARIABLE
new
    ID             [MAX_PLAYERS],
    Skin           [MAX_PLAYERS],
    Kill           [MAX_PLAYERS],
    Death          [MAX_PLAYERS],
    Admin          [MAX_PLAYERS],
    Wanted         [MAX_PLAYERS],
    Password       [MAX_PLAYERS],
    
    Float: PosX    [MAX_PLAYERS],
    Float: PosY    [MAX_PLAYERS],
    Float: PosZ    [MAX_PLAYERS],
    Float: PosR    [MAX_PLAYERS];

// CONTROL VARIABLE
new
    C_Login        [MAX_PLAYERS]; 

  Premenné
    Teraz sme si vytvorili premenné. s ktorými budeme ďalej pracovať. 
    MySQL    - slúži na rozpoznávanie databáze, a celkovo nám bude udržiavať, dátové pripojenie.

    C_Login  - Táto premenná, slúži na kontrolu, aby nám ukladanie nerobilo problémy, v prípade prihlásenia, a rázneho odhlásenia.

forward OnAccountLoad(playerid);
forward OnAccountCheck(playerid);
forward OnAccountRegister(playerid);

  Forward
    Teraz sme si vytvorili forwardy na naše public. 

public OnGameModeInit(){

    mysql_log(LOG_ERROR);
    
    MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);

    if(mysql_errno() != 0)  printf("[MySQL] Connect is not succesfull!"); 
    else                    printf("[MySQL] Connect is succesfull!"); 
    return true;
}

  OnGameModeInit
    mysql_log(LOG_ERROR); - Vďaka tejto funkcií, sa nam vytvorí, v prípade nejakej chyby, MySQL log, do ktorej sa daná chyba zapíše. 
    MySQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS); - tu sa jedná o samotné pripojenie na MySQL server. v prípade,
                                                                                                                                                   ak máte iný port, na MySQL databázu ako je bežné, je potrebné za MYSQL_PASS dopísať
                                                                                                                                                   váš port. 
     if(mysql_errno() != 0) - slúži na informáciu o úspešnom alebo neúspešnom pripojení. 

public OnPlayerConnect(playerid){
   
    C_Login        [playerid] =
 
    Kill           [playerid] =
    Death          [playerid] =
    Admin          [playerid] = 
    Wanted         [playerid] = 0;
    
    new 
        string[128];
    
    mysql_format(MySQL, string, sizeof(string), "SELECT `Password`, `ID` FROM `account` WHERE `UserName` = '%e' LIMIT 1", PlayerName(playerid)); 
    mysql_tquery(MySQL, string, "OnAccountCheck", "i", playerid); 
    return true;
}

  OnPlayerConnect
    V tomto public, nulujeme naše premenné, a následne deklarujeme naše dôležitejšie premenné. Tieto premenné sa budú používať v callback OnAccountCheck“.
   

public OnPlayerDisconnect(playerid, reason){
    if(C_Login[playerid]){
        new 
            string[255];
            
        GetPlayerPos(playerid, PosX[playerid],PosY[playerid],PosZ[playerid]); 
        
        mysql_format(MySQL, string, sizeof(string), 
        "UPDATE `account` SET `Wanted` = %d, `Skin` = %d, `Kill` = %d,\
        `Death` = %d,`Admin` = %d, `PosX` = %f, `PosY` = %f, `PosZ` = %f, `PosR` = %f WHERE `ID` = %d",
        Wanted[playerid],Skin[playerid],Kill[playerid],Death[playerid],
        Admin[playerid],PosX[playerid],PosY[playerid],PosZ[playerid],PosR[playerid],ID[playerid]); 
        
        mysql_tquery(MySQL, string, "", ""); 
    }
    return true;
}  

  OnPlayerDisconnect
    V tomto public, ukladáme, naše premenné. Najprv si deklarujeme naše premenné,  a potom aktualizujeme našu databázu, s novo získanímy údajamy.  V podstate to môže
    pripomínať ukladanie v file.inc. 

public OnPlayerRequestSpawn(playerid){
    if(C_Login[playerid]){
        SpawnPlayer         (playerid);
        SetPlayerSkin       (playerid, Skin[playerid]);
        SetPlayerPos        (playerid, PosX[playerid],PosY[playerid],PosZ[playerid]);
        SetPlayerFacingAngle(playerid, PosR[playerid]);
    }
    return false;
} 

  OnPlayerRequestSpawn
    Tu, nám kontroluje premenná C_Login[playerid], či je true, a ak áno, spawne nás na súradnice ktoré buď máme uložené, alebo po registrácií priradené. Tak tiež, nám nahrá uložení skin.       

public OnPlayerDeath(playerid, killerid, reason){
    if(killerid != INVALID_PLAYER_ID){
        Kill  [killerid]++;
        Death [playerid]++;
        Wanted[killerid]++;
    }
    return true;
}  

  OnPlayerDeath 
    V prípade, ak bol hráč zabití, pridá mu do premennej Death + 1, a hráčovi ktorý ho zabil, Kill + 1 a Wanted + 1. 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
    switch(dialogid){
        case D_REG:{
            if(response){ 
                if(strlen(inputtext) < 4) return ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, 
                    "Registration", 
                        "Please type your password. The range of password is  4 - 19.", 
                    "confirm", "close"); 
                new 
                    string[500]; 
                     
                WP_Hash(Password[playerid], 129, inputtext); 
                mysql_format(MySQL, string, sizeof(string), "INSERT INTO `account` (`UserName`, `Password`) VALUES ('%e', '%e')", PlayerName(playerid), Password[playerid]); 
                mysql_tquery(MySQL, string, "OnAccountRegister", "i", playerid); 
                C_Login[playerid] = 1;
            }
            else Kick(playerid);
        }
        case D_LOG:{
            if(response){  
                new 
                    string  [225],
                    hashpass[129];      
                WP_Hash(hashpass, sizeof(hashpass), inputtext); 
                if(!strcmp(hashpass, Password[playerid])){ 
                    mysql_format(MySQL, string, sizeof(string), "SELECT * FROM `account` WHERE `UserName` = '%e' LIMIT 1", PlayerName(playerid)); 
                    mysql_tquery(MySQL, string, "OnAccountLoad", "i", playerid); 
                    C_Login[playerid] = 1;
                } 
                else ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Login", "Please enter your password with which you registered on the server.", "confirm", "close"); 
            } 
            else Kick(playerid);
        }
    }
    return true;
}  

  OnDialogResponse
   Ako môžme vidieť máme tu dvoje dialógy ktoré sú switchované a to login a register.
      Register
        if(strlen(inputtext) < 4)                                      - Ak je string menší ako 4, hráčovi znovu načitá dialóg. 
        WP_Hash(Password[playerid], 129, inputtext); - Whirlpool plugin nám zahashuje heslo. 
        Následne uložíme a voláme callback OnAccountCheck
     Login 
       WP_Hash(hashpass, sizeof(hashpass), inputtext);   - Hashujeme inputtext. 
         if(!strcmp(hashpass, Password[playerid]))               - Porovnanie uloženého hesla a inputtextu. 

        Na koniec voláme public z ktorého sa nám nahrajú údaje. 

public 
    OnAccountCheck(playerid){
        new 
            rows, fields; 

        cache_get_data(rows, fields, MySQL); 
         
        if(rows){ 
            cache_get_field_content(0, "Password", Password[playerid], MySQL, 129); 
            ID[playerid] = cache_get_field_content_int(0, "ID"); 
            
            ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, 
            "Login", 
                "Please enter your password with which you registered on the server.", 
            "confirm", "close");  
        } 
        else ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, 
            "Registration", 
                "Please type your password. The range of password is  4 - 19.", 
            "confirm", "close"); 
        return true;
    } 

  OnAccountCheck    
    Vytvorili sme si dve premenné, do ktorých, sa uložia parametre, z predošlého public OnPlayerConnect(playerid). 
    Ak premenná rows nebude nula, tak načíta hodnotu password, a priradí ju k premennej password[playerid], potom priradí aj hodnotu ID[playerid]. A podla tejto hodnoty premennej rows, sa rozhoduje ktorý dialog spustí. 

public 
    OnAccountLoad(playerid){ 
        Wanted         [playerid] = cache_get_field_content_int  (0, "Wanted");  
        Skin           [playerid] = cache_get_field_content_int  (0, "Skin"  ); 
        Kill           [playerid] = cache_get_field_content_int  (0, "Kill"  ); 
        Death          [playerid] = cache_get_field_content_int  (0, "Death" );  
        Admin          [playerid] = cache_get_field_content_int  (0, "Admin" );
        PosX           [playerid] = cache_get_field_content_float(0, "PosX"  );
        PosY           [playerid] = cache_get_field_content_float(0, "PosY"  );
        PosZ           [playerid] = cache_get_field_content_float(0, "PosZ"  ); 
        PosR           [playerid] = cache_get_field_content_float(0, "PosR"  ); 
        return true; 
    } 

  OnAccountLoad
    - Tento public, slúži, na nahratie hráčových údajov. Dosť podobné, INI systémom. 

public 
    OnAccountRegister(playerid){ 
        ID    [playerid] = cache_insert_id(); 
        PosX  [playerid] = 1682.7249;
        PosY  [playerid] = 1451.3008;
        PosZ  [playerid] =   10.7719;
        printf("[Registration] New account registered. Database ID: [%d]",ID[playerid]); 
        return true; 
    }  

  OnAccountRegister
    Toto spätné volanie, sa vyvolá po úspešnej registrácií, kde priradí, hráčovi default premenné, plus statický ID identifikátor. 

stock
    PlayerName(playerid){
        new
            name[MAX_PLAYER_NAME+1];
        GetPlayerName(playerid, name, sizeof(name));
        return name;
    } 

  PlayerName
    Nakoniec starý známy stock.
 
  
Záver
  Ako vidíte sami nie je to nič zložité. Jedná sa o veľmi skvelí ukladací systém ktorý vám odporúčam ako náhradu za všetky INI systémy. Celý tento návod je len zlomok toho čo daný plugin umožňuje.
  Dúfam, že vám môj návod pomohol.

 

  


Download MySQL & Whirlpool
H3Xh.png 0Czw.png
Download Code & SQL
H3Xh.png  H3Xh.png
Learn SQL
qQPL.png

Ověřený návod

Tento návod prošel validací, a lze ho proto považovat za ověřený.

  • Líbí se mi to! (+1) 4
Link to comment
Share on other sites

  • Globální moderátor

Ku pawn časti sa nejdem vyjadrovať, nie z dôvodu že by nebola dobrá ale z toho dôvodu že sa pawn nevenujem tak to neviem posúdiť. Čo sa týka MySQL časti máš tam menšiu chybu

Atribút, nastavíte ako kľúčový, zaškrtnutím políčka “A_I“

A_I neznamená že atribút bude kľúčový, znamená to že polu(v tomto prípade pole ID) sa každým novým záznamom pripočíta hodnota od poslednej.(Auto Increment -> preto skratka A_I) Ak teda napríklad máme tabuľku "paštéky" kde bude záznam "majka" s ID 1 a pridáme nový záznam "sandále" tak ID bude 2.

Link to comment
Share on other sites

Ku pawn časti sa nejdem vyjadrovať, nie z dôvodu že by nebola dobrá ale z toho dôvodu že sa pawn nevenujem tak to neviem posúdiť. Čo sa týka MySQL časti máš tam menšiu chybu

A_I neznamená že atribút bude kľúčový, znamená to že polu sa každým novým záznamom pripočíta hodnota od poslednej.(Auto Increment -> preto skratka A_I) Ak teda napríklad máme tabuľku "paštéky" kde bude záznam "majka" s ID 1 a pridáme nový záznam "sandále" tak ID bude 2.

Ou ha zle som to potom pochopil. Hneď to opravím.

Ďakujem za pomoc.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • Hlavní moderátor

Hodně užitečný návod, dobrá práce. Mám ještě dotaz:

 

 

`UserName` = '%e'

Proč %e a co vlastně je %e? Všiml jsem si, že jsi to použil všude, kam se měl dosadit string, je to tedy jakási náhrada za %s?

Link to comment
Share on other sites

Hodně užitečný návod, dobrá práce. Mám ještě dotaz:

 

 

Proč %e a co vlastně je %e? Všiml jsem si, že jsi to použil všude, kam se měl dosadit string, je to tedy jakási náhrada za %s?

Pridané špecifikácie.  ;)

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 1 year later...

Super tutoriál ale pri phpmyadmin som mal dosť dlho problém ktorý som konečne vyriešil,a to bolo že od wanted až po posR som nemal zadané NOT NULL DEFAULT '0' v phpmyadmin.Možno to je len zlou verziou phpmyadmin alebo tak niečo ale pre tých ktorý mali tiež tento problém,spravte si v phpmyadmin novú databázu -> account s 12 riadkami a tam kliknite na SQL a vložte tam toto a určite to pôjde.

CREATE TABLE `database`.`account`(
    `ID` INT(10) NOT NULL AUTO_INCREMENT,
    `UserName` CHAR(25) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL,
    `Password` CHAR(129) CHARACTER SET cp1250 COLLATE cp1250_general_ci NOT NULL,
    `Wanted` INT(5) NOT NULL DEFAULT '0',
    `Skin` SMALLINT(3) NOT NULL DEFAULT '0',
    `Kill` INT(10) NOT NULL DEFAULT '0',
    `Death` INT(10) NOT NULL DEFAULT '0',
    `Admin` TINYINT(1) NOT NULL DEFAULT '0',
    `PosX` FLOAT NOT NULL DEFAULT '0',
    `PosY` FLOAT NOT NULL DEFAULT '0',
    `PosZ` FLOAT NOT NULL DEFAULT '0',
    `PosR` FLOAT NOT NULL DEFAULT '0',
    PRIMARY KEY(`ID`)
) ENGINE = InnoDB;
Edited by rkz
Link to comment
Share on other sites

  • 3 months later...

Ahoj, jsem z toho docela jalovej, zkusil jsem několik verzí a ani jedna ne a ne fungovat. Vůbec nevím jak nastavit server na pluginy a hlavně jaký pluginy stáhnout natož kde je stáhnout. Když dám do složky plugins soubor mysql.dll konzole vypíše že plugin: mysql failed nerozumim tomu.

 

Dokáže mi prosím někdo poradit jak to zprovoznit od A do Z, krom vytvoření databáze. Mám linux server, ale testy dělám v localu na windows...

 

Díky za případnou pomoc

Link to comment
Share on other sites

Pridaj Salt!!!

 

Uplne najlepsie by bolo vobec nepouzivat Whirlpool plugin, ale pouzit funkciu SHA256_PassHash(), ktora je vstavana priamo v samp a bere salt ako parameter. Hash bez saltu nieje vobec bezpecny [1, 2].

Taktiez vdaka tomu nebudes musiet pouzivat dalsi plugin.

Edited by xhunterx
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Oka, pozdějš večer už sem to zprovoznil ale pouze na linuxu, ve windows se mysql plugin vubec nechytil nevim proč a celkem mi to vadí protože testovat věci tím že musí člověk nahrát soubor na linux server potom přes putty resetovat, prostě zbytečná práce, sice zabere cca minutu ale pokud to má člověk dělat byť 30x má půl hodiny v trapu xD Nehledě na to že se ten server nedá použít jako veřejnej :(

 

Jinak jak píšeš, o tenhle kod mi nešlo je to na verzi 39, používám 41-2 kde sha256 zrovna přidělávám.

Edited by HippeCZE
Link to comment
Share on other sites

Co se tyce vytvoreni databaze mysql tak preferuju mysql workbench. Je to dost user friendly, a kdyz dela clovek slozitejsi databazi, kde ma maji tabulky napr cizi klice. Tak se to v tom dobre orientuje. A hlavne ti to vygeneruje sql prikazy na vytvoreni te databaze s tabulkama a jen to v php my adminovi nahrajes.

Ale nez clovek zacne s databazi, tak by jsi mel nejdrive nacist, kdy je dobre ji pouzivat atp... Databaze ma super rychle vyhledavaji a join tabulek sorteni atp.... Ale na zapis je to furt pomale. Takze pouzivat s rozumem. (Kdyz vidim ty pripady, ktery si do ty DB cpou uplne vsechno).

Ono se to pouziva hodne na webech, kde te rychlost tak moc netrapi. Ale kdyz to pak pluginem pustis na sa-mp co jede na jednom vlakne :d Ja spis preferuju HTTP requesty a nakomunikaci s databazi, a tu databzi pustim na jinym vlakne, nebo nejlepe na jinym stroji :d

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

On 26. 3. 2018 at 18:14, ATomas said:

Ale nez clovek zacne s databazi, tak by jsi mel nejdrive nacist, kdy je dobre ji pouzivat atp... Databaze ma super rychle vyhledavaji a join tabulek sorteni atp.... Ale na zapis je to furt pomale. Takze pouzivat s rozumem. (Kdyz vidim ty pripady, ktery si do ty DB cpou uplne vsechno).

Ono se to pouziva hodne na webech, kde te rychlost tak moc netrapi. Ale kdyz to pak pluginem pustis na sa-mp co jede na jednom vlakne :d Ja spis preferuju HTTP requesty a nakomunikaci s databazi, a tu databzi pustim na jinym vlakne, nebo nejlepe na jinym stroji :d

J, ono by to mozno chcelo si uvedomit, ze to 't' v tom mysql_tquery znamena threaded, nez zacnes tu svoju vecnu kritiku ;) Tento plugin si fici na inom vlakne/vlaknach, aby presne vyriesil tieto tvoje obavy o blokovani :)

Edited by xhunterx
Link to comment
Share on other sites

Citace

J, ono by to mozno chcelo si uvedomit, ze to 't' v tom mysql_tquery znamena threaded, nez zacnes tu svoju vecnu kritiku ;) Tento plugin si fici na inom vlakne/vlaknach, aby presne vyriesil tieto tvoje obavy o blokovani :)

Tak to me hodne zajima jak to udelal :d Protoze moje pokusy o vytvoreni threadu u sa-mp vzdy selhaly :d Koukam do zdrojaku toho pluginu, a ja tam ten thread proste nevidim, kde tam je ? :d

Edited by ATomas
Link to comment
Share on other sites

před 1 hodinou, ATomas said:

Tak to me hodne zajima jak to udelal :d Protoze moje pokusy o vytvoreni threadu u sa-mp vzdy selhaly :d

Tak u mysql je to ovela jednoduchsie nez u inych veci, kedze synchronizaciu potrebujes len na zaciatku a na konci.

 

před 1 hodinou, ATomas said:

Koukam do zdrojaku toho pluginu, a ja tam ten thread proste nevidim, kde tam je ? :d

V tejto funkcii:

bool CHandle::Execute(ExecutionType type, Query_t query)

A potom v tychto suboroch mas samotnu implementaciu mutexov a threadu: CConnection.hpp a CConnection.cpp

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...