Собственно приступил к написанию самого контроллера бота. Т.к. в боте используются таймеры, можно ли использовать потоки? Для каждого соединения я создаю класс Session
Код:
type Session = class(TThread)
public
//Поля описывающее персонажа
{TUser - поле пользователя}
user : TUser;
{TSkillList - поле(список) скиллов}
skillList : TSkillList;
{TInventoryItemList - поле(список) вещей в инвентаре}
itemList : TInventoryItemList;
{TBuffList - поле(список) бафов, дебафов}
buffList : TBuffList;
{TInventoryItemList - поле(список) вещей в инвентаре}
inventoryItemList : TInventoryItemList;
//Поля описывающее информацию рядом с персонажем
{TNpcList - поле(список) мобов}
npcList : TNpcList;
{TPlayerList - поле(список) игроков}
playerList : TPlayerList;
{TDropItemList - поле(список) вещей на полу}
dropItemList : TDropItemList;
//Методы
constructor Create(_id : Cardinal);
function getID(): Cardinal;
private
id : Cardinal;
end;
В главном юните я объявляю
Код:
var sessions : TObjectList<Session>
Далее в OnPacket я проверяю создана ли такая сессия, если нет создаю с текущем cnt. И вызываю метод
Код:
procedure OnPacket(const cnt: Cardinal; const fromServer: Boolean; const connectionname:string; var pck: string); stdcall;
var curSession : Session;
begin
//Анализирую пакет если пришел пакет, который необходимо обработать
// получаю действие по этому пакету, ищу сессию для данного соединения
if(isAction) then
if(getSessionById(cnt) = -1) then
curSession:=Session.Create(cnt);
sessions.add(curSession);
end;
curSession.Action(поля);
end;
end.
Вопрос допускаться ли использование потоков в DLL? Возможна ли отправка пакетов из потока?
И вопрос по Delphi если я объявляю локальную переменную, создаю её и передаю в глобальный список. Туда передастся ссылка или переменная?