2025-05-21 09:31:19 +00:00
|
|
|
using System;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using log4net;
|
|
|
|
|
using TBF.Rig.Network.Camera.CJMS11.POJO;
|
|
|
|
|
|
|
|
|
|
namespace TBF.Rig.Network.Camera.CJMS11
|
|
|
|
|
{
|
|
|
|
|
public class JmsPacket
|
|
|
|
|
{
|
|
|
|
|
private static readonly ILog log = LogManager.GetLogger(typeof(JmsPacket));
|
|
|
|
|
|
|
|
|
|
private JmsMessage jmsMessage;
|
2025-07-18 06:50:22 +00:00
|
|
|
private string messageOrigin;
|
|
|
|
|
|
|
|
|
|
public string MessageOrigin { get => messageOrigin; }
|
2025-05-21 09:31:19 +00:00
|
|
|
|
|
|
|
|
public JmsMessage JmsMessage
|
|
|
|
|
{
|
|
|
|
|
get => jmsMessage;
|
|
|
|
|
set => jmsMessage = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public JmsPacket(string message)
|
|
|
|
|
{
|
2025-07-18 06:50:22 +00:00
|
|
|
messageOrigin = message;
|
2025-05-21 09:31:19 +00:00
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
2025-07-18 06:50:22 +00:00
|
|
|
if (ParseMessage(messageOrigin))
|
2025-05-21 09:31:19 +00:00
|
|
|
{
|
|
|
|
|
//success
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
log.Error("Error parsing message: " + e.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool ParseMessage(string message)
|
|
|
|
|
{
|
|
|
|
|
message = message.Trim();
|
|
|
|
|
if (message.Length < 1) return false;
|
|
|
|
|
|
|
|
|
|
this.jmsMessage = JmsMessageFromString(message);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static JmsMessage JmsMessageFromString(string message)
|
|
|
|
|
{
|
|
|
|
|
// Equivalent regex pattern
|
|
|
|
|
var pattern = new Regex(@"^(ACK|NACK):\s*(\S+)\s*(?:~(.*)~)?\s*END$", RegexOptions.Singleline);
|
|
|
|
|
|
|
|
|
|
var match = pattern.Match(message);
|
|
|
|
|
if (match.Success)
|
|
|
|
|
{
|
|
|
|
|
string status = match.Groups[1].Value;
|
|
|
|
|
string commandStr = match.Groups[2].Value;
|
|
|
|
|
string payload = match.Groups[3].Success ? match.Groups[3].Value : "";
|
|
|
|
|
|
|
|
|
|
return new JmsMessage(status, commandStr, payload);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException($"Message format not recognized: {message}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static ParsedImage ImageParser(string payloadImage)
|
|
|
|
|
{
|
|
|
|
|
// Equivalent regex pattern
|
|
|
|
|
var imagePattern = new Regex(@"IMAGE:([A-Z0-9_]+):\s*(.*?)\s*~IMAGE_END", RegexOptions.Singleline);
|
|
|
|
|
|
|
|
|
|
var match = imagePattern.Match(payloadImage);
|
|
|
|
|
if (match.Success)
|
|
|
|
|
{
|
|
|
|
|
string encoding = match.Groups[1].Value;
|
|
|
|
|
string imageData = match.Groups[2].Value;
|
|
|
|
|
|
|
|
|
|
return new ParsedImage(ImageTypeEnum.GetCommandM(encoding), imageData);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException($"Payload does not match expected image format: {payloadImage}");
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-07-18 06:50:22 +00:00
|
|
|
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return string.Format("JmsPacket -> original message: {0} -> JmsMessage: {1}", messageOrigin, jmsMessage.ToString());
|
|
|
|
|
}
|
2025-05-21 09:31:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|