Изменение домена с rosetta-im.com на rosetta.im
This commit is contained in:
102
src/main/java/im/rosetta/service/dispatch/DeviceDispatcher.java
Normal file
102
src/main/java/im/rosetta/service/dispatch/DeviceDispatcher.java
Normal file
@@ -0,0 +1,102 @@
|
||||
package im.rosetta.service.dispatch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import im.rosetta.client.ClientManager;
|
||||
import im.rosetta.client.tags.ECIDevice;
|
||||
import im.rosetta.database.entity.Device;
|
||||
import im.rosetta.database.repository.DeviceRepository;
|
||||
import im.rosetta.packet.Packet23DeviceList;
|
||||
import im.rosetta.packet.runtime.DeviceSolution;
|
||||
import im.rosetta.packet.runtime.NetworkDevice;
|
||||
import im.rosetta.packet.runtime.NetworkStatus;
|
||||
import im.rosetta.service.services.DeviceService;
|
||||
|
||||
import io.orprotocol.ProtocolException;
|
||||
import io.orprotocol.client.Client;
|
||||
|
||||
/**
|
||||
* Диспетчер устройств, который отвечает за списки устройств в аккаунте
|
||||
*/
|
||||
public class DeviceDispatcher {
|
||||
|
||||
private ClientManager clientManager;
|
||||
private DeviceRepository deviceRepository = new DeviceRepository();
|
||||
private DeviceService deviceService = new DeviceService(deviceRepository);
|
||||
|
||||
public DeviceDispatcher(ClientManager clientManager) {
|
||||
this.clientManager = clientManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправит список подключенных устройств всем авторизованным устройствам с publicKey
|
||||
* @param publicKey публичный ключ аккаунта, для которого нужно отправить список устройств
|
||||
*/
|
||||
public void sendDevices(String publicKey) throws ProtocolException {
|
||||
/**
|
||||
* Получаем список авторизованных устройств, а так же список устройств которые сейчас в сети
|
||||
*/
|
||||
List<Device> verifiedDevices = deviceService.getDevicesByPK(publicKey);
|
||||
List<ECIDevice> onlineDevices = this.getOnlineDevices(publicKey);
|
||||
|
||||
Map<String, NetworkDevice> byId = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Верифицированные устройства, по умолчанию оффлайн, но верифицированные
|
||||
*/
|
||||
for (Device d : verifiedDevices) {
|
||||
String id = d.getDeviceId();
|
||||
NetworkDevice nd = new NetworkDevice();
|
||||
nd.setDeviceId(id);
|
||||
nd.setDeviceSolution(DeviceSolution.ACCEPT);
|
||||
nd.setNetworkStatus(NetworkStatus.OFFLINE);
|
||||
nd.setDeviceName(d.getDeviceName());
|
||||
nd.setDeviceOs(d.getDeviceOs());
|
||||
byId.put(id, nd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Подгоняем онлайн статус, если усотройство верифицированно, то оно найдется
|
||||
* в Map, если устройства там нет соотвественно оно не верифицированно
|
||||
*/
|
||||
for (ECIDevice od : onlineDevices) {
|
||||
String id = od.getDeviceId();
|
||||
NetworkDevice nd = byId.get(id);
|
||||
if (nd == null) {
|
||||
nd = new NetworkDevice();
|
||||
nd.setDeviceId(id);
|
||||
nd.setDeviceSolution(DeviceSolution.DECLINE);
|
||||
nd.setDeviceName(od.getDeviceName());
|
||||
nd.setDeviceOs(od.getDeviceOs());
|
||||
byId.put(id, nd);
|
||||
}
|
||||
nd.setNetworkStatus(NetworkStatus.ONLINE);
|
||||
}
|
||||
|
||||
List<NetworkDevice> networkDevices = new ArrayList<>(byId.values());
|
||||
Packet23DeviceList packet = new Packet23DeviceList();
|
||||
packet.setDevices(networkDevices);
|
||||
this.clientManager.sendPacketToAuthorizedPK(publicKey, packet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список устройств которые сейчас в сети для публичного ключа (берутся и не авторизованные устройства, так как они тоже в сети)
|
||||
* @param publicKey публичный ключ аккаунта, для которого нужно получить список устройств которые сейчас в сети
|
||||
* @return список устройств которые сейчас в сети для публичного ключа
|
||||
*/
|
||||
private List<ECIDevice> getOnlineDevices(String publicKey) {
|
||||
List<ECIDevice> onlineDevices = new java.util.ArrayList<>();
|
||||
List<Client> clients = clientManager.getPKClients(publicKey);
|
||||
for(Client client : clients){
|
||||
ECIDevice deviceTag = client.getTag(ECIDevice.class);
|
||||
if(deviceTag != null){
|
||||
onlineDevices.add(deviceTag);
|
||||
}
|
||||
}
|
||||
return onlineDevices;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user