Closed am0c closed 11 years ago
hubot-scripts.json
파일 변경후에 재시작 하지 않고 읽어들이기 위함인가요?
아뇨, 그보다는 특정 플러그인이 Hubot이 규칙적으로 특정 작업을 수행하도록 하고 싶었습니다.
package Hubot::Scripts::MyScript;
use AnyEvent;
use Moose;
has 'cv',
is => 'rw',
default => sub { +{} };
sub load {
my ($self, $robot) = @_;
$self->cv->{loop} = (AE::timer 0, 20, sub {
$robot->brain->save;
$self->update($robot);
});
}
만들고 보니 대략 위와 같이 타이머 이벤트 발생이 가능했습니다. 그래서 딱히 또다른 API가 필요 없다는 것을 뒤늦게 알았습니다.
오오미 :+1:
adapter 코드는 아래와 같고
$adapter->emit('connected');
# some stuff
$cv->recv;
$robot->loadHubotScripts
타이밍이 $adapter->emit('connected')
다음 이라서,
event loop 가 시작된 후에 AE::timer
가 등록되기 때문인지 동작하지 않습니다.
아못군의 코드는 정상 동작합니다. WATCHER 의 lifetime 을 고려하지 않은 테스트 였습니다.
watcher object 를 load
함수 안에 두면 lifetime 이 끝나버려서 event loop 안에서 제거 되기 때문에 동작하지 않지만,
모듈내에 둔다면 동작합니다.
코드로 예를 들면,
sub load {
my ( $class, $robot ) = @_;
my $w;
$w = AE::timer 0, 5, sub {'do something'}; # not working
}
my $w;
sub load {
my ( $class, $robot ) = @_;
$w = AE::timer 0, 5, sub {'do something'}; # working
}
http://search.cpan.org/~mlehmann/AnyEvent/lib/AnyEvent.pm#WATCHERS
if you follow the documentation, your code will work, if you don't, your code will not work, so you need to fix your code.
by Marc Lehmann
확장 스크립트를 몇 초마다 수행되도록 할 수 있으면 좋을 것 같습니다.