summaryrefslogtreecommitdiffstats
path: root/dcopperl/DCOP/Object.pm
diff options
context:
space:
mode:
Diffstat (limited to 'dcopperl/DCOP/Object.pm')
-rw-r--r--dcopperl/DCOP/Object.pm41
1 files changed, 41 insertions, 0 deletions
diff --git a/dcopperl/DCOP/Object.pm b/dcopperl/DCOP/Object.pm
new file mode 100644
index 00000000..e98f65b5
--- /dev/null
+++ b/dcopperl/DCOP/Object.pm
@@ -0,0 +1,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__
+