Пользователь открывает приложение. Приложение отправляет post запрос на Вконтакт с параметрами { method: getMessages, session: [viewer_id] }.
Т.е. приложение получает историю сообщений из определенной комнаты, с номером равным id текущего пользователя. На основании ответа определяет список юзеров присутствующих в чате. Я предполагаю, если время сообщения пользователя меньше текущего времени на определенное количество, то пользователь считается покинувшим чат. Иначе присутствует.
Если пользователь входит в какую-то комнату (session), то приложение шлет запрос { method: sendMessage, session: [id комнаты], message: %%join }.
Далее клиенты опрашивают Вконтакт через getMessages и если встречают %%join, то добавляют юзера в список пользователей в комнате.
Скорее всего так, я думаю
