ab56a9bcf7
SVN-Revision: r240
268 lines
10 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|