Порядок обработки кода.
#1

Меня терзают вопросы связанные с порядком обработки тех или иных Callback. Все мы знаем что sa-mp сервер работает в один поток, так каков же порядок Callback-ов - это раз.
Во вторых, идёт перебор игроков for(;; ), если произвести кик игрока то будет ли вызван OnPlayerDisconnect() во время перебора?(думаю что да)
В третьих, идёт перебор игроков for(;; ), может ли в этот промежуток времени выполниться OnPlayerConnect()?(думаю что нет)

Пока единственное что мне известно то, что OnPlayerEnterVehicle() игрока происходит до OnPlayerUpdate().

Хотелось бы узнать эту "структуру".
Reply
#2

Ты в курсе что такое один поток и очередь?
Reply
#3

Quote:
Originally Posted by Stepashka
View Post
Ты в курсе что такое один поток и очередь?
Не буду блистать знаниями (мы этим только и занимаемся), мне важна очерёдность вызовов.
Reply
#4

Нет её, по мере поступления задач, ушел игрок с сервера в конец очереди встало OnPlayerDisconnect, в этот момент другой человек садится в машину, в конец встали OnPlayerKeyStateChange и OnPlayerEnterVehicle, сел в машину получили OnPlayerStateChange и все это разбавлено порядочной долей событий OnPlayerUpdate.
Нет и никогда не было четкого порядка, только в случае когда два события результат одного действия, например посадка в машину: OnPlayerKeyStateChange, OnPlayerEnterVehicle и OnPlayerUpdate. Правда в каком порядке точно не скажу, но OnPlayerUpdate 100% первая потому что сперва приходит пакет с информацией о том что человек садится в машину, и уже этот пакет вызывает два других события.
Reply
#5

Со вторым разобрался идёт вызов дисконекта.
OnPlayerEnterVehicle, OnPlayerKeyStateChange, OnPlayerUpdate.Потом идёт несколько OnPlayerUpdate(пока игрок сядет в машину) и выполняется OnPlayerStateChange.
- результат посадки в авто.
Reply
#6

Я так полагаю что ты отслеживаешь вызовы после того как будет вызвана OnPlayerEnterVehicle?
Reply
#7

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 мс.
Reply
#8

Code:
[18:55:12] Up 12242354 < пакет с кодом для выхода из машины
[18:55:12] Exit
[18:55:12] key
ну и дальнейшие события результат пакета.
Reply
#9

наоборот, OnPlayerEnterVehicle, OnPlayerKeyStateChange, OnPlayerUpdate.
(пойду перепроверю...)
Reply
#10

Reply
#11

Код:
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

=/
Reply
#12

Quote:

Как сервер узнает о действиях клиента?
К нему приходит информационный пакет.
Что происходит когда приходит информационный пакет?
Вызывается событие OnPlayerUpdate.

Перед любым действием будет вызываться OnPlayerUpdate, все успокойся.

Да и вообще какая тебе разница в каком порядке что делается на сервере? Даже если сервер будет мультипоточным ты не заметишь разницы в виду того что все что там происходит за время которое человек не способен воспринимать.
Reply
#13

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Перед любым действием будет вызываться OnPlayerUpdate, все успокойся.

Да и вообще какая тебе разница в каком порядке что делается на сервере? Даже если сервер будет мультипоточным ты не заметишь разницы в виду того что все что там происходит за время которое человек не способен воспринимать.
Большая разница, от этого зависит работоспособность логических выражений и в частности мода.
Reply
#14

Quote:

Даже если сервер будет мультипоточным ты не заметишь разницы в виду того что все что там происходит за время которое человек не способен воспринимать.

Неправда. Представьте, что вы работаете с переменной в одном коллбеке. Фактически для вас эта переменная всегда одна и таже. Тут бац, и другой коллбек изменил переменную, с которой работает первый коллбек. Вот и разница.
Reply
#15

Quote:
Originally Posted by jhonyxakep
Посмотреть сообщение
Неправда. Представьте, что вы работаете с переменной в одном коллбеке. Фактически для вас эта переменная всегда одна и таже. Тут бац, и другой коллбек изменил переменную, с которой работает первый коллбек. Вот и разница.
Вот тут-то собака и зарыта, если работать с глобальными переменными.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)