Hello all! I have a problem with my code. I want to get a string from callback function, but AnyEvent::XMPP::Client uses non-blocked sockets and I can't get a string. There is example from my code:
use AnyEvent::XMPP::Client; my $j = AnyEvent->condvar; my $cl = AnyEvent::XMPP::Client->new (debug => $DEBUG); my %muc_commands = ( "version" => \&version_comm, ); # AnyEvent::XMPP::Client have callback message and I use it. $cl->->reg_cb( message => \&muc_incoming_message, ); $cl->start; $j->wait; sub muc_incoming_message { # Here I parse incoming message and if message is command for jabber bot, then I call function from hash of commands. if(defined(my $result = &{$muc_commands{$1}}($msg, $2))) { # And here i make answer object and send message with result. my $answer = new AnyEvent::XMPP::Ext::MUC::Message->new( body => "$from_nick: $result" ); $msg->make_reply($answer); $answer->send; } sub version_comm { my ($msg, $nick) = @_; my $version_obj = AnyEvent::XMPP::Ext::Version->new; our $version_ans; $version_obj->request_version($msg->room->connection, $nick, sub { my ($result, $error) = @_; if(defined $error) { $version_ans = "Can't get user's version."; } $version_ans = $result->{'name'}; print "$version_ans"; } ); print "$version_ans"; return $version_ans; } d...@dzen$ ./jbot.pl Use of uninitialized value in concatenation (.) or string at ./jbot_new.plline 257. Tkabber Word "Tkabber" wrote command print "$version_ans"; from request_version callback, but version_comm finished BEFORE callback function starts. I tried use $j->send and $j->$recv from AnyEvent kernel(example in the bottom of the message), but I have error : "AnyEvent::CondVar: recursive blocking wait detected at ./jbot.pl line 258" because I use $j->wait in my code. How can I get this string $result->{'name'} from callback to version_comm??? sub version_comm { my ($msg, $nick) = @_; my $version_obj = AnyEvent::XMPP::Ext::Version->new; our $version_ans; $version_obj->request_version($msg->room->connection, $nick, sub { my ($result, $error) = @_; if(defined $error) { $version_ans = "Can't get user's version."; } $version_ans = $result->{'name'}; print "$version_ans"; $j->send; } ); $j->recv; print "$version_ans"; return $version_ans; }