Jump to content

Developing C# Windows Form to See Flight Parameters


Recommended Posts

Hello everyone

I wrote a very simple Windows Form program that can display flight parameters on a second computer connected to the same wired network.

I also wrote a mode that sends data to this windows form via KSP.

KSP Plug-in

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using System.Net;
using System.Net.Sockets;

namespace KSP_Connect
{

    [KSPAddon(KSPAddon.Startup.Flight, false)]

    public class VeriAktarimi : MonoBehaviour
        
    {

        private const int port = 1234;
        private const string serverIP = "192.168.0.108"; // Receiver IP

        public void Update()

        {

            
            Double Altitude = Math.Round(FlightGlobals.ActiveVessel.altitude,2);

            Double RadarAltitude = Math.Round(FlightGlobals.ActiveVessel.radarAltitude,2);
            
            Double SpeedVector = Math.Round(FlightGlobals.ActiveVessel.speed,2);

            Double SurfaceSpeed = Math.Round(FlightGlobals.ActiveVessel.srfSpeed, 2);

            Double VerticalSpeed = Math.Round(FlightGlobals.ActiveVessel.verticalSpeed, 2);

            Double OrbitalSpeed = Math.Round(FlightGlobals.ActiveVessel.obt_speed);

            
       

            using (TcpClient client = new TcpClient(serverIP, port))
            using (NetworkStream stream = client.GetStream())
            {
                string data = Altitude + ":" + RadarAltitude + ":" + SpeedVector + ":" + SurfaceSpeed + ":" + VerticalSpeed
                    +":"+OrbitalSpeed;
                
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                stream.Write(buffer, 0, buffer.Length);
            }
        
                
        }
        
    }
}


 

Codes of the receiver windows form and the visual of receiver:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Seri_Iletisim_Alici
{
    public partial class Form1 : Form
    {

        private const int port = 1234;
        private TcpListener listener;



        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }


        private void StartListening()
        {
            try
            {
                while (true)
                {
                    TcpClient client = listener.AcceptTcpClient();
                    HandleClient(client);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }


        private void HandleClient(TcpClient client)
        {
            try
            {
                NetworkStream stream = client.GetStream();
                byte[] buffer = new byte[1024];
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                string[] parts = data.Split(':');
                UpdateLabels(parts[0], parts[1],parts[2],parts[3],parts[4],parts[5]);
                client.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }


        private void UpdateLabels(string value1, string value2,string value3,string value4,string value5, string value6)
        {
            if (label1.InvokeRequired || label2.InvokeRequired )
            {
                Invoke(new MethodInvoker(() => UpdateLabels(value1, value2, value3, value4, value5, value6)));
            }
            else
            {
                lblAltitude.Text = value1;
                lblRadarAltitude.Text = value2;
                lblSpeed.Text = value3;
                lblSurfaceSpeed.Text = value4;
                lblVerticalSpeed.Text = value5;
                lblOrbitalSpeed.Text = value6;
                
            }

        }


        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                listener = new TcpListener(IPAddress.Any, port);
                listener.Start();
                MessageBox.Show("Server started successfully!");
                Task.Run(() => StartListening());
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error starting server: " + ex.Message);
            }

        }


    }

}

3RScO7yjgdx.jpg

 

The codes and program-plug-in are working normally.

https://drive.google.com/file/d/1NE-NeZNrhFsHLqPmy5MMYZuAl63oL9Xr/view?usp=sharing

 

However, I cannot access other parameters of the flight. For example, Throttle Rate, apoapsis and periapsis etc.

How can I access these parameters?

 

 

 

 

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...