123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using Microsoft.AspNetCore.Mvc;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK;
- using Microsoft.AspNetCore.SignalR;
- using HTEX.Complex.Services;
- using System.Text.Json;
- using TEAMModelOS.SDK.Extension;
- namespace HTEX.Complex.Controllers
- {
- [ApiController]
- [Route("api/screen")]
- public class ScreenController : ControllerBase
- {
- private readonly DingDing _dingDing;
- private readonly IHttpClientFactory _httpClient;
- private readonly IConfiguration _configuration;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureRedisFactory _azureRedis;
- private readonly IHubContext<SignalRScreenServerHub> _screenServerHub;
- private readonly ILogger<ScreenController> _logger;
- public ScreenController(AzureRedisFactory azureRedis, IHttpClientFactory httpClient, IConfiguration configuration, AzureStorageFactory azureStorage,
- DingDing dingDing, IHubContext<SignalRScreenServerHub> screenServerHub , ILogger<ScreenController> logger)
- {
- _httpClient = httpClient;
- _configuration = configuration;
- _azureStorage = azureStorage;
- _dingDing = dingDing;
- _azureRedis=azureRedis;
- _screenServerHub = screenServerHub;
- _logger = logger;
- }
- /// <summary>
- /// 外部触发任务发送
- /// </summary>
- /// <returns></returns>
- [HttpPost("send-task")]
- public async Task<IActionResult> SendTask(JsonElement json)
- {
- var values = await _azureRedis.GetRedisClient(8).HashGetAllAsync("ScreenApi:clients");
- if (values!=null)
- {
- foreach (var value in values)
- {
- ScreenClient screenClient = value.Value.ToString().ToObject<ScreenClient>();
- //先检查状态是否是在忙碌,在时间戳范围里,如果不在时间戳范围,强制free。
- if (!screenClient.status!.Equals(ScreenConstant.idle) && screenClient.last_time + screenClient.timeout+ screenClient.delay + ScreenConstant.time_excess < DateTimeOffset.UtcNow.ToUnixTimeMilliseconds())
- {
- screenClient.status = ScreenConstant.idle;
- }
- if (screenClient.status!.Equals(ScreenConstant.idle) && !string.IsNullOrWhiteSpace(screenClient.connid))
- {
- _logger.LogInformation($"客户端当前空闲=>{screenClient.name},{screenClient.region},{screenClient.clientid},分发任务......");
- //连接成功,马上分发任务。
- var task = await TaskService.SentTask(_azureRedis, _azureStorage);
- if (task.genQueue!=null && task.genRedis!=null && !string.IsNullOrWhiteSpace(task.genQueue.cntName))
- {
- screenClient.status = ScreenConstant.busy;
- screenClient.last_time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
- await _screenServerHub.Clients.Client(screenClient.connid!).SendAsync("ReceiveMessage", new ScreenProcessMessage
- {
- connid = screenClient.connid,
- clientid =screenClient.clientid,
- status = ScreenConstant.busy,
- grant_type =screenClient.grant_type,
- message_type= MessageType.task_send_success,
- content =$"{task.genQueue.ToJsonString()}",//从Redis中获取任务信息
- });
- }
- else
- {
- _logger.LogInformation($"客户端当前空闲=>{screenClient.name},{screenClient.region},{screenClient.clientid},暂无任务可领取的任务......");
- if (task.genRedis!=null)
- {
- string msgError = $"分发任务异常原因=>{screenClient.name},{screenClient.region},{screenClient.clientid}:{task.msg}\ngenQueue:{task.genQueue?.ToJsonString()}\ngenRedis:{task.genRedis?.ToJsonString()}";
- _logger.LogInformation(msgError);
- await _dingDing.SendBotMsg(msgError, GroupNames.成都开发測試群組);
- }
- else
- {
- _logger.LogInformation($"分发任务异常原因=>{screenClient.name},{screenClient.region},{screenClient.clientid}:{task.msg}\n");
- }
- await _screenServerHub.Clients.Client(screenClient.connid!).SendAsync("ReceiveMessage", new ScreenProcessMessage
- {
- connid = screenClient.connid,
- clientid = screenClient.clientid,
- status = ScreenConstant.idle,
- grant_type = screenClient.grant_type,
- message_type= MessageType.task_send_error,
- content = task.msg
- });
- }
- }
- await _azureRedis.GetRedisClient(8).HashSetAsync($"ScreenApi:clients", screenClient.clientid, screenClient.ToJsonString());
- }
- }
- else { }
- return Ok();
- }
- }
- }
|