Порядок обработки кода. -
White_116 - 30.04.2012
Меня терзают вопросы связанные с порядком обработки тех или иных Callback. Все мы знаем что sa-mp сервер работает в один поток, так каков же порядок Callback-ов - это раз.
Во вторых, идёт перебор игроков for(;; ), если произвести кик игрока то будет ли вызван OnPlayerDisconnect() во время перебора?
(думаю что да)
В третьих, идёт перебор игроков for(;; ), может ли в этот промежуток времени выполниться OnPlayerConnect()?
(думаю что нет)
Пока единственное что мне известно то, что OnPlayerEnterVehicle() игрока происходит до OnPlayerUpdate().
Хотелось бы узнать эту "структуру".
Re: Порядок обработки кода. -
Stepashka - 30.04.2012
Ты в курсе что такое один поток и очередь?
Re: Порядок обработки кода. -
White_116 - 30.04.2012
Quote:
Originally Posted by Stepashka
Ты в курсе что такое один поток и очередь?
|
Не буду блистать знаниями
(мы этим только и занимаемся), мне важна очерёдность вызовов.
Re: Порядок обработки кода. -
Stepashka - 30.04.2012
Нет её, по мере поступления задач, ушел игрок с сервера в конец очереди встало
OnPlayerDisconnect, в этот момент другой человек садится в машину, в конец встали
OnPlayerKeyStateChange и
OnPlayerEnterVehicle, сел в машину получили
OnPlayerStateChange и все это разбавлено порядочной долей событий
OnPlayerUpdate.
Нет и никогда не было четкого порядка, только в случае когда два события результат одного действия, например посадка в машину:
OnPlayerKeyStateChange,
OnPlayerEnterVehicle и
OnPlayerUpdate. Правда в каком порядке точно не скажу, но
OnPlayerUpdate 100% первая потому что сперва приходит пакет с информацией о том что человек садится в машину, и уже этот пакет вызывает два других события.
Re: Порядок обработки кода. -
White_116 - 30.04.2012
Со вторым разобрался идёт вызов дисконекта.
OnPlayerEnterVehicle, OnPlayerKeyStateChange, OnPlayerUpdate.Потом идёт несколько OnPlayerUpdate(пока игрок сядет в машину) и выполняется OnPlayerStateChange.
- результат посадки в авто.
Re: Порядок обработки кода. -
Stepashka - 30.04.2012
Я так полагаю что ты отслеживаешь вызовы после того как будет вызвана
OnPlayerEnterVehicle?
Re: Порядок обработки кода. -
White_116 - 30.04.2012
Quote:
[18:55:12] Up 12242152
[18:55:12] Up 12242253
[18:55:12] Up 12242354
[18:55:12] Exit
[18:55:12] key
[18:55:12] Up 12242456
[18:55:12] key
[18:55:12] State
[18:55:12] Up 12242880
[18:55:13] Up 12243423
[18:55:13] Up 12243975
|
сделал логирование, апдейт морозил на 100 мс.
Re: Порядок обработки кода. -
Stepashka - 30.04.2012
Code:
[18:55:12] Up 12242354 < пакет с кодом для выхода из машины
[18:55:12] Exit
[18:55:12] key
ну и дальнейшие события результат пакета.
Re: Порядок обработки кода. -
White_116 - 30.04.2012
наоборот, OnPlayerEnterVehicle, OnPlayerKeyStateChange, OnPlayerUpdate.
(пойду перепроверю...)
Re: Порядок обработки кода. -
Stepashka - 30.04.2012
Re: Порядок обработки кода. -
White_116 - 30.04.2012
Код:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
printf("OnPlayerEnterVehicle %d",GetTickCount());
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
printf("OnPlayerExitVehicle %d",GetTickCount());
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
printf("OnPlayerStateChange %d",GetTickCount());
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
printf("OnPlayerKeyStateChange %d",GetTickCount());
return 1;
}
public OnPlayerUpdate(playerid)
{
printf("OnPlayerUpdate %d",GetTickCount());
new tick = GetTickCount()+100;
for(;;)
if(GetTickCount()>tick)break;
return 1;
}
Quote:
[20:01:13] OnPlayerUpdate 16203855
[20:01:13] OnPlayerUpdate 16204383
[20:01:14] OnPlayerUpdate 16204898
[20:01:14] OnPlayerEnterVehicle 16205063
[20:01:14] OnPlayerKeyStateChange 16205069
[20:01:14] OnPlayerUpdate 16205069
[20:01:14] OnPlayerUpdate 16205170
[20:01:14] OnPlayerUpdate 16205271
[20:01:14] OnPlayerUpdate 16205372
[20:01:14] OnPlayerKeyStateChange 16205473
[20:01:14] OnPlayerUpdate 16205473
[20:01:15] OnPlayerUpdate 16205574
|
=/
Re: Порядок обработки кода. -
Stepashka - 30.04.2012
Quote:
Как сервер узнает о действиях клиента?
К нему приходит информационный пакет.
Что происходит когда приходит информационный пакет?
Вызывается событие OnPlayerUpdate.
|
Перед любым действием будет вызываться
OnPlayerUpdate, все успокойся.
Да и вообще какая тебе разница в каком порядке что делается на сервере? Даже если сервер будет мультипоточным ты не заметишь разницы в виду того что все что там происходит за время которое человек не способен воспринимать.
Re: Порядок обработки кода. -
White_116 - 30.04.2012
Quote:
Originally Posted by Stepashka
Перед любым действием будет вызываться OnPlayerUpdate, все успокойся.
Да и вообще какая тебе разница в каком порядке что делается на сервере? Даже если сервер будет мультипоточным ты не заметишь разницы в виду того что все что там происходит за время которое человек не способен воспринимать.
|
Большая разница, от этого зависит работоспособность логических выражений и в частности мода.
Re: Порядок обработки кода. -
jhonyxakep - 30.04.2012
Quote:
Даже если сервер будет мультипоточным ты не заметишь разницы в виду того что все что там происходит за время которое человек не способен воспринимать.
|
Неправда. Представьте, что вы работаете с переменной в одном коллбеке. Фактически для вас эта переменная всегда одна и таже. Тут бац, и другой коллбек изменил переменную, с которой работает первый коллбек. Вот и разница.
Re: Порядок обработки кода. -
White_116 - 01.05.2012
Quote:
Originally Posted by jhonyxakep
Неправда. Представьте, что вы работаете с переменной в одном коллбеке. Фактически для вас эта переменная всегда одна и таже. Тут бац, и другой коллбек изменил переменную, с которой работает первый коллбек. Вот и разница.
|
Вот тут-то собака и зарыта, если работать с глобальными переменными.