--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/23 21:03:26 1.128 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/23 23:37:57 1.129 @@ -129,34 +129,32 @@ # widgetset new $self->connect_ext (ws_n => sub { - my ($arg) = @_; + my ($id) = @_; - $self->{widgetset}{$arg{id}} = { + $self->{widgetset}{$id} = { w => {}, }; }); # widgetset destroy $self->connect_ext (ws_d => sub { - my ($arg) = @_; + my ($id) = @_; - my $ws = delete $self->{widgetset}{$arg{id}} + my $ws = delete $self->{widgetset}{$id} or return; $_->destroy for values %{$ws->{w}}; }); - # widgetset destroy + # widgetset create $self->connect_ext (ws_c => sub { - my ($arg) = @_; - - my $args = $arg->{args} || {}; + my ($ws, $id, $class, $args) = @_; for my $ev (grep /^on_/, keys %$args) { $args->{$ev} = sub { my $id = shift->{s_id}; - $self->send_exti_msg (w_e => id => $id, name => $ev, args => \@_); + $self->send_exti_msg (w_e => $id, $ev, \@_); 1 }; @@ -164,15 +162,15 @@ if (my $widget = eval { local $SIG{__DIE__}; - "CFPlus::UI::$arg->{class}"->new ( + "CFPlus::UI::$class"->new ( %$args, - s_ws => $arg->{ws}, - s_id => $arg->{id}, + s_ws => $ws, + s_id => $id, ) } ) { - $self->{widget}{$arg->{id}} - = $self->{widgetset}{$arg->{ws}}{w}{$arg->{id}} + $self->{widget}{$id} + = $self->{widgetset}{$ws}{w}{$id} = $widget; $widget->connect (on_destroy => sub { @@ -182,37 +180,34 @@ delete $self->{widgetset}{$widget->{s_ws}}{$widget->{s_id}}; }); } else { - warn "server failed creating client-side widget " . (CFPlus::to_json $arg) . ": $@\n"; - $self->send_exti_msg (w_e => id => $arg->{id}, name => "destroy"); + warn "server failed creating client-side widget " . (CFPlus::to_json $class) . ": $@\n"; + $self->send_exti_msg (w_e => $id, "destroy"); } }); # widget call $self->connect_ext (w_c => sub { - my ($arg) = @_; + my ($id, $rid, $method, $args) = @_; - my $w = $self->{widget}{$arg->{id}} + my $w = $self->{widget}{$id} or return; - my $m = $arg->{name}; - my $a = $arg->{args} || []; + $args ||= []; - if (exists $arg->{rid}) { - $self->send_exti_msg (w_r => rid => $arg->{rid}, res => [$w->$m (@$a)]); + if ($rid) { + $self->send_exti_msg (w_r => $rid, [$w->$method (@$args)]); } else { - $w->$m (@$a); + $w->$method (@$args); } }); # widget set $self->connect_ext (w_s => sub { - my ($arg) = @_; + my ($id, $attr) = @_; - my $w = $self->{widget}{$arg->{id}} + my $w = $self->{widget}{$id} or return; - my $attr = $arg->{attr}; - for (my $i = 0; $i < $#$attr; $i += 2) { my ($member, $value) = @$attr[$i, $i+1]; if (defined $value) { @@ -226,12 +221,12 @@ # widget get $self->connect_ext (w_g => sub { - my ($arg) = @_; + my ($id, $rid, $attr) = @_; - my $w = $self->{widget}{$arg->{id}} + my $w = $self->{widget}{$id} or return; - $self->send_exti_msg (w_r => rid => $arg->{rid}, res => [map $w->{$_}, @{$arg->{attr}}]); + $self->send_exti_msg (w_r => $rid, [map $w->{$_}, @$attr]); }); # destroy widgets on logout