[290] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[D-O-H] r447 - trunk/owl

daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:04:34 2009

Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Thu,  2 Nov 2006 22:19:16 -0500 (EST)

Author: nelhage
Date: 2006-11-02 22:19:15 -0500 (Thu, 02 Nov 2006)
New Revision: 447

Modified:
   trunk/owl/perlwrap.pm
Log:
Refactoring hook code

Modified: trunk/owl/perlwrap.pm
===================================================================
--- trunk/owl/perlwrap.pm	2006-11-02 01:08:36 UTC (rev 446)
+++ trunk/owl/perlwrap.pm	2006-11-03 03:19:15 UTC (rev 447)
@@ -283,11 +283,11 @@
 ################################################################################
 package owl;
 
-# Arrays of function pointers to be called at specific times.
+# Arrays of subrefs to be called at specific times.
 our @onStartSubs = ();
-our @onReceiveMsg = undef;
-our @onMainLoop = undef;
-our @onGetBuddyList = undef;
+our @onReceiveMsg = ();
+our @onMainLoop = ();
+our @onGetBuddyList = ();
 
 ################################################################################
 # Mainloop hook and threading.
@@ -305,26 +305,38 @@
 our $reload : shared;
 $reload = 0;
 
-sub owl::mainloop_hook
+# Functions to call hook lists
+sub runHook($@)
 {
-    foreach (@onMainLoop)
-    {
-	&$_();
-    }
-    return;
+    my $hook = shift;
+    my @args = @_;
+    $_->(@args) for (@$hook);
 }
 
+sub runHook_accumulate($@)
+{
+    my $hook = shift;
+    use Data::Dumper;
+    my @args = @_;
+    return join("\n", map {$_->(@args)} @$hook);
+}
+
+sub mainloop_hook
+{
+    runHook(\@onMainLoop);
+}
+
 ################################################################################
 # Startup and Shutdown code
 ################################################################################
-sub owl::startup
+sub startup
 {
 # Modern versions of owl provides a great place to have startup stuff.
 # Put things in ~/.owl/startup
     onStart();
 }
 
-sub owl::shutdown
+sub shutdown
 {
 # Modern versions of owl provides a great place to have shutdown stuff.
 # Put things in ~/.owl/shutdown
@@ -332,7 +344,7 @@
 # At this point I use owl::shutdown to tell any auxillary threads that they
 # should terminate.
     $shutdown = 1;
-    owl::mainloop_hook();
+    mainloop_hook();
 }
 
 #Run this on start and reload. Adds modules and runs their startup functions.
@@ -346,10 +358,7 @@
     @onGetBuddyList = ();
 
     loadModules();
-    foreach (@onStartSubs)
-    {
-	&$_();
-    }
+    runHook(\@onStartSubs);
 }
 ################################################################################
 # Reload Code, taken from /afs/sipb/user/jdaniel/project/owl/perl
@@ -394,46 +403,44 @@
 # Loads modules from ~/.owl/modules and owl's data directory
 ################################################################################
 
-sub loadModules ()
-{
-my @modules;
-foreach my $dir (owl::get_data_dir()."/owl/modules", $ENV{HOME}."/.owl/modules") {
-  opendir(MODULES, $dir);
-  # source ./modules/*.pl
-  @modules  =  grep(/\.pl$/, readdir(MODULES));
+sub loadModules () {
+    my @modules;
+    foreach my $dir ( owl::get_data_dir() . "/owl/modules",
+        $ENV{HOME} . "/.owl/modules" )
+    {
+        opendir( MODULES, $dir );
 
-foreach my $mod (@modules) {
-  do "$dir/$mod";
+        # source ./modules/*.pl
+        @modules = grep( /\.pl$/, readdir(MODULES) );
+
+        foreach my $mod (@modules) {
+            do "$dir/$mod";
+        }
+        closedir(MODULES);
+    }
+
 }
-closedir(MODULES);
-}
-}
 
 
+
 ################################################################################
 # Hooks into receive_msg()
 ################################################################################
 
-sub owl::receive_msg
+sub receive_msg
 {
     my $m = shift;
-    foreach (@onReceiveMsg)
-    {
-	&$_($m);
-    }
+    runHook(\@onReceiveMsg, $m);
 }
 
 ################################################################################
 # Hooks into get_blist()
 ################################################################################
 
-sub owl::get_blist
+sub get_blist
 {
     my $m = shift;
-    foreach (@onGetBuddyList)
-    {
-	&$_($m);
-    }
+    return runHook_accumulate(\@onGetBuddyList, $m);
 }
 
 # switch to package main when we're done


home help back first fref pref prev next nref lref last post