Cleanup offline streams
This commit is contained in:
@ -25,6 +25,7 @@ public class BackgroundStreamManager : BackgroundService
|
|||||||
|
|
||||||
var streamManager = scope.ServiceProvider.GetRequiredService<StreamManagerFactory>();
|
var streamManager = scope.ServiceProvider.GetRequiredService<StreamManagerFactory>();
|
||||||
var db = scope.ServiceProvider.GetRequiredService<StreamerContext>();
|
var db = scope.ServiceProvider.GetRequiredService<StreamerContext>();
|
||||||
|
var srs = scope.ServiceProvider.GetRequiredService<SrsApi>();
|
||||||
|
|
||||||
var liveStreams = await db.Streams
|
var liveStreams = await db.Streams
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
@ -35,7 +36,15 @@ public class BackgroundStreamManager : BackgroundService
|
|||||||
foreach (var id in liveStreams)
|
foreach (var id in liveStreams)
|
||||||
{
|
{
|
||||||
var manager = await streamManager.ForStream(id);
|
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)
|
catch (Exception ex)
|
||||||
|
@ -18,10 +18,9 @@ public class SrsApi
|
|||||||
return rsp!.Streams;
|
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 await _client.GetFromJsonAsync<Stream>($"/api/v1/streams/{id}");
|
||||||
return rsp!;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Client>> ListClients()
|
public async Task<List<Client>> ListClients()
|
||||||
@ -30,6 +29,12 @@ public class SrsApi
|
|||||||
return rsp!.Clients;
|
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)
|
public async Task KickClient(string clientId)
|
||||||
{
|
{
|
||||||
await _client.SendAsync(new HttpRequestMessage(HttpMethod.Delete, $"/api/v1/clients/{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 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