PDA

Просмотр полной версии : отправка пакетов через таймер


PadshiyAngel
13.05.2010, 00:41
Есть скрипт, грубо говоря стырил его отсюда (http://coderx.ru/showthread.php?t=4859)...немного доделал... запускаю...ошибок никаких не пишет...но пакеты не отправляются( в чем прикол не пойму...помогите)

var
Timer01: TTimer;
TimerCycle:integer;

procedure Init;
begin
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer01.interval:=2700; //интервал(в милисекундах) как часто таймер срабатывает
TimerCycle:=1;
end;
procedure OnTimer01(Sender: TObject);
begin
case TimerCycle of
1:begin
buf:=hstr('0C 0D 7C 11 10 00 00 00 00');
SendToServer;
Inc(TimerCycle);
Exit;
end;
2:begin
buf:=hstr('43 4C 00 76 A0 04 10');
SendToServer;
Inc(TimerCycle);
Exit;
end;
3:begin
buf:=hstr('65 76 A0 04 10 00 00 00 00');
SendToServer;
TimerCycle=1;
Exit;
end;
end;
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer01.Free; //освобождаем занимаемую память таймером
end;

begin
timer01.enabled:=true;
end.

J-Fobos
13.05.2010, 00:45
Timer01:=TTimer.Create(nil); и тому подобное объявляется не в процедуре Init, а timer01.enabled:=true; в теле скрипта хотя и включит таймер, но будет его включать постоянно при приходе любого пакета.

PadshiyAngel
13.05.2010, 00:47
Timer01:=TTimer.Create(nil); и тому подобное объявляется не в процедуре Init, а timer01.enabled:=true; в теле скрипта хотя и включит таймер, но будет его включать постоянно при приходе любого пакета.

Насчет объявления не в Init...
Ваша ссылка (http://coderx.ru/showpost.php?p=30293&postcount=404)...у вас тут в Init объявляется...

Ну а насчет включения, эт как нить разберусь, мне надо чтобы хотя бы один раз отправились пакеты без дисконекта)

J-Fobos
13.05.2010, 01:14
Меня что-то клемануло :) Я хотел написать что в инит надо обьявить начальное значение TimerCycle:=1;
Написал одно, а думал о другом, впервые такое, крыша едет чтоли :crazy:

PadshiyAngel
13.05.2010, 01:24
Меня что-то клемануло :) Я хотел написать что в инит надо обьявить начальное значение TimerCycle:=1;
Написал одно, а думал о другом, впервые такое, крыша едет чтоли :crazy:

добавил в инит...все равно что то не посылаются пакеты...где то тут косяк...

NLObP
13.05.2010, 01:52
PadshiyAngel, кусок
3:begin
buf:=hstr('65 76 A0 04 10 00 00 00 00');
SendToServer;
Inc(TimerCycle);
Exit;
end;
наверное лучше так исправить
3:begin
buf:=hstr('65 76 A0 04 10 00 00 00 00');
SendToServer;
TimerCycle=1;
Exit;
end;

PadshiyAngel
13.05.2010, 02:09
PadshiyAngel, кусок
3:begin
buf:=hstr('65 76 A0 04 10 00 00 00 00');
SendToServer;
Inc(TimerCycle);
Exit;
end;
наверное лучше так исправить
3:begin
buf:=hstr('65 76 A0 04 10 00 00 00 00');
SendToServer;
TimerCycle=1;
Exit;
end;

исправил, но не пашет)

NLObP
13.05.2010, 02:25
PadshiyAngel, а скрипт с которого копию делал работает?

Fer123
13.05.2010, 11:28
Вместо SendToServer; поставь SendToServerEx(Nickname);
И здесь
begin
timer01.enabled:=true;
end.
лучше сделай чтоб включался по приходе пакета соц действия. А то так получается он у тебя все время включен, но если ты так хочешь тогда уж лучше сразу его включить в Init, а в begin end. оставить пустыми.

И Exit; необязательно писать