XiangTan_JiaoJie_Bak/DM_Weight/Port/ScreenUtil.cs

172 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}