2011-12-20 45 views
1

我正在使用asmack XMPP與Android,但我遇到了問題。我希望玩家連接到XMPP服務器(只有在用戶名未被佔用的情況下)才能接收所有當前連接的用戶,並從列表中選擇一個用戶進行遊戲。asmack android 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服務器的地方。有沒有一個插件可以用來做到這一點 - 然後我可以從客戶端調用一些函數,這將調用該特定的插件,然後將響應所有的在線玩家。

我想任何提示是讚賞。謝謝

回答

1

我找到了解決辦法。要找到答案,您可以谷歌「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; 

    } 
+0

我怎麼能這樣做呢? – Ajay 2014-09-03 09:31:01

相關問題