summaryrefslogtreecommitdiffstats
path: root/dcopperl/DCOP/Object.pm
blob: e98f65b5580b1b761615b2d81d3249ffaa9fab5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package DCOP::Object;

use strict;
use vars qw($VERSION $AUTOLOAD);

$VERSION = '0.01';

sub AUTOLOAD()
{
    my $funcname;
    ($funcname = $AUTOLOAD) =~ s/.*:://;
    return if $funcname eq 'DESTROY';
    my $self = shift;
    foreach my $func (map {DCOP::canonicalizeSignature $_}
                          @{DCOP::remoteFunctions($self->{CLIENT}, $self->{APP}, $self->{OBJ})})
    {
        my $argstr = $func;
        $argstr =~ s/.*\((.*)\)/$1/;
        my @args = split /,/, $argstr;
        next unless $func =~ /^$funcname\(/ && scalar(@args) == scalar(@_);
        unshift @_, $self->{CLIENT}, $self->{APP}, $self->{OBJ}, "$func";
        defined wantarray ? goto &DCOP::call : goto &DCOP::send;
    }
    die 'Function "', $self->{APP}, '.', $self->{OBJ}, ".$funcname()\" doesn't exist.";
}

sub _app()
{
    my $self = shift;
    $self->{APP};
}

sub _object()
{
    my $self = shift;
    $self->{OBJ};
}

1;
__END__