using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CoreAgent.ProtocolClient.Enums; using CoreAgent.ProtocolClient.Models; using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; namespace CoreAgent.ProtocolClient.ProtocolWsClient { public partial class ProtocolWsClient { #region 消息分发与业务流程 private void OnMessageReceived(object? sender, JObject message) { MessageReceived?.Invoke(this, message); if (_messageManager.MessageIdManager.HandleMessageResponse(message, error => ConnectionError?.Invoke(this, error))) { return; } if (!_authManager.IsAuthenticated) { _authManager.HandleMessage(message); return; } _protocolLogProcessor.HandleMessage(message); _statsManager.HandleMessage(message); } private void OnSocketReady() { if (_isReady) return; _logger.LogInformation($"[{_config.Name}] WebSocket准备就绪,开始初始化"); _isReady = true; var firstCon = _config.Logs.Layers.Count == 0; SendMessage(new JObject { ["message"] = "config_get" }, config => { _logger.LogInformation($"[{_config.Name}] 配置已接收"); _context.LogContext.ResetLogs(); _context.BasicInfo.Version = config["version"]?.ToString(); _context.BasicInfo.Name = config["name"]?.ToString() ?? _config.Name; _context.BasicInfo.Model = config["type"]?.ToString(); var ro = _config.Readonly; var serverLogsConfig = config["logs"]?.ToObject(); if (ro || firstCon) { if (serverLogsConfig != null) _config.Logs = serverLogsConfig; } if (config["cells"] != null) { var cells = config["cells"]?.ToObject>(); if (cells != null) { foreach (var cell in cells) { var data = cell.Value.ToObject(); _context.CellParameterManager.AddCell(Convert.ToInt32(cell.Key), data); } } } SetState(ClientState.Connected); if (ro) { _protocolLogProcessor.GetLogs(new Dictionary { ["timeout"] = 0 }); } else { _protocolLogProcessor.SetLogsConfig(_config.Logs); } _statsManager.Start(true); }); } #endregion } }