--- deliantra/server/ext/widget.ext 2007/07/21 18:01:26 1.11 +++ deliantra/server/ext/widget.ext 2007/07/23 21:02:50 1.13 @@ -12,6 +12,8 @@ # w_r rid res # widget call return # w_e id name args # widget_event +our $DEBUG = 1; + cf::client->attach ( on_connect => sub { my ($ns) = @_; @@ -127,7 +129,7 @@ my $ws = bless { id => $id, ns => $self, - w => {}, + _w => {}, }, "ext::widget::set"; $ws->msg (ws_n => id => $id); @@ -157,6 +159,7 @@ if (my $ns = shift->{ns}) { $msg{msgtype} = $type; + warn "msg " . $ns->{json_coder}->encode (\%msg) if $DEBUG;#d# $ns->send_packet ("ext " . $ns->{json_coder}->encode (\%msg)); } } @@ -166,10 +169,11 @@ my $id = ++$self->{ns}{id}; - my $proxy = $self->{w}{$id} = bless { + my $proxy = bless { id => $id, }, "ext::widget::proxy"; + Scalar::Util::weaken ($self->{_w}{$id} = $proxy); Scalar::Util::weaken ($proxy->{ws} = $self); Scalar::Util::weaken ($proxy->{ns} = $self->{ns}); Scalar::Util::weaken ($self->{ns}{widget}{$id} = $proxy); @@ -180,7 +184,7 @@ } $self->msg (ws_c => - ws => $self->{w}{id}, + ws => $proxy->{id}, id => $id, class => $class, args => \%args, @@ -199,8 +203,8 @@ delete $self->{ns}{widget}{$self->{id}}; if (my $ws = $self->{ws}) { - delete $ws->{w}{$self->{id}}; $self->msg (w_c => name => "destroy"); + delete $ws->{_w}{$self->{id}}; } } @@ -245,9 +249,9 @@ } sub set { - my ($self, $member, $value) = @_; + my ($self, @kv) = @_; - $self->msg (w_s => attr => [ [$member, $value] ]); + $self->msg (w_s => attr => \@kv); } sub get {