From dfe212d5b237b357f76e9d6ae4c899f47a681683 Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Thu, 28 Jul 2016 23:45:54 -0400 Subject: Fix async --- docs/01-basics.md | 8 ++++---- lib/IRC/Client.pm6 | 27 ++++++++++++++++++++------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/docs/01-basics.md b/docs/01-basics.md index bbbdcd0..c43fd49 100644 --- a/docs/01-basics.md +++ b/docs/01-basics.md @@ -88,9 +88,9 @@ the original message, prefixed with `You said `. :host :channels<#perl6bot #zofbot> :debug - :plugins( + :plugins[ class { method irc-to-me ($e) { "You said $e.text()"} } - ) + ] ``` ## Generating Messages @@ -104,7 +104,7 @@ the `$.irc` attribute: use IRC::Client; class AlarmBot does IRC::Client::Plugin { - method irc-started { + method irc-connected ($) { react { whenever Supply.interval(3) { $.irc.send: :where<#perl6> :text; @@ -118,7 +118,7 @@ class AlarmBot does IRC::Client::Plugin { :host :channels<#perl6> :debug - :plugins(AlarmBot.new) + :plugins[AlarmBot.new] ``` Here, we subscribe to `irc-connected` event (using an anonymous parameter diff --git a/lib/IRC/Client.pm6 b/lib/IRC/Client.pm6 index 863b50f..ea03269 100644 --- a/lib/IRC/Client.pm6 +++ b/lib/IRC/Client.pm6 @@ -97,7 +97,7 @@ method run { } self!connect-socket: $_ for %!servers.values; - .irc-started for self!plugs-that-can('irc-started', $e); + .irc-started for self!plugs-that-can('irc-started'); loop { my $s = $!socket-pipe.receive; self!connect-socket: $s unless $s.has-quit; @@ -110,8 +110,15 @@ method run { method send (:$where!, :$text!, :$server, :$notice) { for $server || |%!servers.keys.sort { - self.send-cmd: $notice ?? 'NOTICE' !! 'PRIVMSG', $where, $text, - :server($_); + if self!get-server($server).is-connected { + self.send-cmd: $notice ?? 'NOTICE' !! 'PRIVMSG', $where, $text, + :server($_); + } + else { + $!debug and debug-print( :out, :$server, + '.send() called for an unconnected server. Skipping...' + ); + } } self; @@ -160,7 +167,7 @@ method !connect-socket ($server) { if $prom.status ~~ Broken { $server.is-connected = False; $!debug and debug-print 'Could not connect', :out, :$server; - sleep 5; + sleep 10; $!socket-pipe.send: $server; return; } @@ -191,7 +198,7 @@ method !connect-socket ($server) { unless $server.has-quit { $server.is-connected = False; $!debug and debug-print "Connection closed", :in, :$server; - sleep 5; + sleep 10; } $!socket-pipe.send: $server; @@ -279,15 +286,21 @@ method !parse (Str:D $str, :$server) { ).made; } -method !plugs-that-can ($method, $e) { +method !plugs-that-can ($method, |c) { gather { for @!plugins -> $plug { - take $plug if .cando: \($plug, $e) + take $plug if .cando: \($plug, |c) for $plug.^can: $method; } } } +method !get-server ($server is copy) { + $server //= '_'; # stupid Perl 6 and its sig defaults + return $server if $server ~~ IRC::Client::Server; + return %!servers{$server}; +} + method !set-server-attr ($server, $method, $what) { if $server ne '*' { %!servers{$server}."$method"() = $what; -- cgit v1.1