Cleanup offline streams
This commit is contained in:
@ -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,7 +36,15 @@ public class BackgroundStreamManager : BackgroundService
|
||||
foreach (var id in liveStreams)
|
||||
{
|
||||
var manager = await streamManager.ForStream(id);
|
||||
await manager.UpdateViewers();
|
||||
var client = await srs.GetClient(manager.GetStream().ClientId);
|
||||
if (client != default)
|
||||
{
|
||||
await manager.UpdateViewers();
|
||||
}
|
||||
else
|
||||
{
|
||||
await manager.StreamStopped();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -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; }
|
||||
}
|
||||
|
Reference in New Issue
Block a user