wanshenmean
3 天以前 b690250002ee04f4309e6a90fd16fbfd9bd959e2
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
@@ -89,11 +89,19 @@
        public async Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client)
        {
            var state = _stateManager.GetState(client.Client.RemoteEndPoint.ToString());
            if (state.OperStatus == message)
            // 设备状态不存在时直接返回,避免后续空引用
            if (state == null)
            {
                // 处理成功后,将原消息回写到客户端(保持原有行为)
                //await _socketClientGateway.SendMessageAsync(client, message);
                return null;
            }
            // 获取该设备的互斥锁,确保消息处理与 Job 执行互斥
            // Job 在处理任务时会等待此锁释放后才继续执行
            var robotLock = _stateManager.GetOrCreateLock(state.IPAddress);
            await robotLock.WaitAsync();
            try
            {
            // 记录接收到的消息日志
            QuartzLogHelper.LogInfo(_logger, $"接收到客户端【{state.RobotCrane?.DeviceName}】发送消息【{message}】", state.RobotCrane?.DeviceName);
@@ -119,8 +127,8 @@
                QuartzLogHelper.LogInfo(_logger, $"接收到消息消息【{message}】,约定不返回发送消息:【{message}】", state.RobotCrane?.DeviceName);
                //}
                // 安全更新状态到数据库
                _stateManager.TryUpdateStateSafely(state.IPAddress, state);
                    //// 安全更新状态到数据库
                    //_stateManager.TryUpdateStateSafely(state.IPAddress, state);
                return null;
            }
@@ -131,6 +139,11 @@
                // 调用前缀命令处理器
                await _prefixCommandHandler.HandleAsync(message, state, client);
            }
            }
            finally
            {
                robotLock.Release();
            }
            return null;
        }