using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace ArdupilotMega.Utilities
{
    static class TCPConsole
    {
        static TcpListener listener;
        static TcpClient client;
        static bool started = false;

        static void startup()
        {
            started = true;
            try
            {
                listener = new TcpListener(IPAddress.Any, 2300);

                listener.Start();

                listener.BeginAcceptTcpClient(
      new AsyncCallback(DoAcceptTcpClientCallback),
      listener);
            }
            catch { Console.WriteLine("TCP Console fail: port 2300"); return; }

        }

        // Process the client connection.
        static void DoAcceptTcpClientCallback(IAsyncResult ar)
        {
            // Get the listener that handles the client request.
            TcpListener listener = (TcpListener)ar.AsyncState;

            // End the operation and display the received data on 
            // the console.
            client = listener.EndAcceptTcpClient(ar);

            // setup for next listener
            listener.BeginAcceptTcpClient(
new AsyncCallback(DoAcceptTcpClientCallback),
listener);

            // Process the connection here. (Add the client to a
            // server table, read data, etc.)
            Console.WriteLine("Client connected completed");

            client.Client.NoDelay = true;
        }

        public static void Write(byte thing)
        {
            if (!started)
                startup();

            if (client == null)
                return;
            if (!client.Connected)
                return;
            try
            {
                client.GetStream().WriteByte(thing);
            }
            catch { }
        }
    }
}