PDA

Просмотр полной версии : DLL бот и потоки


VitaminPSG
01.07.2014, 16:49
Собственно приступил к написанию самого контроллера бота. Т.к. в боте используются таймеры, можно ли использовать потоки? Для каждого соединения я создаю класс 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 если я объявляю локальную переменную, создаю её и передаю в глобальный список. Туда передастся ссылка или переменная?

supernewbie
01.07.2014, 19:38
VitaminPSG, сама переменная всегда копируется, кстати создать переменную нельзя, если ты имел ввиду создать инстанс класса - тогда в переменную запишется ссылка на инстанс и при передаче такой переменной передастся ссылка

SeregaZ
02.07.2014, 05:46
увидел название темы и пришла в голову мысль как действительно реализовать потоки в л2пх - запустить три л2пх, и настроить их как прокси серверы с разными портами и направить друг на друга. и в каждом свой скрипт. конечно у них не будет глобальных переменных, но зато можно будет 3 скрипта к примеру выполнять одновременно, а не пошагово друг за другом :)

supernewbie
02.07.2014, 15:02
SeregaZ, по-моему таки проще написать свою пх заглянув в сорцы текущей

SeregaZ
03.07.2014, 05:49
так я не бум бум... был бы пх на PureBasic написан - то другой разговор, но вот всякие дельфи не знаю :)

Aminf
06.07.2014, 16:22
http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682453(v=vs.85).aspx
http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682437(v=vs.85).aspx