📄 serverform.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using GPSClassLibrary;
namespace GPSServer
{
public partial class ServerForm : Form
{
//GPS串口类
GPSClassLibrary.GPSComport gpscomport;
// 地图窗口
MapForm mapform;
// 发送日志
Log SendLog = new Log("SendLog");
// 接收日志
Log ReceiveLog = new Log("ReceiveLog");
public ServerForm()
{
InitializeComponent();
}
private void ReceiveTimer_Tick(object sender, EventArgs e)
{
string str_rcv = gpscomport.ReceivedData;
if (str_rcv == null)
return;
ReceiveLog.writeLog(str_rcv);
PackageType type = PackageFactory.GetPackageType(str_rcv);
switch (type)
{
case PackageType.GPAI:
GPAI_Process(str_rcv);
break;
case PackageType.GPSI:
GPSI_Process(str_rcv);
break;
case PackageType.GPPI:
GPPI_Process(str_rcv);
break;
default:
break;
}
}
void GPAI_Process(string datagram)
{
GPAI gpai = PackageFactory.CreateGPAI(datagram);
lblAlarm.Text = "报警状态:";
switch (gpai.AlarmReason)
{
case AlarmReason.HarewareError:
lblAlarm.Text += "硬件故障";
break;
case AlarmReason.NaturalDisaster:
lblAlarm.Text += "自然灾害";
break;
case AlarmReason.None:
lblAlarm.Text += "正常";
break;
case AlarmReason.ResourceLack:
lblAlarm.Text += "资源缺乏";
break;
case AlarmReason.Robber:
lblAlarm.Text += "遇匪";
break;
}
}
void GPPI_Process(string datagram)
{
datagram.GetType();
GPPI gppi = PackageFactory.CreateGPPI(datagram);
// 更新
switch (gppi.GPSState)
{
case GPSState.Unlocated:
this.lblState.Text = "状态:未定位";
break;
case GPSState.Located:
this.lblState.Text = "状态:已定位";
this.lblLatitude.Text = "纬度:" + Math.Round(gppi.Latitude, 2).ToString() + ((char)gppi.LatitudeType).ToString();
this.lblLongitude.Text = "经度:" + Math.Round(gppi.Longitude, 2).ToString() + ((char)gppi.LongitudeType).ToString();
this.lblHeight.Text = "海拔:" + Math.Round(gppi.Height, 2).ToString();
mapform.SetMapPosition(gppi.Latitude, gppi.LatitudeType, gppi.Longitude, gppi.LongitudeType, gppi.Height);
break;
case GPSState.Calculating:
this.lblState.Text = "状态:正在估算…";
break;
}
}
void GPSI_Process(string datagram)
{
GPSI gpsi = PackageFactory.CreateGPSI(datagram);
lblHeaviness.Text = "负重量" + gpsi.Heavyness.ToString();
lblOilSurplus.Text = "剩余油量" + gpsi.OilSurplus.ToString() + "%";
lblEngineTemperature.Text = "引擎温度" + gpsi.EngineTemperature.ToString();
}
private void ServerForm_Load(object sender, EventArgs e)
{
using (SettingsForm form = new SettingsForm())
{
form.Text = "服务器端口设置";
while (form.ShowDialog() == DialogResult.OK)
{
gpscomport = new GPSClassLibrary.GPSComport(form.PortName, form.BaudRate, form.DataBits, form.StopBits, form.Parity);
if (!gpscomport.OpenPort())
{
MessageBox.Show("打开串口不成功,请重新设置", "提示");
continue;
}
else
{
//MessageBox.Show("连接成功!");
break;
}
}
if (form.DialogResult == DialogResult.Cancel)
this.Dispose();
}
mapform = new MapForm();
mapform.Text = "服务器地图";
mapform.Show();
ReceiveTimer.Enabled = true;
}
private void btnQuestState_Click(object sender, EventArgs e)
{
GPRS gprs = new GPRS();
string sndstr = gprs.ToString();
gpscomport.SendData(sndstr);
SendLog.writeLog(sndstr);
}
private void btnSendCommand_Click(object sender, EventArgs e)
{
GPCD gpcd = new GPCD();
switch (((Button)sender).Name)
{
case "btnCloseEngine":
gpcd.GPCommand = GPCommand.CloseEngine;
break;
case "btnCloseOil":
gpcd.GPCommand = GPCommand.StopOiling;
break;
case "btnLock":
gpcd.GPCommand = GPCommand.Lock;
break;
case "btnUnlock":
gpcd.GPCommand = GPCommand.Unlock;
break;
case "btnStartOiling":
gpcd.GPCommand = GPCommand.StartOiling;
break;
case "btnOpenEngine":
gpcd.GPCommand = GPCommand.OpenEngine;
break;
}
string sndstr = gpcd.ToString();
gpscomport.SendData(sndstr);
SendLog.writeLog(sndstr);
}
private void ServerForm_FormClosing(object sender, FormClosingEventArgs e)
{
gpscomport.ClosePort();
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Dispose();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -