using HslCommunication.Core.IMessage; using HslCommunication.WebSocket; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Org.BouncyCastle.Asn1.Ocsp; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using WIDESEA_Core.Caches; using WIDESEA_Core.Helper; using WIDESEA_Core.Seed; namespace WIDESEA_Core { public class WebSocketHostedService : IHostedService { private readonly DBContext _dbContext; private readonly ICacheService _cacheService; private readonly WebSocketServer _webSocketServer; public WebSocketHostedService(DBContext dbContext, ICacheService cacheService, WebSocketServer webSocketServer) { _webSocketServer = webSocketServer; _dbContext = dbContext; _cacheService = cacheService; _webSocketServer.OnClientConnected += webSocketServer_OnClientConnected; } private void webSocketServer_OnClientConnected(WebSocketSession session) { string MessageInfo = _cacheService.Get("MessageInfo"); if (!string.IsNullOrEmpty(MessageInfo)) { List? messages = JsonConvert.DeserializeObject>(MessageInfo); if (messages != null && messages.Count > 0) { foreach (var item in messages) { object obj = new { title = item.MessageGroupBy, name = item.MessageName, message = item.MessageInfo, date = DateTime.Now.ToString(), }; //_webSocketServer.PublishAllClientPayload(obj.Serialize()); _webSocketServer.SendClientPayload(session, obj.Serialize()); } } } } public async Task StartAsync(CancellationToken cancellationToken) { //WebSocketSession? webSocketSession = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(App.User.UserName)); //string MessageInfo = _cacheService.Get("MessageInfo"); //if (!string.IsNullOrEmpty(MessageInfo)) //{ // List? messages = JsonConvert.DeserializeObject>(MessageInfo); // if (messages != null && messages.Count > 0) // { // foreach (var item in messages) // { // object obj = new // { // title = item.MessageGroupBy, // name = item.MessageName, // message = item.MessageInfo, // date = item.Date, // }; // //_webSocketServer.PublishAllClientPayload(obj.Serialize()); // if (webSocketSession != null) // _webSocketServer.SendClientPayload(webSocketSession, obj.Serialize()); // } // } //} await Task.CompletedTask; } public async Task StopAsync(CancellationToken cancellationToken) { await Task.CompletedTask; } public class Message { public int Id { get; set; } public string MessageGroupBy { get; set; } public string MessageName { get; set; } public string MessageInfo { get; set; } public DateTime Date { get; set; } } } }