89 lines
2.5 KiB
Perl
Executable File
89 lines
2.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use 5.018;
|
|
use strict;
|
|
use warnings;
|
|
use utf8;
|
|
use open qw (:std :utf8);
|
|
use English qw ( -no_match_vars );
|
|
use version; our $VERSION = qw (1.0);
|
|
|
|
my $workdir;
|
|
|
|
# before we run, change working dir
|
|
BEGIN {
|
|
use Cwd qw (chdir abs_path);
|
|
my @CWD = split /\//xms, abs_path ($PROGRAM_NAME);
|
|
if ($#CWD > 1) { $#CWD = $#CWD - 2; }
|
|
$workdir = join '/', @CWD;
|
|
chdir $workdir;
|
|
}
|
|
|
|
use lib ("$workdir/lib", "$workdir/vendor_perl", "$workdir/vendor_perl/lib/perl5");
|
|
use Carp qw (carp);
|
|
use Mojo::Redis;
|
|
use Data::Dumper;
|
|
|
|
use Conf qw (LoadConf);
|
|
my @messages = ('!cat', '!fox', '!drink', '!monkeyuser', '!xkcd');
|
|
my $c = LoadConf ();
|
|
|
|
my $redis = Mojo::Redis->new (
|
|
sprintf 'redis://%s:%s/1', $c->{server}, $c->{port}
|
|
);
|
|
|
|
my $pubsub = $redis->pubsub;
|
|
|
|
# Добавим коллбэк на приход события в test.
|
|
$pubsub->json ('test')->listen (
|
|
'test' => sub {
|
|
# my $self = shift;
|
|
# my $message = shift;
|
|
carp Dumper (@_);
|
|
}
|
|
);
|
|
|
|
# Добавим коллбэк на приход события в broadcast.
|
|
$pubsub->json ('broadcast')->listen (
|
|
'broadcast' => sub {
|
|
# my $self = shift;
|
|
# my $message = shift;
|
|
carp Dumper (@_);
|
|
}
|
|
);
|
|
|
|
# Попробуем потыкать в наш сервер приложений разными сообщениями.
|
|
# Этот коллбэк запускается по таймеру, раз в 3 секунды.
|
|
Mojo::IOLoop->recurring (
|
|
3 => sub {
|
|
my $channel = 'test';
|
|
if (int (rand (2))) { $channel = 'broadcast' }
|
|
|
|
$pubsub->json ('webapp:test')->notify (
|
|
'webapp:test' => {
|
|
from => $channel, # <- отвечаем в этот pubsub-канал
|
|
userid => 'test_user',
|
|
chatid => '#test_chat',
|
|
plugin => 'dummy_plugin',
|
|
message => $messages [int (rand ($#messages + 1))]
|
|
}
|
|
);
|
|
}
|
|
);
|
|
|
|
# поприветствуем наше тестируемое приложение, это необходимо чтобы оно подписалось на нас.
|
|
$pubsub->json ('webapp:TEST')->notify (
|
|
'webapp:TEST' => {
|
|
from => 'test', # <- отвечаем в этот pubsub-канал
|
|
userid => 'test_user',
|
|
chatid => '#test_chat',
|
|
plugin => 'dummy_plugin',
|
|
message => 'Hello'
|
|
}
|
|
);
|
|
|
|
# Приветствовать test не нужно, так как он безо всякой эвристики подписан и на себя и на broadcast
|
|
|
|
# Все нужные обработчики напиханы в ивент-луп, можно его запускать.
|
|
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
|