using System.Text; using System.Numerics; using System.Windows.Forms; using static DroneSimulator.NetClient; using DroneClient; namespace DroneSimulator { public partial class Form_Main : Form { private NetClient netClient = new NetClient(); public Form_Main() { InitializeComponent(); } private void ConnectionCallback(object o) { ConnectData data = (ConnectData)o; if (!data.Connect) { try { Invoke((MethodInvoker)delegate { button_Connect.Text = "Connect"; button_Connect.BackColor = Color.Transparent; MessageBox.Show("Connection closed"); }); } catch { } return; } } Drone dataDrone = new Drone(); private void ReceiveCallback(object o) { ReceiveData data = (ReceiveData)o; List? send = dataDrone.DataStream(data.Buffer, data.Size); if (send == null) return; try { foreach (byte[]? b in send) { if (b != null) data.Server?.Send(b); } } catch { } } private void button_Connect_Click(object sender, EventArgs e) { var done = netClient.Connect(textBox_Server_Addr.Text, (int)numericUpDown_Server_Port.Value, ConnectionCallback, ReceiveCallback); switch (done) { case NetClient.ClientState.Error: { MessageBox.Show("Error connecting to server"); break; } case NetClient.ClientState.Connected: { button_Connect.Text = "Disconnect"; button_Connect.BackColor = Color.LimeGreen; break; } case NetClient.ClientState.Stop: { button_Connect.Text = "Connect"; button_Connect.BackColor = Color.Transparent; break; } } if (done != NetClient.ClientState.Connected) return; } private void Form_Main_FormClosing(object sender, FormClosingEventArgs e) { netClient?.Close(); netClient = null; } private void timer_Test_Tick(object sender, EventArgs e) { label_Acc_X.Text = dataDrone.AccX.ToString(); label_Acc_Y.Text = dataDrone.AccY.ToString(); label_Acc_Z.Text = dataDrone.AccZ.ToString(); label_time_acc.Text = dataDrone.TimeAcc.ToString(); label_Gyr_X.Text = dataDrone.GyrX.ToString(); label_Gyr_Y.Text = dataDrone.GyrY.ToString(); label_Gyr_Z.Text = dataDrone.GyrZ.ToString(); label_time_gyr.Text = dataDrone.TimeGyr.ToString(); label_Pos_X.Text = dataDrone.PosX.ToString(); label_Pos_Y.Text = dataDrone.PosY.ToString(); label_Pos_L.Text = dataDrone.LaserRange.ToString(); label_time_range.Text = dataDrone.TimeRange.ToString(); netClient.SendData(dataDrone.SendReqest()); } private void trackBar_Power_Scroll(object sender, EventArgs e) { float pow = (float)trackBar_Power.Value / 100; label_Pow.Text = pow.ToString(); dataDrone.MotorUL = dataDrone.MotorUR = dataDrone.MotorDL = dataDrone.MotorDR = pow; } private void button_UU_MouseDown(object sender, MouseEventArgs e) { const float pow = 0.1f; if (sender == button_UU) { dataDrone.MotorUL -= pow; dataDrone.MotorUR -= pow; dataDrone.MotorDL += pow; dataDrone.MotorDR += pow; } if (sender == button_DD) { dataDrone.MotorUL += pow; dataDrone.MotorUR += pow; dataDrone.MotorDL -= pow; dataDrone.MotorDR -= pow; } if (sender == button_LL) { dataDrone.MotorUL -= pow; dataDrone.MotorUR += pow; dataDrone.MotorDL -= pow; dataDrone.MotorDR += pow; } if (sender == button_RR) { dataDrone.MotorUL += pow; dataDrone.MotorUR -= pow; dataDrone.MotorDL += pow; dataDrone.MotorDR -= pow; } if (sender == button_ML) { dataDrone.MotorUL -= pow; dataDrone.MotorUR += pow; dataDrone.MotorDL += pow; dataDrone.MotorDR -= pow; } if (sender == button_MR) { dataDrone.MotorUL += pow; dataDrone.MotorUR -= pow; dataDrone.MotorDL -= pow; dataDrone.MotorDR += pow; } } private void button_UU_MouseUp(object sender, MouseEventArgs e) { trackBar_Power_Scroll(null, null); } } }