2

私は次のようなコードを持っています:

 1  sub do_leave {
 2
 3    my ($asterisk, $event) = @_;
 4    my $join_id;
 5    my $id = $astman->send_action({ Action    => 'Getvar',
 6                                    Variable  => 'join_id',
 7                                    Channel   => $event->{'Channel'},
 8                                  }, \&get_value, undef, \$join_id);
 9
10    sleep(2);
11    say "join_id is: $join_id";
12
13    my $sql = "UPDATE conference_log SET duration=(TIMESTAMPDIFF(SECOND, (SELECT start_conf), NOW())), end_conf=(NOW()) WHERE id=?";
14    my $sth = $dbh->prepare($sql);
15    $sth->execute($join_id);
16  }
17
18  sub get_value {
19    my ($ast, $resp, $ref_join_id) = @_;
20    for my $key (keys %$resp) {
21      if ($key eq "PARSED") {
22        $$ref_join_id = $resp->{$key}{"Value"};
23      }
24    }
25  }

アスタリスクAMIから情報を取得するためにアスタリスク::AMIモジュールを使用しています。do_leaveサブは、誰かが会議から退出するたびに呼び出されます。私の質問はget_value、 のすべてのステートメントの後にコールバックが実行されることdo_leaveです。10 行目より前にコールバックを実行するにはどうすればよいですかget_value。変数\$join_idinsend_actionは、コールバックの 3 番目の引数です。$join_idSQLステートメントの前に変数が必要です。

4

2 に答える 2