namespace DarkWynter.Engine.Networking
{

using System;
using System.Net.Sockets;
using System.IO ;
using System.ComponentModel;

    /// <summary>
    /// Client for network based chat program.
    /// </summary>
    public class Client
    {
        //Define the components...
        private TcpClient myclient;
        private NetworkStream networkStream;
        private StreamReader streamReader;
        private StreamWriter streamWriter;

        /// <summary>
        /// Open a network connection.
        /// </summary>
        /// <param name="hostname">Host name of server.</param>
        /// <param name="port">Port to connect to at server.</param>
        public void OpenConnection(string hostname, int port)
        {
            try
            {
                myclient = new TcpClient(hostname, port);
            }
            catch
            {
                Console.WriteLine("Failed to connect to server at " + hostname + ":" + port );
                return;
            }

            //get a Network stream from the server
            networkStream = myclient.GetStream();
            streamReader = new StreamReader(networkStream);
            streamWriter = new StreamWriter(networkStream);
        }

        /// <summary>
        /// Write to the network connection.
        /// </summary>
        /// <param name="message">Text to write to network.</param>
        public void Write(string message)
        {
            try
            {
                Console.WriteLine("Client Send:");
                streamWriter.WriteLine(message);
                streamWriter.Flush();
            }
            catch (Exception ee)
            {
                Console.WriteLine("Exception sending to Server:" + ee.ToString());
            }
        }

        /// <summary>
        /// Read from the network connection.
        /// </summary>
        /// <returns>Text read from network.</returns>
        public string Read()
        {
            string s;
            try
            {
                s = streamReader.ReadLine();
                Console.WriteLine(s);                
                return s;
            }
            catch (Exception ee)
            {
                Console.WriteLine("Exception reading from Server:" + ee.ToString());
                return null;
            }
        }

        /// <summary>
        /// Close the network connection.
        /// </summary>
        public void CloseConnection()
        {
            //close all streams...
            //streamReader.Close();
            //streamWriter.Close();
            //networkStream.Close();
        }
    }

}