Cleanup offline streams

This commit is contained in:
2023-07-26 10:34:52 +01:00
parent 3c16cb51d4
commit a5b358ab0f
2 changed files with 29 additions and 4 deletions

View File

@ -25,6 +25,7 @@ public class BackgroundStreamManager : BackgroundService
var streamManager = scope.ServiceProvider.GetRequiredService<StreamManagerFactory>();
var db = scope.ServiceProvider.GetRequiredService<StreamerContext>();
var srs = scope.ServiceProvider.GetRequiredService<SrsApi>();
var liveStreams = await db.Streams
.AsNoTracking()
@ -35,8 +36,16 @@ public class BackgroundStreamManager : BackgroundService
foreach (var id in liveStreams)
{
var manager = await streamManager.ForStream(id);
var client = await srs.GetClient(manager.GetStream().ClientId);
if (client != default)
{
await manager.UpdateViewers();
}
else
{
await manager.StreamStopped();
}
}
}
catch (Exception ex)
{

View File

@ -18,10 +18,9 @@ public class SrsApi
return rsp!.Streams;
}
public async Task<Stream> GetStream(string id)
public async Task<Stream?> GetStream(string id)
{
var rsp = await _client.GetFromJsonAsync<Stream>($"/api/v1/streams/{id}");
return rsp!;
return await _client.GetFromJsonAsync<Stream>($"/api/v1/streams/{id}");
}
public async Task<List<Client>> ListClients()
@ -30,6 +29,12 @@ public class SrsApi
return rsp!.Clients;
}
public async Task<Client?> GetClient(string cid)
{
var rsp = await _client.GetFromJsonAsync<GetClientResponse>($"/api/v1/clients/{cid}");
return rsp?.Client;
}
public async Task KickClient(string clientId)
{
await _client.SendAsync(new HttpRequestMessage(HttpMethod.Delete, $"/api/v1/clients/{clientId}"));
@ -192,3 +197,14 @@ public class ListClientsResponse
public List<Client> Clients { get; set; }
}
public class GetClientResponse
{
[JsonProperty("code")]
public int? Code { get; set; }
[JsonProperty("server")]
public string Server { get; set; }
[JsonProperty("client")]
public Client Client { get; set; }
}