--- deliantra/server/ext/ota_update.ext 2012/01/09 17:48:11 1.3 +++ deliantra/server/ext/ota_update.ext 2012/11/11 04:29:11 1.5 @@ -4,27 +4,29 @@ # TODO: same face, different hashes, face needs new number -cf::register_exticmd ota_update => sub { - my ($ns, $urlader, $exe_id, $exe_ver) = @_; +cf::register_async_exticmd ota_update => sub { + my ($ns, $reply, $urlader, $exe_id, $exe_ver) = @_; - my ($face, $ver, $size, $md5, $changes); + Coro::async_pool { + my ($face, $ver, $size, $md5, $changes); - if ($face = cf::face::find "res/ota_update/$urlader,$exe_id.pck") { - my $meta = cf::face::get_meta $face; + if ($face = cf::face::find "res/ota_update/$urlader,$exe_id.pck") { + my $meta = cf::face::get_meta $face; - if ($meta->{exe_ver} gt $exe_ver) { - $size = cf::face::get_data_size $face; - $ver = $meta->{exe_ver}; - $md5 = $meta->{md5}; - if (my $changes_face = cf::face::find "res/ota_update/Changes") { - $changes = cf::face::get_data $changes_face; - $changes =~ s/^\(\Q$exe_ver\E\).*$//sm; + if ($meta->{exe_ver} gt $exe_ver) { + $size = cf::face::get_size $face; + $ver = $meta->{exe_ver}; + $md5 = $meta->{md5}; + if (my $changes_face = cf::face::find "res/ota_update/Changes") { + $changes = cf::face::get_data $changes_face; + $changes =~ s/^\(\Q$exe_ver\E\).*$//sm; + } } } - } - cf::info "ota update request for <$urlader, $exe_id, $exe_ver> replying <$face,$ver,$size,*>"; + cf::info "ota update request for <$urlader, $exe_id, $exe_ver> replying <$face,$ver,$size,*>"; - (1, $face, $ver, $size, $md5, $changes) + $reply->(1, $face, $ver, $size, $md5, $changes); + }; };