| | |
| | | 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); |
| | | |
| | |
| | | QuartzLogHelper.LogInfo(_logger, $"接收到消息消息【{message}】,约定不返回发送消息:【{message}】", state.RobotCrane?.DeviceName); |
| | | //} |
| | | |
| | | // 安全更新状态到数据库 |
| | | _stateManager.TryUpdateStateSafely(state.IPAddress, state); |
| | | //// 安全更新状态到数据库 |
| | | //_stateManager.TryUpdateStateSafely(state.IPAddress, state); |
| | | return null; |
| | | } |
| | | |
| | |
| | | // 调用前缀命令处理器 |
| | | await _prefixCommandHandler.HandleAsync(message, state, client); |
| | | } |
| | | } |
| | | finally |
| | | { |
| | | robotLock.Release(); |
| | | } |
| | | |
| | | return null; |
| | | } |