等待哈希图更改的调用函数

Posted

技术标签:

【中文标题】等待哈希图更改的调用函数【英文标题】:Call function which waits till hashmap changes 【发布时间】:2014-08-01 22:49:38 【问题描述】:

当使用 api Pircbot (Irc Bot API) 时,我需要调用一个方法,该方法一直等到从不同的方法更改了 hasmap。 例子: 用户执行命令 !isRegistered。现在 Pircbot 会检查用户是否被 NickServ 注册。

@Override
protected void onMessage(String channel, String sender, String login, String hostname, String message) 
    if (command("isRegistered", message) && checkRegistered(sender)) 
        sendMessage(sender,"You are registered);
    
;

我认为,HashMap<String, Boolean> 是正确的做法。

private void checkRegistered(String sender) 
checkRegister.put(Sender,null);
sendMessage("NickServ", "info sender");
//Wait till onNotices changes the HashMap so that i can get an result (hasmap content: null -> true, or false) and returning this result)

//A simple Thread.sleep(); does not work, because everything runs on the main Thread. -> When     sleeping the bot times out, because it can't reply to the /ping command from the server. 

每当 pircbot 收到 NOTICE 时,我都可以获取字符串

@Override protected void onNotice(String sourceNick, String sourceLogin, String sourceHostname, String target, String notice)

所以我这样做了:

@Override
protected void onNotice(String sourceNick, String sourceLogin, String sourceHostname, String target, String notice) 
    if (sourceLogin.equals("NickServ")) 
        for (String s : checkRegister.keySet()) 
            if (notice.contains("Nickname:") && notice.contains(s)) 
                checkRegister.put(s, notice.contains("<< ONLINE >>"));
            
        
    

我现在如何检查 hasmap 是否已更改,例如checkRegistered(); 方法中的 from null -> true 还是 from null -> false?

【问题讨论】:

【参考方案1】:

您可以混合使用 Observer-Observable 和 HashMap。

一开始,客户端将自己注册为 Observers 或 HashMap,当 Map 发生变化时,会向所有 Observers 发送消息。

观察者示例代码:

http://javarevisited.blogspot.ca/2011/12/observer-design-pattern-java-example.html http://www.journaldev.com/1739/observer-design-pattern-in-java-example-tutorial

具体来说,对于您的问题“我现在如何检查 hasmap 是否在 checkRegistered(); 方法中从 null -> true 或从 null -> false 更改?”

将通知客户端属性的值已从一个值更改为另一个值,这意味着消息将包含属性名称、当前值和新值。

【讨论】:

以上是关于等待哈希图更改的调用函数的主要内容,如果未能解决你的问题,请参考以下文章

分析特定函数 C++

可变哈希图键是一种危险的做法吗?

XState:等待调用函数的响应

哈希图共识算法

Java Swing 在等待方法时在 actionPerformed 函数中更改 UI 两次

将哈希图转换为数组[重复]