Базовый SFU SDK для g365sfu

This commit is contained in:
RoyceDa
2026-03-10 16:06:11 +02:00
parent d679a53f6e
commit b84f69da33
9 changed files with 305 additions and 11 deletions

View File

@@ -0,0 +1,56 @@
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<SFU> 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());
}
}
}
}