Files
lserp_cs_6.0/其他程序/MQTTClient/MQTTClient/FrmMain.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

268 lines
10 KiB
C#

using DevExpress.Utils;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MQTTClient
{
public partial class FrmMain : Form
{
/// <summary>
/// 配置读取
/// </summary>
private Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
/// <summary>
/// mqtt连接字典
/// </summary>
private Dictionary<string, MqttConnect> mqttConnectDic = new Dictionary<string, MqttConnect>();
/// <summary>
/// 数据库连接
/// </summary>
private SqlHelper sqlHelper;
/// <summary>
/// 主配置数据源
/// </summary>
private DataTable sourceTable = new DataTable();
public FrmMain()
{
InitializeComponent();
this.Load += OnFrmMainLoad;
this.mainGridView.CustomDrawRowIndicator += OnCustomDrawRowIndicator;
this.subscribeBtn.Click += OnSubscribeBtnClick;
}
/// <summary>
/// 初始化时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFrmMainLoad(object sender, EventArgs e)
{
string dbServer = configuration.AppSettings.Settings["dbserver"].Value;
string dbDatabase = configuration.AppSettings.Settings["dbdatabase"].Value;
string dbUserId = configuration.AppSettings.Settings["dbuserid"].Value;
string dbPassword = configuration.AppSettings.Settings["dbpassword"].Value;
serverBox.Text = MqttConnectModel._dbServer = dbServer;
databaseBox.Text = MqttConnectModel._dbDatabase = dbDatabase;
userIdBox.Text = MqttConnectModel._dbUserId = dbUserId;
passwordBox.Text = MqttConnectModel._dbPassword = dbPassword;
serverBox.TextChanged += OnTextChanged;
databaseBox.TextChanged += OnTextChanged;
userIdBox.TextChanged += OnTextChanged;
passwordBox.TextChanged += OnTextChanged;
MqttConnect.MainGridControl = mainGridControl;
MqttConnect.MainGridView = mainGridView;
InitGridRightMenu();
if (!InitGridAndMqttConnect())
{
this.Close();
}
}
private bool InitGridAndMqttConnect()
{
bool isInit;
try
{
string sqlConnectionStr = $"Server={MqttConnectModel._dbServer};Database={MqttConnectModel._dbDatabase};Persist Security Info=True;User ID={MqttConnectModel._dbUserId};Password={MqttConnectModel._dbPassword};Connection Timeout=5;MultipleActiveResultSets=true";
sqlHelper = new SqlHelper(new SqlConnection(sqlConnectionStr));
sourceTable = sqlHelper.ExecuteDataTable("select * from Mqtt_SubscribeMainTab");
if (!sourceTable.Columns.Contains("clientId"))
{
sourceTable.Columns.Add("clientId");
}
if (!sourceTable.Columns.Contains("connectState"))
{
sourceTable.Columns.Add("connectState");
}
if (!sourceTable.Columns.Contains("msg"))
{
sourceTable.Columns.Add("msg");
}
if (sourceTable.Columns.Contains("disenable"))
{
DataTable dataTable = sourceTable.Clone();
sourceTable.Select(string.Format("disenable <> '1'")).CopyToDataTable(dataTable, LoadOption.PreserveChanges);
sourceTable = dataTable;
}
mainGridControl.DataSource = sourceTable;
foreach (DataRow sourceRow in sourceTable.Rows)
{
string index = sourceRow["id"] + "";
MqttConnect mqttConnect = new MqttConnect(sourceRow);
mqttConnectDic.Add(index, mqttConnect);
}
isInit = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误");
isInit = false;
}
return isInit;
}
/// <summary>
/// 订阅按钮点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void OnSubscribeBtnClick(object sender, EventArgs e)
{
subscribeBtn.Enabled = false;
try
{
foreach (string key in mqttConnectDic.Keys)
{
MqttConnect mqttConnect = mqttConnectDic[key];
await mqttConnect.Subscribe();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误");
this.subscribeBtn.Enabled = true;
}
}
/// <summary>
/// 改变数据库连接参数时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnTextChanged(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (textBox == serverBox)
{
configuration.AppSettings.Settings["dbserver"].Value = textBox.Text;
MqttConnectModel._dbServer = textBox.Text;
}
else if (textBox == databaseBox)
{
configuration.AppSettings.Settings["dbdatabase"].Value = textBox.Text;
MqttConnectModel._dbDatabase = textBox.Text;
}
else if (textBox == userIdBox)
{
configuration.AppSettings.Settings["dbuserid"].Value = textBox.Text;
MqttConnectModel._dbUserId = textBox.Text;
}
else if (textBox == passwordBox)
{
configuration.AppSettings.Settings["dbpassword"].Value = textBox.Text;
MqttConnectModel._dbPassword = textBox.Text;
}
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
/// <summary>
/// 表格序号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnCustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
try
{
e.Appearance.TextOptions.HAlignment = HorzAlignment.Center;
if (e.Info.IsRowIndicator)
{
if (e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
}
catch (Exception)
{
}
}
/// <summary>
/// 右键菜单打开前判断
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuStripOpening(object sender, CancelEventArgs e)
{
Point mousePoint = mainGridControl.PointToClient(MousePosition);
GridHitInfo gridHitInfo = mainGridView.CalcHitInfo(mousePoint);
ContextMenuStrip menuStrip = (ContextMenuStrip)sender;
ToolStripMenuItem subscribeStripItem = menuStrip.Items.Cast<ToolStripMenuItem>().Where(n => n.Name.Equals("subscribeMenu")).FirstOrDefault();
ToolStripMenuItem stopStripItem = menuStrip.Items.Cast<ToolStripMenuItem>().Where(n => n.Name.Equals("stopMenu")).FirstOrDefault();
//DataRow dataRow = mainGridView.GetFocusedDataRow();
DataRow dataRow = mainGridView.GetDataRow(gridHitInfo.RowHandle);
if (dataRow != null)
{
string id = dataRow["id"] + "";
MqttConnect mqttConnect = mqttConnectDic[id];
if (subscribeStripItem != null && mqttConnect != null)
{
subscribeStripItem.Enabled = !mqttConnect.MqttSubscribeStart ? true : false;
}
if (stopStripItem != null)
{
stopStripItem.Enabled = !mqttConnect.MqttSubscribeStop ? true : false;
}
}
else
{
e.Cancel = true;
}
}
/// <summary>
/// 右键菜单点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void OnMenuStripItemClick(object sender, EventArgs e)
{
DataRow dataRow = mainGridView.GetFocusedDataRow();
string id = dataRow["id"] + "";
MqttConnect mqttConnect = mqttConnectDic[id];
if (mqttConnect != null)
{
ToolStripMenuItem menuItem = (ToolStripMenuItem)sender;
if (menuItem.Name.Equals("subscribeMenu"))
{
await mqttConnect.Subscribe();
}
else if (menuItem.Name.Equals("stopMenu"))
{
await mqttConnect.Stop();
}
}
}
/// <summary>
/// 初始化表格右键
/// </summary>
private void InitGridRightMenu()
{
ContextMenuStrip menuStrip = new ContextMenuStrip();
menuStrip.Opening += new CancelEventHandler(MenuStripOpening);
ToolStripMenuItem subscribeMenuItem = new ToolStripMenuItem();
subscribeMenuItem.Name = "subscribeMenu";
subscribeMenuItem.Text = "订阅";
subscribeMenuItem.Click += new EventHandler(OnMenuStripItemClick);
menuStrip.Items.Add(subscribeMenuItem);
ToolStripMenuItem stopMenuItem = new ToolStripMenuItem();
stopMenuItem.Name = "stopMenu";
stopMenuItem.Text = "停止";
stopMenuItem.Click += new EventHandler(OnMenuStripItemClick);
menuStrip.Items.Add(stopMenuItem);
mainGridControl.ContextMenuStrip = menuStrip;
}
}
}