Фикс смены онлайн-статуса при наличии нескольких устройств (статус становился офлайн при отключении одного из устройств, несмотря на то, что у пользователя есть еще второе)
This commit is contained in:
@@ -153,7 +153,7 @@ public class Boot {
|
|||||||
this.eventManager.registerListener(new ServerStopListener(this.logger));
|
this.eventManager.registerListener(new ServerStopListener(this.logger));
|
||||||
this.eventManager.registerListener(new HandshakeCompleteListener());
|
this.eventManager.registerListener(new HandshakeCompleteListener());
|
||||||
this.eventManager.registerListener(new OnlineStatusHandshakeCompleteListener(this.onlineManager));
|
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));
|
this.eventManager.registerListener(new DeviceListListener(this.clientManager));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class OnlineManager {
|
|||||||
* @param client клиент, который отписывается от всех (отключается)
|
* @param client клиент, который отписывается от всех (отключается)
|
||||||
*/
|
*/
|
||||||
public void unsubscribeAll(Client 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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import im.rosetta.client.ClientManager;
|
||||||
import im.rosetta.client.OnlineManager;
|
import im.rosetta.client.OnlineManager;
|
||||||
import im.rosetta.client.tags.ECIAuthentificate;
|
import im.rosetta.client.tags.ECIAuthentificate;
|
||||||
import im.rosetta.event.EventHandler;
|
import im.rosetta.event.EventHandler;
|
||||||
@@ -23,9 +24,11 @@ import io.orprotocol.client.Client;
|
|||||||
public class OnlineStatusDisconnectListener implements Listener {
|
public class OnlineStatusDisconnectListener implements Listener {
|
||||||
|
|
||||||
private OnlineManager onlineManager;
|
private OnlineManager onlineManager;
|
||||||
|
private ClientManager clientManager;
|
||||||
|
|
||||||
public OnlineStatusDisconnectListener(OnlineManager onlineManager) {
|
public OnlineStatusDisconnectListener(OnlineManager onlineManager, ClientManager clientManager) {
|
||||||
this.onlineManager = onlineManager;
|
this.onlineManager = onlineManager;
|
||||||
|
this.clientManager = clientManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -39,6 +42,17 @@ public class OnlineStatusDisconnectListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<Client> subscribers = this.onlineManager.getSubscribers(client);
|
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