Как обновить список пользователей с помощью DWR - PullRequest
1 голос
/ 22 апреля 2011

Я разрабатываю клиент чата, который может подключаться к Gtalk и Facebook. Я использую DWR для этой цели.

После входа в систему мне необходимо заполнить списки пользователей. На стороне клиента у меня есть

function showUsersOnline() {
    var cellFuncs = [ function(user) {

        return '<i>'+user+'</i>';
    } ];
    LoginG.usersOnline( {
        callback : function(users) {
            dwr.util.removeAllRows('usersOnline');
            dwr.util.addRows("usersOnline", users, cellFuncs, {
                escapeHtml : false
            });

На стороне сервера я использую Smack Api для получения списка (онлайн)

public void usersOnline() {
    Roster roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();
    System.out.println(roster.getEntryCount());
    int count1 = 0;
    int count2 = 0;
    for (RosterEntry r : entries) {
        String user = r.getUser();
        Presence presence = roster.getPresence(user);
        if (presence.getType() == Presence.Type.available) {
            System.out.println(user + " is online");
            count1++;

        } else {
            System.out.println(user + " is offline");
            count2++;
        }

Теперь я должен вернуть данные в формате JSON или есть способ, которым DWR может обработать коллекцию ???

1 Ответ

0 голосов
/ 22 апреля 2011

Если вы измените свой серверный метод usersOnline(), чтобы он возвращал объект Collection<RosterEntry>, тогда DWR заполняет это в аргументе функции обратного вызова, которая в вашем случае равна function(users). Таким образом, после возврата вызова обратно к функции обратного вызова function(users) вы можете пройти через объект users, чтобы получить обновления, сделанные для него методом на стороне сервера. Объект users необходимо будет пройти как array, поскольку вы возвращаете Collection или List независимо от того, что применимо.

Это то, что вы ищете? Подробнее об этом можно прочитать здесь .

...