ProxiDoz / vacuum-im

Automatically exported from code.google.com/p/vacuum-im
GNU General Public License v3.0
0 stars 0 forks source link

Improve Chat State Notifications (XEP-0085) algorythms #375

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Right now XEP-0085: Chat State Notifications implemented this way:
1. ACTIVE state sent when user opens a chat session with you, or whhe a message 
to you sent
2. COMPOSING state sent when user starts typing in a chat with you
3. PAUSED sent by a timeout after last symbol sent during COMPOSING
4. INACTIVE send when user closes chat session with you
5. GONE sent by a timeout after INACTIVE (and maybe PAUSED and ACTIVE) state 
sent

This implementation have a weak point: timeouts are not really much 
informative, 'cause you can easily notice that there is no activity from the 
other side for a long time. On the other hand there are few events, which could 
be useful to determine chat state and notify other side, but not used right now.
They are:
1. Chat window lost focus
2. User switches to another tab in a chat window
3. Chat window were closed (please, don't confuse with chat closed!)
4. Chat window were minimized

I sugest another algorythm of determing chat states and notifying other side. 
This algorythm do not use timeouts at all and chat states are based on user 
actions only:
1. ACTIVE state sent when user opens chat to you or switches back to the chat 
window to the tab with your chat
2. COMPOSING state sent when user starts typing in a chat with you
3. PAUSED state sent when chat window loses input focus or user switched to 
another tab in COMPOSING state
4. INACTIVE state sent when chat window either closed or minimized (hidden)
5. GONE state sent when user closes chat to you (this is compatible with Psi, 
which also sends GONE when user closes chat with you and displays "User ended 
conversation" message when receives this notification.)

Of course, as it stated in XEP-0085 after a chat state sent it will not be sent 
anymore, until other chat state is sent, even when appropriate condition 
triggered once again!

На текущий момент, XEP-0085: Уведомления о 
Состоянии Чата реализованы следующим 
образом:
1. Состояние ACTIVE отправляется, когда 
пользователь открывает чет-сессию с Вами, а 
также, в момент отправки Вам сообщения
2. Состояние COMPOSING отправляется, когда 
пользователь начинает набирать текст в 
окне чата с Вами
3. Состояние PAUSED отправляется, если прошло 
некоторое время с момента ввода последнего 
символа в состоянии COMPOSING
4. Состояние INACTIVE отправляется, когда 
пользователь закрывает чат-сессию с Вами
5. Состояние GONE отправляется, если прошло 
некоторое время с момента отправки 
состояния INACTIVE (а возможно, также PAUSED и ACTIVE)

Данная реализация имеет слабое место: 
использование временных интервалов не 
очень информативно, т. к. Вы и сами можете 
заметить, что другая сторона в течение 
некоторого времени не проявляет 
активности. С другой стороны, есть 
несколько событий, которые были бы полезны 
для определения состояния чата и 
уведомления другой стороны, но которые 
сейчас не используются.
Это:
1. Окно чата теряет фокус
2. Пользователь переключился на другую 
вкладку в окне чата
3. Окно чата было закрыто (пожалуйста, не 
путать с закрытием чата!)
4. Окно чата было минимизировано (спрятано)

Я предлагаю другой алгоритм определения 
состояний чата и уведомления другой 
стороны. Данный алгоритм вообще, не 
использует временные задержки, а состояния 
чата основаны только лишь на действиях 
пользователя:

1. Состояние ACTIVE отправляется, когда 
пользователь открывает чет-сессию с Вами, а 
также, в момент отправки Вам сообщения
2. Состояние COMPOSING отправляется, когда 
пользователь начинает набирать текст в 
окне чата с Вами
3. Состояние PAUSED отправляется, если окно 
чата теряет фокус, либо пользователь 
переключается на другую вкладку чата в 
состоянии COMPOSING
4. Состояние INACTIVE отправляется, когда 
пользователь закрывает или минимизирует 
(прячет) окно чата
5. Состояние GONE отправляется, когда 
пользователь закрывает чат-сессию с Вами 
(это совместимо с Psi, который также 
отправляет уведомление GONE, когда 
пользователь закрывает чат с Вами и 
отображает сообщение "Пользователь 
закончил диалог", получив данное 
уведомление)

Конечно, как оговорено в XEP-0085, после 
отправки любого состояния чата, оно больше 
не будет отправлено до тех пор, пока не 
будет отправлено какое-либо другое 
состояние, даже если соответствующее 
условие сработает ещё раз!

Original issue reported on code.google.com by yagimo...@gmail.com on 19 Jan 2011 at 5:35

GoogleCodeExporter commented 8 years ago

Original comment by potapov.s.a on 3 Feb 2011 at 11:51

GoogleCodeExporter commented 8 years ago

Original comment by potapov.s.a on 2 Dec 2014 at 7:31