Фикс смены онлайн-статуса при наличии нескольких устройств (статус становился офлайн при отключении одного из устройств, несмотря на то, что у пользователя есть еще второе)
This commit is contained in:
@@ -153,7 +153,7 @@ public class Boot {
|
||||
this.eventManager.registerListener(new ServerStopListener(this.logger));
|
||||
this.eventManager.registerListener(new HandshakeCompleteListener());
|
||||
this.eventManager.registerListener(new OnlineStatusHandshakeCompleteListener(this.onlineManager));
|
||||
this.eventManager.registerListener(new OnlineStatusDisconnectListener(this.onlineManager));
|
||||
this.eventManager.registerListener(new OnlineStatusDisconnectListener(this.onlineManager, this.clientManager));
|
||||
this.eventManager.registerListener(new DeviceListListener(this.clientManager));
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public class OnlineManager {
|
||||
* @param client клиент, который отписывается от всех (отключается)
|
||||
*/
|
||||
public void unsubscribeAll(Client client) {
|
||||
this.onlineSubscriptions.remove(client);
|
||||
this.onlineSubscriptions.entrySet().removeIf(entry -> entry.getKey().equals(client));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,6 +3,7 @@ package im.rosetta.listeners;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import im.rosetta.client.ClientManager;
|
||||
import im.rosetta.client.OnlineManager;
|
||||
import im.rosetta.client.tags.ECIAuthentificate;
|
||||
import im.rosetta.event.EventHandler;
|
||||
@@ -23,9 +24,11 @@ import io.orprotocol.client.Client;
|
||||
public class OnlineStatusDisconnectListener implements Listener {
|
||||
|
||||
private OnlineManager onlineManager;
|
||||
private ClientManager clientManager;
|
||||
|
||||
public OnlineStatusDisconnectListener(OnlineManager onlineManager) {
|
||||
public OnlineStatusDisconnectListener(OnlineManager onlineManager, ClientManager clientManager) {
|
||||
this.onlineManager = onlineManager;
|
||||
this.clientManager = clientManager;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@@ -39,6 +42,17 @@ public class OnlineStatusDisconnectListener implements Listener {
|
||||
return;
|
||||
}
|
||||
List<Client> subscribers = this.onlineManager.getSubscribers(client);
|
||||
/**
|
||||
* Проверяем не онлайн ли клиент с другого устройства
|
||||
*/
|
||||
if(this.clientManager.getPKClients(eciAuthentificate.getPublicKey()).size() > 1) {
|
||||
/**
|
||||
* Больше одного устройства онлайн (значит есть другое устройство онлайн),
|
||||
* так что просто удаляем все подписки на онлайн у конкретно этого клиента
|
||||
*/
|
||||
this.onlineManager.unsubscribeAll(client);
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Уведомляем всех подписчиков на его онлайн статус, что он отключился (ушел в оффлайн)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user