Базовый SFU SDK для g365sfu
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user