172 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
using DM_Weight.Models;
 | 
						||
using log4net;
 | 
						||
using SuperSimpleTcp;
 | 
						||
using System;
 | 
						||
using System.Collections.Generic;
 | 
						||
using System.IO;
 | 
						||
using System.Linq;
 | 
						||
using System.Text;
 | 
						||
using System.Threading.Channels;
 | 
						||
using System.Threading.Tasks;
 | 
						||
using System.Windows.Markup;
 | 
						||
 | 
						||
namespace DM_Weight.Port
 | 
						||
{
 | 
						||
    public class ScreenUtil
 | 
						||
    {
 | 
						||
        private readonly ILog logger = LogManager.GetLogger(typeof(ScreenUtil));
 | 
						||
        SimpleTcpServer server = new SimpleTcpServer("0.0.0.0:8888");
 | 
						||
 | 
						||
        string ipport { get; set; } = "";
 | 
						||
        public ScreenUtil()
 | 
						||
        {
 | 
						||
            server.Events.ClientConnected += (object sender, ConnectionEventArgs e) =>
 | 
						||
            {
 | 
						||
                ipport = e.IpPort;
 | 
						||
                logger.Info($"[{e.IpPort}] client connected");
 | 
						||
            };
 | 
						||
            server.Events.ClientDisconnected += (object sender, ConnectionEventArgs e) =>
 | 
						||
            {
 | 
						||
                logger.Info($"[{e.IpPort}] client disconnected: {e.Reason}");
 | 
						||
            };
 | 
						||
            server.Events.DataReceived += (object sender, DataReceivedEventArgs e) =>
 | 
						||
            {
 | 
						||
                logger.Info($"[{e.IpPort}]: {e.Data.Array}");
 | 
						||
            };
 | 
						||
            // let's go!
 | 
						||
            server.Start();
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        private byte[] head = new byte[] { 0xee, 0xb1, 0x12 };
 | 
						||
 | 
						||
        private byte[] end = new byte[] { 0xFF, 0xFC, 0xFF, 0xFF };
 | 
						||
        public void SetStockInfo(ChannelStock channel, int screenId)
 | 
						||
        {
 | 
						||
            // 添加画面id
 | 
						||
            byte[] a = Copy2NewArr(head, HighLow(screenId));
 | 
						||
 | 
						||
 | 
						||
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 | 
						||
            //if (channel.DrugInfo.DrugName != null)
 | 
						||
            //{
 | 
						||
            byte[] content = Encoding.GetEncoding("gb2312").GetBytes(channel.DrugInfo?.DrugName??"");
 | 
						||
                a = WriteInfo(a, content, channel.ColNo * 10 + 1);
 | 
						||
            //}
 | 
						||
            //if (channel.DrugInfo.Manufactory != null)
 | 
						||
            //{
 | 
						||
                byte[] content1 = Encoding.GetEncoding("gb2312").GetBytes(channel.DrugInfo?.Manufactory?? "");
 | 
						||
                a = WriteInfo(a, content1, channel.ColNo * 10 + 2);
 | 
						||
            //}
 | 
						||
            //if (channel.DrugInfo.DrugSpec != null)
 | 
						||
            //{
 | 
						||
                byte[] content2 = Encoding.GetEncoding("gb2312").GetBytes(channel.DrugInfo?.DrugSpec ?? "");
 | 
						||
                a = WriteInfo(a, content2, channel.ColNo * 10 + 3);
 | 
						||
            //}
 | 
						||
            //if (channel.ManuNo != null)
 | 
						||
            //{
 | 
						||
 | 
						||
                byte[] content3 = Encoding.GetEncoding("gb2312").GetBytes(channel.ManuNo);
 | 
						||
                a = WriteInfo(a, content3, channel.ColNo * 10 + 4);
 | 
						||
            //}
 | 
						||
            //if (channel.EffDate != null)
 | 
						||
            //{
 | 
						||
                byte[] content4 = Encoding.GetEncoding("gb2312").GetBytes(channel.EffDate);
 | 
						||
                a = WriteInfo(a, content4, channel.ColNo * 10 + 5);
 | 
						||
            //}
 | 
						||
            //if (channel.Quantity != null)
 | 
						||
            //{
 | 
						||
                byte[] content5 = Encoding.GetEncoding("gb2312").GetBytes(channel.Quantity.ToString());
 | 
						||
                a = WriteInfo(a, content5, channel.ColNo * 10 + 6);
 | 
						||
            //}
 | 
						||
            // 添加结束块
 | 
						||
            byte[] b = Copy2NewArr(a, end);
 | 
						||
            server.Send(ipport, b);
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        public void TellChange(int d)
 | 
						||
        {
 | 
						||
            byte[] buffer = new byte[] { 0xee, 0xb5, 0x01, 0x00, 0xFF, 0xFC, 0xFF, 0xFF };
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
        public void SetStockInfo(List<ChannelStock> channels, int screenId)
 | 
						||
        {
 | 
						||
            // 添加画面id
 | 
						||
            byte[] a = Copy2NewArr(head, HighLow(screenId));
 | 
						||
 | 
						||
 | 
						||
            for (int i = 0; i < channels.Count; i++)
 | 
						||
            {
 | 
						||
                ChannelStock channel = channels[i];
 | 
						||
                if (channel.DrugInfo.DrugName != null)
 | 
						||
                {
 | 
						||
                    byte[] content = Encoding.ASCII.GetBytes(channel.DrugInfo.DrugName);
 | 
						||
                    a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 1);
 | 
						||
                }
 | 
						||
                if (channel.DrugInfo.Manufactory != null)
 | 
						||
                {
 | 
						||
                    byte[] content = Encoding.ASCII.GetBytes(channel.DrugInfo.Manufactory);
 | 
						||
                    a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 2);
 | 
						||
                }
 | 
						||
                if (channel.DrugInfo.DrugSpec != null)
 | 
						||
                {
 | 
						||
                    byte[] content = Encoding.ASCII.GetBytes(channel.DrugInfo.DrugSpec);
 | 
						||
                    a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 3);
 | 
						||
                }
 | 
						||
                if (channel.ManuNo != null)
 | 
						||
                {
 | 
						||
 | 
						||
                    byte[] content = Encoding.ASCII.GetBytes(channel.ManuNo);
 | 
						||
                    a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 4);
 | 
						||
                }
 | 
						||
                if (channel.EffDate != null)
 | 
						||
                {
 | 
						||
                    byte[] content = Encoding.ASCII.GetBytes(channel.EffDate);
 | 
						||
                    a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 5);
 | 
						||
                }
 | 
						||
                if (channel.Quantity != null)
 | 
						||
                {
 | 
						||
                    byte[] content = Encoding.ASCII.GetBytes(channel.Quantity.ToString());
 | 
						||
                    a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 6);
 | 
						||
                }
 | 
						||
 | 
						||
 | 
						||
            }
 | 
						||
            // 添加结束块
 | 
						||
            byte[] b = Copy2NewArr(a, end);
 | 
						||
            server.Send(ipport, b);
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        public byte[] WriteInfo(byte[] a, byte[] content, int id)
 | 
						||
        {
 | 
						||
            // 添加控件id
 | 
						||
            byte[] b = Copy2NewArr(a, HighLow(id));
 | 
						||
            // 添加需要向控件内写入的字节长度
 | 
						||
            byte[] c = Copy2NewArr(b, HighLow(content.Length));
 | 
						||
            // 写入内容
 | 
						||
            return Copy2NewArr(c, content);
 | 
						||
        }
 | 
						||
 | 
						||
        public byte[] HighLow(int data)
 | 
						||
        {
 | 
						||
            byte high = Convert.ToByte((data >> 8) & 0x00ff); //位运算:右移8位
 | 
						||
            byte low = Convert.ToByte(data & 0x00ff);         //去掉高位
 | 
						||
            return new byte[] {high, low};
 | 
						||
        }
 | 
						||
 | 
						||
        public byte[] Copy2NewArr(byte[] source1, byte[] source2)
 | 
						||
        {
 | 
						||
            byte[] target = new byte[source1.Length + source2.Length];
 | 
						||
            Buffer.BlockCopy(source1, 0, target, 0, source1.Length);
 | 
						||
            Buffer.BlockCopy(source2, 0, target, source1.Length, source2.Length);
 | 
						||
            return target;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
    }
 | 
						||
}
 |