X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FObject-Remote.git;a=blobdiff_plain;f=lib%2FObject%2FRemote.pm;h=fc6e9557643fae60f0fb00d17a9039ee5161d9f4;hp=25f0349c017198bdb51ce94f5a06a0e83a63f507;hb=11dbd4a02cce95ee689233d2b1d2392470518732;hpb=dc28afe80b27f0eb81eef66e6ba554a7c1fb6e41 diff --git a/lib/Object/Remote.pm b/lib/Object/Remote.pm index 25f0349..fc6e955 100644 --- a/lib/Object/Remote.pm +++ b/lib/Object/Remote.pm @@ -1,84 +1,27 @@ package Object::Remote; use Object::Remote::MiniLoop; -use Object::Remote::Proxy; -use Scalar::Util qw(weaken blessed); -use Object::Remote::Future; +use Object::Remote::Handle; use Module::Runtime qw(use_module); -use Moo; sub new::on { my ($class, $on, @args) = @_; - __PACKAGE__->new( - connection => $on, - class => $class, - args => \@args - )->proxy; + my $conn = __PACKAGE__->connect($on); + return $conn->remote_object(class => $class, args => \@args); } -has connection => ( - is => 'ro', required => 1, - coerce => sub { - blessed($_[0]) - ? $_[0] - : use_module('Object::Remote::Connection')->new_from_spec($_[0]) - }, -); - -has id => (is => 'rwp'); - -has disarmed_free => (is => 'rwp'); - -sub disarm_free { $_[0]->_set_disarmed_free(1); $_[0] } - -sub proxy { - bless({ remote => $_[0], method => 'call' }, 'Object::Remote::Proxy'); +sub new { + shift; + Object::Remote::Handle->new(@_)->proxy; } -sub BUILD { - my ($self, $args) = @_; - unless ($self->id) { - die "No id supplied and no class either" unless $args->{class}; - ref($_) eq 'HASH' and $_ = [ %$_ ] for $args->{args}; - $self->_set_id( - await_future( - $self->connection->send( - class_call => $args->{class}, 0, - $args->{constructor}||'new', @{$args->{args}||[]} - ) - )->{remote}->disarm_free->id - ); - } - $self->connection->register_remote($self); +sub connect { + my ($class, $to) = @_; + use_module('Object::Remote::Connection')->new_from_spec($to); } sub current_loop { our $Current_Loop ||= Object::Remote::MiniLoop->new } -sub call { - my ($self, $method, @args) = @_; - my $w = wantarray; - future { - $self->connection->send(call => $self->id, $w, $method, @args) - }; -} - -sub call_discard { - my ($self, $method, @args) = @_; - $self->connection->send_discard(call => $self->id, $method, @args); -} - -sub call_discard_free { - my ($self, $method, @args) = @_; - $self->disarm_free; - $self->connection->send_discard(call_free => $self->id, $method, @args); -} - -sub DEMOLISH { - my ($self, $gd) = @_; - return if $gd or $self->disarmed_free; - $self->connection->send_free($self->id); -} - 1;