Prepare for git repository
[spider.git] / perl / Thingy.pm
index 885e7f0f5f4c0dc1a210a449390b5025978d7c87..f10467986dcb0d4215f591bfa4b881b61ef3567b 100644 (file)
@@ -8,44 +8,47 @@
 # Copyright (c) 2004 Dirk Koopman G1TLH
 #
 
-package Thingy;
-
-use vars qw($VERSION $BRANCH);
-$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
-$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/  || (0,0));
-$main::build += $VERSION;
-$main::branch += $BRANCH;
+use strict;
 
+package Thingy;
 
 use DXChannel;
 use DXDebug;
 
-use vars qw(@queue);
-@queue = ();                                   # the thingy queue
-
 # we expect all thingies to be subclassed
 sub new
 {
        my $class = shift;
-       my $self = {@_};
+       my $thing = {@_};
        
-       bless $self, $class;
-       return $self;
+       bless $thing, $class;
+       return $thing;
 }
 
-# add the Thingy to the queue
-sub add
+# send it out in the format asked for, if available
+sub send
 {
-       push @queue, shift;
+       my $thing = shift;
+       my $chan = shift;
+       my $class;
+       if (@_) {
+               $class = shift;
+       } elsif ($chan->isa('DXChannel')) {
+               $class = ref $chan;
+       }
+
+       # generate the line which may (or not) be cached
+       my @out;
+       if (my $ref = $thing->{class}) {
+               push @out, ref $ref ? @$ref : $ref;
+       } else {
+               no strict 'refs';
+               my $sub = "gen_$class";
+               push @out, $thing->$sub() if $thing->can($sub);
+       }
+       $chan->send(@out) if @out;
 }
 
-# dispatch Thingies to action it.
-sub process
-{
-       my $t = pop @queue if @queue;
-
-       $t->process if $t;
-}
 
 1;