package im.rosetta.service.services; import java.util.HashSet; import java.util.Set; import im.rosetta.logger.Logger; import im.rosetta.logger.enums.Color; import io.g365sfu.SFU; /** * Это сервис который взаимодействуют с SFU серверами для организации звонков между пользователями. */ public class ForwardUnitService { private Logger logger; private Set sfuConnections = new HashSet<>(); public ForwardUnitService(Logger logger) { this.logger = logger; } /** * Инициализирует соединения к SFU серверам для звонков. * Ожидается, что адреса SFU серверов и секретные ключи для них будут переданы через переменную окружения SFU_SERVERS в формате "address1@secretKey1,address2@secretKey2,...". * Для каждого сервера будет предпринята попытка установить соединение и выполнить рукопожатие. * Если соединение не может быть установлено или рукопожатие не удается, * будет выведено сообщение об ошибке в лог, но процесс продолжится для остальных серверов. * Успешные подключения будут сохранены в наборе sfuConnections для дальнейшего использования */ public void connectToAllSFUServers() { String sfuServersEnv = System.getenv("SFU_SERVERS"); if(sfuServersEnv == null || sfuServersEnv.isEmpty()) { this.logger.info(Color.YELLOW + "No SFU servers configured, skipping SFU connections boot"); return; } String[] sfuServers = sfuServersEnv.split(","); for(String sfuServer : sfuServers) { String[] parts = sfuServer.split("@"); if(parts.length != 2) { this.logger.error(Color.RED + "Invalid SFU server configuration: " + sfuServer); continue; } String address = parts[0]; String secretKey = parts[1]; try { SFU connection = new SFU(address, secretKey); connection.connect(); this.sfuConnections.add(connection); this.logger.info(Color.GREEN + "Successfully connected to SFU server: " + address); } catch (Exception e) { this.logger.error(Color.RED + "Failed to connect to SFU server: " + address + ", error: " + e.getMessage()); } } } }