繁体   English   中英

asmack android XMPP-获取所有用户

[英]asmack android XMPP - get all users

我在Android上使用了asmack XMPP,但是我遇到了问题。 我想让一个播放器连接到XMPP服务器(仅当尚未使用用户名时),接收所有当前连接的用户,并从列表中选择一个用户进行播放。

目前,我正在这样登录XMPP服务器:

/* then connect with a newly created username */
try {
  if (connection != null && connection.isConnected()) {
    connection.login(username, password);
  }
} catch (XMPPException e) {
  Log.w("[xmpp_login] Cannot connect to XMPP server with username: " + username, "0");
  e.printStackTrace();
}

为了创建用户,我使用以下代码:

      /* required attributes for creation of a new account */
        HashMap<String, String> attr = new HashMap<String, String>();
        attr.put("username", username);
        attr.put("password", password);
        manager.createAccount(username, password, attr);
      } catch (XMPPException e) {
        Log.w("[create_user] Cannot create new user: XMPP Exception.", "0");
        Log.w(e.getMessage(), "0");
        e.printStackTrace();
      } catch (IllegalStateException e) {
        Log.w("[create_user] Cannot create new user: not logged in.", "0");
        e.printStackTrace();
      }

我有两个问题:

  1. 如何检查用户名是否已被使用?
  2. 如何向每个播放器返回当前所有已连接(在线)用户的列表? 由于我已经搜索过,发现没有任何用处,所以我想我必须在服务器端提供该功能。 这是我使用openfire XMPP服务器的地方。 是否有一个我可以使用的插件来做到这一点-然后我可以从客户端调用某个功能,该客户端将调用该特定插件,该插件随后将与所有在线播放器响应。

我想任何提示都值得赞赏。 谢谢

我找到了解决方案。 要找到答案,您可以谷歌“ XMPP共享组”。 基本上,我已经完成了以下工作:

  1. 在openfire XMPP服务器中创建一个新组。
  2. 在用户下,请确保选中“启用自动将新用户添加到组中”。

当然,您必须为这些首选项启用正确的模块,才能显示这些首选项。

然后,我们只需编写以下函数即可从XMPP服务器返回所有用户:

  /*
   * Return a list of #num players currently connected. (if #num == 0: return
   * all players)
   */
  public ArrayList<String> xmpp_playerlist(int num) {

    try {
      if (!connection.isConnected())
        connection.connect();

      if (!connection.isAuthenticated())
        connection.login(user, pass);

    } catch (XMPPException e) {
      Log.w("Cannot connect to XMPP server with default admin username and password.", "0");
      e.printStackTrace();
    }

    ArrayList<String> players = new ArrayList<String>();
    roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();

    for (RosterEntry entry : entries) {
      players.add(entry.getName());
    }
    Log.w("**Number Users: " + roster.getEntryCount(), "0");

    return players;

  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM