123456789101112131415161718192021222324252627282930313233343536373839 |
- using System.Threading.Channels;
- using Microsoft.Extensions.Logging;
- namespace CompServ.Hub
- {
- public class HubWorkerHolder(ILogger<HubWorkerHolder> logger)
- {
- internal readonly List<(string url, int ratio)> Workers = new();
- internal readonly Channel<string> Queue1 = Channel.CreateBounded<string>(1);
- public void RegisterWorker(string url, int ratio)
- {
- logger.LogInformation($"Register worker: {url} with ratio {ratio}");
- lock (Workers)
- {
- if (Workers.Any(p => p.url == url)) return;
- Workers.Add((url, ratio));
- }
- }
- public void UnRegisterWorker(string url)
- {
- logger.LogInformation($"Un Register worker: {url}");
- lock (Workers)
- {
- var found = Workers.FirstOrDefault(p => p.url == url);
- if (found != default) Workers.Remove(found);
- }
- }
- public async Task<string> GetWorkerAsync()
- {
- var url = await Queue1.Reader.ReadAsync();
- logger.LogInformation($"Assign worker: {url}");
- return url;
- }
- }
- }
|