using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
using WindowsFormsApp1.Common;
using WindowsFormsApp1.Controllers;
using WindowsFormsApp1.Entity;
using WindowsFormsApp1.Helper;
using WindowsFormsApp1.Item;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
private Metafile metafile1;
private Graphics.EnumerateMetafileProc metafileDelegate;
private MqttClient client = null;
public Form1()
{
InitializeComponent();
}
string _UserNo { get { return MqttconfigHelp.UserName.Trim(); } }
string _PW { get { return MqttconfigHelp.Password.Trim(); } }
private bool MetafileCallback(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)
{
byte[] dataArray = null;
if (data != IntPtr.Zero)
{
dataArray = new byte[dataSize];
Marshal.Copy(data, dataArray, 0, dataSize);
//GdipComment
metafile1.PlayRecord(recordType, flags, dataSize, dataArray);
switch (recordType) //记录类型
{
case EmfPlusRecordType.Object: //对象
case EmfPlusRecordType.DrawLines: //线
case EmfPlusRecordType.SetPageTransform: //设置页变换
break;
}
}
Console.WriteLine(recordType.ToString());
return true;
}
protected override void OnPaint(PaintEventArgs e)
{
//PointF destPoint = new PointF(e.ClipRectangle.X, e.ClipRectangle.Y);
//e.Graphics.EnumerateMetafile(metafile1, destPoint, metafileDelegate);
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
//metafile1.Dispose();
}
string emf { get; set; }
///
/// 导出为 Emf 或 Wmf 文件
///
/// 文件路径
/// 是否成功
private bool Export(string filePath)
{
filePath = @"D:\CompanyCode\DIXWeb\src\WindowsFormsApp1\imgs\imgup.jpg";
//filePath = @"C:\Users\Administrator\Desktop\Debug\1.jpg";
FileInfo fi = new FileInfo(filePath);
emf = Path.GetDirectoryName(filePath) + "\\1.emf";
fi.CopyTo(emf,true);
try
{
Bitmap bmp = new Bitmap(2220, 2220);
Graphics gs = Graphics.FromImage(bmp);
Metafile mf = new Metafile(emf, gs.GetHdc());
Graphics g = Graphics.FromImage(mf);
//string sf = System.IO.Path.GetDirectoryName(filePath) + "1.wmf";
//mf.Save(sf, ImageFormat.Wmf);
Draw(g);
g.Save();
g.Dispose();
mf.Dispose();
return true;
}
catch(Exception er)
{
MessageBox.Show(er.Message);
return false;
}
}
///
/// 绘制图形
///
/// 用于绘图的Graphics对象
private void Draw(Graphics g)
{
HatchBrush hb = new HatchBrush(HatchStyle.LightUpwardDiagonal, Color.Black, Color.White);
g.FillEllipse(Brushes.Gray, 10f, 10f, 200, 200);
g.DrawEllipse(new Pen(Color.Black, 1f), 10f, 10f, 200, 200);
g.FillEllipse(hb, 30f, 95f, 30, 30);
g.DrawEllipse(new Pen(Color.Black, 1f), 30f, 95f, 30, 30);
g.FillEllipse(hb, 160f, 95f, 30, 30);
g.DrawEllipse(new Pen(Color.Black, 1f), 160f, 95f, 30, 30);
g.FillEllipse(hb, 95f, 30f, 30, 30);
g.DrawEllipse(new Pen(Color.Black, 1f), 95f, 30f, 30, 30);
g.FillEllipse(hb, 95f, 160f, 30, 30);
g.DrawEllipse(new Pen(Color.Black, 1f), 95f, 160f, 30, 30);
g.FillEllipse(Brushes.Blue, 60f, 60f, 100, 100);
g.DrawEllipse(new Pen(Color.Black, 1f), 60f, 60f, 100, 100);
g.FillEllipse(Brushes.BlanchedAlmond, 95f, 95f, 30, 30);
g.DrawEllipse(new Pen(Color.Black, 1f), 95f, 95f, 30, 30);
g.DrawRectangle(new Pen(System.Drawing.Brushes.Blue, 0.1f), 6, 6, 208, 208);
g.DrawLine(new Pen(Color.Black, 0.1f), 110f, 110f, 220f, 25f);
g.DrawString("剖面图", new Font("宋体", 9f), Brushes.Green, 220f, 20f);
}
private void button1_Click(object sender, EventArgs e)
{
string MotifName=txtFilePath.Text.ToString();
var db = SqlSugarConnection.SugarClient();
List ToprieMotifList = db.SqlQueryable("select * from Toprie_Motif").Where(m => m.IsVal == 0).ToList();
if (ToprieMotifList.Where(m => m.MotifName == MotifName).ToList().Count() == 0)
{
if (!string.IsNullOrEmpty(MotifName))
{
Toprie_Motif ToprieMotif = new Toprie_Motif();
ToprieMotif.Code = SnowFlakeSingle.Instance.NextId().ToString();
ToprieMotif.MotifName = MotifName;
ToprieMotif.Address = "";
ToprieMotif.Remark = "";
ToprieMotif.IsVal = 0;
ToprieMotif.CreateCode = "5105986045";
ToprieMotif.CreateTime = DateTime.Now;
InsertToprieMotif(ToprieMotif);
MessageBox.Show("新增成功", "提示");
}else {
MessageBox.Show("请输入订阅主题", "提示");
}
}
else{
MessageBox.Show("当前主题已添加,无法重复添加", "提示");
}
}
private void button2_Click(object sender, EventArgs e)
{
}
///
/// 发布消息成功后调用的事件
///
///
///
private void client_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e)
{
MessageBox.Show("发布消息成功。", "信息");
}
///
/// 订阅主题成功后调用的事件
///
///
///
private void client_MqttMsgSubscribed(object sender, MqttMsgSubscribedEventArgs e)
{
}
///
/// 取消订阅主题成功后调用的事件
///
///
///
private void client_MqttMsgUnsubscribed(object sender, MqttMsgUnsubscribedEventArgs e)
{
MessageBox.Show("取消订阅主题成功。", "信息");
}
///
/// 当接收到订阅主题的消息时调用的事件
///
///
///
private void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
SnowFlakeSingle.WorkId =1;
try {
this.Invoke(new Action(() =>
{
txt_SubscribeMessage.Text += DateTime.Now.ToString("yyyy/MM/dd-HH:mm:ss") + " Received topic: " + e.Topic + ", message: " + Encoding.UTF8.GetString(e.Message) + "\n";
string Topic = e.Topic;
string Message = Encoding.UTF8.GetString(e.Message);
bool DupFlag = e.DupFlag;
byte QosLevel = e.QosLevel;
bool Retain = e.Retain;
lbMsg.Items.Insert(0, Encoding.UTF8.GetString(e.Message));
lbMsg.Items.Insert(0, "订阅主题:"+ Topic+ "********************************************* --" + DateTime.Now.ToString("yyyy/MM/dd-HH:mm:ss"));
if (Message!= "getParam"){
ToreieItem ToreieItem = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(e.Message));
List ToprieList = new List();
if (ToreieItem.sensorDatas != null && ToreieItem.sensorDatas.Count() > 0)
{
foreach (var item in ToreieItem.sensorDatas)
{
Toprie obj = new Toprie();
obj.Code = SnowFlakeSingle.Instance.NextId().ToString();
obj.motif = Topic;
obj.times = ToreieItem.times;
obj.flag = item.flag;
obj.CreateCode = "5105986045";
obj.CreateTime = DateTime.Now;
switch (item.flag)
{
case FlagHelp.flag1:
case FlagHelp.flag2:
case FlagHelp.flag3:
case FlagHelp.flag4:
case FlagHelp.flag5:
case FlagHelp.flag7:
obj.val = item.value;
break;
case FlagHelp.flag6:
obj.switcher = item.switcher;
break;
case FlagHelp.flag8:
obj.lat = item.lat;
obj.lng = item.lng;
break;
case FlagHelp.flagICCID:
obj.str = item.str;
break;
default:
continue;
}
ToprieList.Add(obj);
}
}
InsertListToprieList(ToprieList);
}
}));
}
catch (Exception ex) {
string str = ex.ToString();
}
}
///
/// 当连接断开时调用的事件
///
///
///
private void client_ConnectionClosed(object sender, EventArgs e)
{
MessageBox.Show("连接已断开。", "信息");
}
///
/// 连接
///
///
///
private void btn_Connect_Click(object sender, EventArgs e)
{
try
{
string brokerAddress = MqttconfigHelp.BrokerAddress;
int brokerPort = MqttconfigHelp.BrokerPort;
client = new MqttClient(brokerAddress, brokerPort, false, null, null, MqttSslProtocols.None, null); //实例化mqtt客户端
string clientId = Guid.NewGuid().ToString("N"); //生成32位全球唯一标识符
client.Connect(clientId,"",""); //建立客户端连接
client.MqttMsgPublished += client_MqttMsgPublished; //发布消息成功后调用
client.MqttMsgSubscribed += client_MqttMsgSubscribed; //订阅主题成功后调用
client.MqttMsgUnsubscribed += client_MqttMsgUnsubscribed; //取消订阅主题成功后调用
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; //当接收到订阅主题的消息时调用
client.ConnectionClosed += client_ConnectionClosed; //连接断开后调用
MessageBox.Show("连接成功。", "信息");//
}
catch (Exception ex)
{
MessageBox.Show("连接失败!\n\r" + ex.Message.ToString(), "警告");
}
}
///
/// 断开连接
///
///
///
private void btn_DisConnect_Click(object sender, EventArgs e)
{
client.Disconnect();
}
///
/// 发布消息
///
///
///
private void btn_Publish_Click(object sender, EventArgs e)
{
//string publishTopic = txt_PublishTopic.Text.ToString(); //发布的主题
//string publishMessage = txt_PublishMessage.Text.ToString(); //发布的消息
//client.Publish(publishTopic, Encoding.UTF8.GetBytes(publishMessage)); //发布消息
}
///
/// 订阅消息
///
///
///
private void btn_Subscribe_Click(object sender, EventArgs e)
{
try {
client = new MqttClient(MqttconfigHelp.BrokerAddress,MqttconfigHelp.BrokerPort, false, null, null, MqttSslProtocols.None, null); //实例化mqtt客户端
string clientId = Guid.NewGuid().ToString("N"); //生成32位全球唯一标识符
client.Connect(clientId, MqttconfigHelp.UserName, MqttconfigHelp.Password); //建立客户端连接
client.MqttMsgPublished += client_MqttMsgPublished; //发布消息成功后调用
client.MqttMsgSubscribed += client_MqttMsgSubscribed; //订阅主题成功后调用
client.MqttMsgUnsubscribed += client_MqttMsgUnsubscribed; //取消订阅主题成功后调用
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; //当接收到订阅主题的消息时调用
client.ConnectionClosed += client_ConnectionClosed;//连接断开后调用
string[] subscribeTopic = Toprie_MotifList().Split(','); //可以同时订阅多个主题的消息,各主题之间用逗号分隔
byte[] qosLevels = new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE };
foreach (var item in subscribeTopic){
string[] MotifNameList ={ item };
client.Subscribe(MotifNameList, qosLevels);
}
//this.Opacity = 0;
MessageBox.Show("订阅主题成功。", "信息");
}
catch (Exception ex){
MessageBox.Show(ex.Message.ToString(),"异常");
}
}
///
/// 取消订阅消息
///
///
///
private void btn_UnSubscribe_Click(object sender, EventArgs e)
{
string[] unSubscribeTopic =null;
client.Unsubscribe(unSubscribeTopic);
}
///
/// 窗口关闭事件
///
///
///
private void Window_Closed(object sender, EventArgs e)
{
Environment.Exit(0); //强制退出,即使有其他的线程没有结束,因为M2Mqtt调用事件都是在单独的线程中进行的
}
private void txtFilePath_TextChanged(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
//this.Opacity = 0;
////窗体最小化显示
//this.WindowState = FormWindowState.Minimized;
////不显示在任务栏中
//this.ShowInTaskbar = false;
}
///
///
///
public void InsertToprie(Toprie Toprie)
{
try
{
var db = SqlSugarConnection.SugarClient();
int RowIndex = db.Insertable(Toprie).ExecuteReturnIdentity();
}
catch (Exception ex)
{
}
}
///
/// 批量添加数据
///
public void InsertListToprieList(List ToprieList)
{
try
{
var db = SqlSugarConnection.SugarClient();
int RowIndex = db.Insertable(ToprieList).ExecuteReturnIdentity();
}
catch (Exception ex)
{
}
}
///
/// 获取所有订阅主题
///
public string Toprie_MotifList(){
try {
#region 初始化
string str = "";
#endregion
#region 获取订阅主题
var db = SqlSugarConnection.SugarClient();
List ToprieMotifList = db.SqlQueryable("select * from Toprie_Motif").Where(m => m.IsVal == 0).ToList();
#endregion
#region
for (int i=0; ToprieMotifList !=null && i < ToprieMotifList.Count();i++){
if (i == ToprieMotifList.Count() - 1)
{
str += ToprieMotifList[i].MotifName;
}
else {
str += ToprieMotifList[i].MotifName + ",";
}
}
#endregion
return str;
}
catch (Exception ex){
return "";
}
}
///
/// 添加订阅主题
///
public void InsertToprieMotif(Toprie_Motif ToprieMotif)
{
try
{
var db = SqlSugarConnection.SugarClient();
int RowIndex = db.Insertable(ToprieMotif).ExecuteReturnIdentity();
}
catch (Exception ex)
{
}
}
private void txt_SubscribeMessage_TextChanged(object sender, EventArgs e)
{
}
private void txt_BrokerAddress_TextChanged(object sender, EventArgs e)
{
}
}
}