From: <dar...@us...> - 2010-09-20 06:34:27
|
Revision: 2138 http://znc.svn.sourceforge.net/znc/?rev=2138&view=rev Author: darthgandalf Date: 2010-09-20 06:34:20 +0000 (Mon, 20 Sep 2010) Log Message: ----------- Modperl's CreateTimer function now supports named arguments. Modified Paths: -------------- trunk/modules/modperl/startup.pl Modified: trunk/modules/modperl/startup.pl =================================================================== --- trunk/modules/modperl/startup.pl 2010-09-13 17:00:50 UTC (rev 2137) +++ trunk/modules/modperl/startup.pl 2010-09-20 06:34:20 UTC (rev 2138) @@ -329,9 +329,19 @@ } sub CreateTimer { - my ($self, $job, $interval, $cycles, $description) = @_; + my $self = shift; my $id = ZNC::Core::CreateUUID; - my $ctimer = ZNC::CreatePerlTimer($self->{_cmod}, $interval, $cycles, "perl-timer-$id", $description, $id); + my ($ctimer, $job); + if (ref($_[0]) eq 'CODE') { + # for those who doesn't want to use named args + $job = shift; + my ($interval, $cycles, $description) = @_; + $ctimer = ZNC::CreatePerlTimer($self->{_cmod}, $interval, $cycles, "perl-timer-$id", $description, $id); + } else { + my %a = @_; + $job = $a{task}; + $ctimer = ZNC::CreatePerlTimer($self->{_cmod}, $a{interval}//10, $a{cycles}//1, "perl-timer-$id", $a{description}//'Just Another Perl Timer', $id); + } $self->{_ptimers}{$id}{job} = $job; $self->{_ptimers}{$id}{cobj} = $ctimer; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2010-09-23 04:41:42
|
Revision: 2140 http://znc.svn.sourceforge.net/znc/?rev=2140&view=rev Author: darthgandalf Date: 2010-09-23 04:41:35 +0000 (Thu, 23 Sep 2010) Log Message: ----------- Fix bug introduced in r2133: modperl made znc crash when using web. Adding new hooks to modules is the following procedure: 1. Add it to modperl/module.h 2. Add it to modperl/startup.pl 3. Add it to modperl/functions.in 4. Run ./codegen.pl Modified Paths: -------------- trunk/modules/modperl/startup.pl Modified: trunk/modules/modperl/startup.pl =================================================================== --- trunk/modules/modperl/startup.pl 2010-09-21 17:54:29 UTC (rev 2139) +++ trunk/modules/modperl/startup.pl 2010-09-23 04:41:35 UTC (rev 2140) @@ -293,6 +293,7 @@ sub OnServerCapAvailable {} sub OnServerCapResult {} sub OnTimerAutoJoin {} +sub OnEmbeddedWebRequest {} # Functions of CModule will be usable from perl modules. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2010-09-27 13:08:13
|
Revision: 2143 http://znc.svn.sourceforge.net/znc/?rev=2143&view=rev Author: darthgandalf Date: 2010-09-27 13:08:07 +0000 (Mon, 27 Sep 2010) Log Message: ----------- Fix modperl. It didn't work. Modified Paths: -------------- trunk/modules/modperl/startup.pl Modified: trunk/modules/modperl/startup.pl =================================================================== --- trunk/modules/modperl/startup.pl 2010-09-27 11:45:32 UTC (rev 2142) +++ trunk/modules/modperl/startup.pl 2010-09-27 13:08:07 UTC (rev 2143) @@ -112,7 +112,7 @@ return ($ZNC::Perl_LoadError, "Incorrect perl module.") unless IsModule $modpath, $modname; require $modpath; my $pmod = bless {}, $modname; - return ($ZNC::Perl_Loaded, $modpath->GetPerlStr, $pmod->description) + return ($ZNC::Perl_Loaded, $modpath, $pmod->description) } sub ModInfoByPath { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2010-09-27 14:30:01
|
Revision: 2146 http://znc.svn.sourceforge.net/znc/?rev=2146&view=rev Author: darthgandalf Date: 2010-09-27 14:29:40 +0000 (Mon, 27 Sep 2010) Log Message: ----------- Improve portability of modperl by trying several UUID generators. Modified Paths: -------------- trunk/modules/modperl/startup.pl Modified: trunk/modules/modperl/startup.pl =================================================================== --- trunk/modules/modperl/startup.pl 2010-09-27 13:45:49 UTC (rev 2145) +++ trunk/modules/modperl/startup.pl 2010-09-27 14:29:40 UTC (rev 2146) @@ -9,21 +9,45 @@ use strict; use warnings; use ZNC; -use Data::UUID; use IO::File; -use feature 'switch'; +use feature 'switch', 'say'; package ZNC::Core; +my $uuidtype; my $uuidgen; our %pmods; sub Init { - $uuidgen = new Data::UUID; + if (eval { require Data::UUID }) { + $uuidtype = 'Data::UUID'; + $uuidgen = new Data::UUID; + } elsif (eval { require UUID }) { + $uuidtype = 'UUID'; + } else { + $uuidtype = 'int'; + $uuidgen = 0; + } } sub CreateUUID { - $uuidgen->create_str; + my $res; + given ($uuidtype) { + when ('Data::UUID') { + $res = $uuidgen->create_str; + } + when ('UUID') { + my ($uuid, $str); + UUID::generate($uuid); + UUID::unparse($uuid, $res); + } + when ('int') { + $uuidgen++; + $res = "$uuidgen"; + } + } + say "Created new UUID for modperl with '$uuidtype': $res"; + return $res; } sub unloadByIDUser { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2010-10-17 09:27:21
|
Revision: 2160 http://znc.svn.sourceforge.net/znc/?rev=2160&view=rev Author: darthgandalf Date: 2010-10-17 09:27:15 +0000 (Sun, 17 Oct 2010) Log Message: ----------- Fix modperl timers API. It was pretty difficult to pass arbitrary argument. Needed to generate new sub each time etc. Now CreateTimer gets new named parameter: context. Its value will be passed to given sub as named parameter context. Also as it was hard to use variant of CreateTimer without named params (there's no parameter 'context' there), that variant is gone. Modified Paths: -------------- trunk/modules/modperl/startup.pl Modified: trunk/modules/modperl/startup.pl =================================================================== --- trunk/modules/modperl/startup.pl 2010-10-17 08:42:07 UTC (rev 2159) +++ trunk/modules/modperl/startup.pl 2010-10-17 09:27:15 UTC (rev 2160) @@ -368,25 +368,23 @@ sub CreateTimer { my $self = shift; my $id = ZNC::Core::CreateUUID; - my ($ctimer, $job); - if (ref($_[0]) eq 'CODE') { - # for those who doesn't want to use named args - $job = shift; - my ($interval, $cycles, $description) = @_; - $ctimer = ZNC::CreatePerlTimer($self->{_cmod}, $interval, $cycles, "perl-timer-$id", $description, $id); - } else { - my %a = @_; - $job = $a{task}; - $ctimer = ZNC::CreatePerlTimer($self->{_cmod}, $a{interval}//10, $a{cycles}//1, "perl-timer-$id", $a{description}//'Just Another Perl Timer', $id); - } - $self->{_ptimers}{$id}{job} = $job; - $self->{_ptimers}{$id}{cobj} = $ctimer; + my %a = @_; + $self->{_ptimers}{$id}{cobj} = ZNC::CreatePerlTimer( + $self->{_cmod}, + $a{interval}//10, + $a{cycles}//1, + "perl-timer-$id", + $a{description}//'Just Another Perl Timer', + $id); + $self->{_ptimers}{$id}{job} = $a{task}; + $self->{_ptimers}{$id}{context} = $a{context}; } sub _CallTimer { my $self = shift; my $id = shift; - &{$self->{_ptimers}{$id}{job}}($self, $self->{_ptimers}{$id}{obj}); + my $t = $self->{_ptimers}{$id}; + &{$t->{job}}($self, context=>$t->{context}, timer=>$t->{cobj}); } sub _RemoveTimer { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2010-12-23 18:18:12
|
Revision: 2202 http://znc.svn.sourceforge.net/znc/?rev=2202&view=rev Author: darthgandalf Date: 2010-12-23 18:18:06 +0000 (Thu, 23 Dec 2010) Log Message: ----------- OOPish API for timers in modperl. Existing API still works. Modified Paths: -------------- trunk/modules/modperl/startup.pl Modified: trunk/modules/modperl/startup.pl =================================================================== --- trunk/modules/modperl/startup.pl 2010-12-23 14:15:49 UTC (rev 2201) +++ trunk/modules/modperl/startup.pl 2010-12-23 18:18:06 UTC (rev 2202) @@ -387,28 +387,40 @@ my $self = shift; my $id = ZNC::Core::CreateUUID; my %a = @_; - $self->{_ptimers}{$id}{cobj} = ZNC::CreatePerlTimer( + my $ctimer = ZNC::CreatePerlTimer( $self->{_cmod}, $a{interval}//10, $a{cycles}//1, "perl-timer-$id", $a{description}//'Just Another Perl Timer', $id); - $self->{_ptimers}{$id}{job} = $a{task}; - $self->{_ptimers}{$id}{context} = $a{context}; + my $ptimer = { + _ctimer=>$ctimer, + _modid=>$self->GetPerlID + }; + $self->{_ptimers}{$id} = $ptimer; + if (ref($a{task}) eq 'CODE') { + bless $ptimer, 'ZNC::Timer'; + $ptimer->{job} = $a{task}; + $ptimer->{context} = $a{context}; + } else { + bless $ptimer, $a{task}; + } + $ptimer; } sub _CallTimer { my $self = shift; my $id = shift; my $t = $self->{_ptimers}{$id}; - &{$t->{job}}($self, context=>$t->{context}, timer=>$t->{cobj}); + $t->RunJob; } sub _RemoveTimer { my $self = shift; my $id = shift; say "Removing perl timer $id"; + $self->{_ptimers}{$id}->OnShutdown; delete $self->{_ptimers}{$id} } @@ -437,9 +449,44 @@ my $self = shift; my $id = shift; say "Removing perl socket $id"; + $self->{_sockets}{$id}->OnShutdown; delete $self->{_sockets}{$id} } +package ZNC::Timer; + +sub GetModule { + my $self = shift; + $ZNC::Core::pmods{$self->{_modid}}; +} + +sub RunJob { + my $self = shift; + if (ref($self->{job}) eq 'CODE') { + &{$self->{job}}($self->GetModule, context=>$self->{context}, timer=>$self->{_ctimer}); + } +} + +sub OnShutdown {} + +our $AUTOLOAD; + +sub AUTOLOAD { + my $name = $AUTOLOAD; + $name =~ s/^.*:://; # Strip fully-qualified portion. + my $sub = sub { + my $self = shift; + $self->{_ctimer}->$name(@_) + }; + no strict 'refs'; + *{$AUTOLOAD} = $sub; + use strict 'refs'; + goto &{$sub}; +} + +sub DESTROY {} + + package ZNC::Socket; sub GetModule { @@ -455,6 +502,7 @@ sub OnReadData {} sub OnReadLine {} sub OnAccepted {} +sub OnShutdown {} sub _Accepted { my $self = shift; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |