Oui Jeff c'est exactement ça le problème.
Et pour éviter que 2 requêtes se fasse en même temps, il faut utiliser un sémaphore (ou mutex=Mutual Exclusive).
Il est très facile de faire un sémaphore acceptable en PAWN, il suffit d'un variable et de deux fonctions :
new MonSemaphore = 0;
PrendreSemaphore ()
{
/* Tant que le sémaphore n'est pas libre */
while (Semaphore != 0); // Prendra 100 % d'un CPU tant que Semaphore ne vaudra pas 0
/* On prend le sémaphore */
Semaphore = 1;
}
LibererSemaphore ()
{
Semaphore = 0;
}
Ensuite, il faut appeler PrendreSemaphore avant chaque requête et LibererSemaphore après que le résultat de la requête a été utilisé.
Attention toutefois, avec un sémaphore, si on code de travers, il est possible que le serveur reste bloqué à jamais (dead lock). Notamment dans le cas où on oublie de libérer le sémaphore.
De plus, la fonction PrendreSemaphore va consommer 100 % du CPU tant que le sémaphore ne sera pas libre (=0). C'est moyennement grave sur les machine avec plusieurs cœurs (ou plusieurs CPU) mais il ne faut surtout pas le faire sur une machine avec un seul processeur.
Autre inconvénient, les requêtes sont exécutées les unes après les autres et si, par exemple, 4 joueurs se connectent en même temps, le 4° risque d'attendre plus longtemps que prévu.
++
Syg