aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoffix Znet <cpan@zoffix.com>2016-07-28 23:45:54 -0400
committerZoffix Znet <cpan@zoffix.com>2016-07-28 23:45:54 -0400
commitdfe212d5b237b357f76e9d6ae4c899f47a681683 (patch)
treeaec9d2f76ab10a577a59640da9f2ae641a71a4d5
parent311095fd68090ed82e9fff9f71003bc5247a108b (diff)
Fix async
-rw-r--r--docs/01-basics.md8
-rw-r--r--lib/IRC/Client.pm627
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<irc.freenode.net>
: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<Three seconds passed!>;
@@ -118,7 +118,7 @@ class AlarmBot does IRC::Client::Plugin {
:host<irc.freenode.net>
: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;