kopia lustrzana https://github.com/XGudron/UA3REO-DDC-Transceiver
162 wiersze
5.4 KiB
C#
162 wiersze
5.4 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using System.IO.Ports;
|
||
using System.Threading;
|
||
using System.Net.Sockets;
|
||
|
||
namespace UA3REO_WIFIClient
|
||
{
|
||
public partial class mainForm : Form
|
||
{
|
||
public static SerialPort port = new SerialPort();
|
||
private Thread mainThread = new Thread(new ThreadStart(thread_loop));
|
||
public static TcpClient tcp_client = new TcpClient();
|
||
public static System.Windows.Forms.Label statusLabelStatic;
|
||
public static string address = "";
|
||
|
||
public mainForm()
|
||
{
|
||
InitializeComponent();
|
||
statusLabelStatic = statusLabel;
|
||
}
|
||
|
||
private void mainForm_Load(object sender, EventArgs e)
|
||
{
|
||
scanPorts();
|
||
addressTextBox.Text = Properties.Settings.Default.address;
|
||
portComboBox.Text = Properties.Settings.Default.com_port;
|
||
}
|
||
private void scanPorts()
|
||
{
|
||
portComboBox.Items.Clear();
|
||
foreach (string lport in SerialPort.GetPortNames())
|
||
portComboBox.Items.Add(lport);
|
||
}
|
||
|
||
private void portComboBox_DropDown(object sender, EventArgs e)
|
||
{
|
||
scanPorts();
|
||
}
|
||
|
||
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
mainThread.Abort();
|
||
Properties.Settings.Default.address = addressTextBox.Text;
|
||
Properties.Settings.Default.com_port = portComboBox.Text;
|
||
Properties.Settings.Default.Save();
|
||
if (port.IsOpen)
|
||
port.Close();
|
||
}
|
||
|
||
private void connectButton_Click(object sender, EventArgs e)
|
||
{
|
||
if (!port.IsOpen)
|
||
{
|
||
port = new SerialPort(portComboBox.SelectedItem.ToString(), 38400, Parity.None, 8);
|
||
port.ReadTimeout = 5000;
|
||
port.Encoding = Encoding.ASCII;
|
||
port.ReadBufferSize = 65000;
|
||
try
|
||
{
|
||
port.Open();
|
||
port.ReadExisting();
|
||
}
|
||
catch
|
||
{
|
||
statusLabel.Text = "Ошибка открытия порта";
|
||
}
|
||
}
|
||
if (tcp_client.Connected) tcp_client.Close();
|
||
try
|
||
{
|
||
tcp_client.ReceiveTimeout = 5000;
|
||
tcp_client.SendTimeout = 5000;
|
||
tcp_client.NoDelay = true;
|
||
}
|
||
catch { }
|
||
connect();
|
||
address = addressTextBox.Text;
|
||
try { mainThread.Start(); } catch { }
|
||
}
|
||
|
||
public static void setStatus(string text)
|
||
{
|
||
try
|
||
{
|
||
statusLabelStatic.Invoke((MethodInvoker)delegate
|
||
{
|
||
// Running on the UI thread
|
||
Console.WriteLine(text);
|
||
statusLabelStatic.Text = text;
|
||
});
|
||
}
|
||
catch { }
|
||
}
|
||
|
||
public static void connect()
|
||
{
|
||
try
|
||
{
|
||
setStatus("Соединяюсь с трансивером");
|
||
tcp_client = new TcpClient();
|
||
tcp_client.Connect(address, 6784);
|
||
setStatus("Соединение установлено, жду команды");
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Console.WriteLine(e.Message);
|
||
setStatus(e.Message);
|
||
}
|
||
}
|
||
|
||
public static void thread_loop()
|
||
{
|
||
ASCIIEncoding ascii = new ASCIIEncoding();
|
||
string buffer = "";
|
||
while (true)
|
||
{
|
||
if (port.BytesToRead > 0 || buffer.IndexOf(";") > 0)
|
||
{
|
||
buffer += port.ReadExisting();
|
||
if (buffer.IndexOf(";") > 0)
|
||
{
|
||
string command = buffer.Substring(0, buffer.IndexOf(";"));
|
||
buffer = buffer.Substring(buffer.IndexOf(";") + 1);
|
||
|
||
command = command.Trim()+"\n";
|
||
if (command != "")
|
||
{
|
||
setStatus("Получена команда: " + command.Trim());
|
||
byte[] send_buffer = ascii.GetBytes(command);
|
||
try
|
||
{
|
||
Console.WriteLine("Отправляю на сервер: " + ascii.GetString(send_buffer).Trim());
|
||
tcp_client.GetStream().Write(send_buffer, 0, command.Length);
|
||
}
|
||
catch
|
||
{ connect(); }
|
||
}
|
||
}
|
||
}
|
||
if(tcp_client.Connected && tcp_client.GetStream().DataAvailable)
|
||
{
|
||
int len = tcp_client.Available;
|
||
byte[] read_buffer = new byte[len];
|
||
tcp_client.GetStream().Read(read_buffer, 0, len);
|
||
string answer = ascii.GetString(read_buffer);
|
||
setStatus("Получен ответ: " + answer);
|
||
port.Write(answer);
|
||
}
|
||
Thread.Sleep(1);
|
||
}
|
||
}
|
||
}
|
||
}
|