0

我试图从我的 IRC 机器人中的 package_state 获取输出数据,它使用 POE::Component::IRC 作为基础。但我似乎无法做到。

基本上,在 POE 会话之外的子例程中,我希望在 POE 从服务器接收数据时从事件子例程中获取数据。我尝试将数据保存在全局数组甚至外部文件中,但是外部子例程会在更新数据之前从中读取旧数据。

更具体地说,我试图让这个机器人检查某人是否是“ison”,如果是,则返回 true(或从 irc_303 获取所有数据(@_))。

像这样的东西:

sub check_ison {
    my $who = "someguy";
    $irc->yield(ison => $who);
    $data = (somehow retrieve data from irc_303);
    return $data; #or true if $data
}
4

1 回答 1

0

听起来您想要一个异步问题的同步解决方案。由于 IRC(和 POE,就此而言......)的异步特性,您需要发出 ISON 查询并处理传入的数字响应。

据我所知,大多数客户端 NOTIFY 实现​​会定期发出 ISON(POE::Component::IRC 通过 POE::Component::Syndicator 提供计时器糖),更新它们的状态,并告诉用户是否有变化。

你有选择...

您可以在计时器上发出 ISON,在数字响应处理程序中适当地保存状态,并提供查询状态的方法。如果您的应用程序看起来更像一个客户端(用户/某事需要在某事发生变化时得到通知,也就是说)您的数字响应处理程序可以进行一些基本的列表比较,并为用户出现/消失发出适当的事件。

否则,您可以简单地拥有一个“check_ison”,它发出 ISON 并从数字响应处理程序中产生某种“收到响应”事件,让您知道有新数据可用。

于 2013-12-30T00:43:45.737 回答