fix(net): 优化数据包解析及日志记录逻辑
- 在 NewCurrentCollectorParser 中增加正则校验,提高数据包匹配准确性 - 修复 Packet 类中 length 属性的格式问题,确保正确访问 - 调整 PacketParserFactory,修复可能的空数据问题,增强健壮性 - TcpServer 中新增 logMessage 方法拆分日志记录逻辑 - 根据包匹配结果分别记录详细或简化日志,增强调试信息 - 修复 TcpServer 中不匹配数据包时的响应,避免无效处理
This commit is contained in:
+1
-1
@@ -177,7 +177,7 @@ class Packet
|
||||
get => $this->rawText;
|
||||
}
|
||||
|
||||
public int $length{
|
||||
public int $length {
|
||||
get => strlen($this->rawBytes);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,11 +15,17 @@ class NewCurrentCollectorParser implements PacketParserInterface
|
||||
|
||||
public function parse(string $hexString): array
|
||||
{
|
||||
return [
|
||||
'hexType' => 4,
|
||||
'isMatched' => true,
|
||||
'detectionDevice' => substr($hexString, 16, 2),
|
||||
'channel1' => substr($hexString, 24, 2),
|
||||
];
|
||||
$pattern = '/^BBBB([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{8})$/';
|
||||
|
||||
if (preg_match($pattern, $hexString, $matches)) {
|
||||
return [
|
||||
'hexType' => 4,
|
||||
'isMatched' => true,
|
||||
'detectionDevice' => substr($hexString, 16, 2),
|
||||
'channel1' => substr($hexString, 24, 2),
|
||||
];
|
||||
}
|
||||
|
||||
return ['isMatched' => false];
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,9 @@ class PacketParserFactory
|
||||
/**
|
||||
* 防止克隆(保障单例唯一性)
|
||||
*/
|
||||
private function __clone() {}
|
||||
private function __clone()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* 防止反序列化(保障单例唯一性)
|
||||
@@ -91,7 +93,7 @@ class PacketParserFactory
|
||||
}
|
||||
}
|
||||
|
||||
return new Packet($rawBytes, $parsedData);
|
||||
return new Packet($rawBytes, $parsedData ?? []);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user