KukaTcpCommunication.cs 1.72 KB
using DataAcquisition.Models;
using System.Text;
using System.Xml;

namespace DataAcquisition.Common.Communications
{
    public class KukaTcpCommunication : TcpClientCommunication
    {
        public KukaTcpCommunication(int communicationId, string ip, int port) : base(communicationId, ip, port)
        {
        }

        public override void Read(IEnumerable<EquipmentProperty> equipmentProperties)
        {
            var stream = tcpClient.GetStream();
            stream.Write(Encoding.Default.GetBytes($"<Ext><Msg>{Guid.NewGuid().ToString("N")[..8]}</Msg></Ext>"));

            var buffer = new byte[8192];
            stream.Read(buffer);
            var bufferString = Encoding.Default.GetString(buffer).TrimEnd('\0');
            if (!string.IsNullOrWhiteSpace(bufferString))
            {
                var xml = new XmlDocument();
                xml.LoadXml(bufferString);
                foreach (var property in equipmentProperties)
                {
                    property.Value = xml.DocumentElement?.SelectSingleNode(property.Code)?.InnerText ?? string.Empty;
                }
            }
        }

        public override void Write(IEnumerable<EquipmentProperty> equipmentProperties)
        {
            var xml = new XmlDocument();
            var robot = xml.CreateElement("Robot");
            foreach (var property in equipmentProperties)
            {
                var element = xml.CreateElement(property.Code);
                element.InnerText = property.Value ?? string.Empty;
                robot.AppendChild(element);
            }
            xml.AppendChild(robot);
            var stream = tcpClient.GetStream();
            stream.Write(Encoding.Default.GetBytes(xml.InnerXml));
        }
    }
}