/// <summary>
        /// Create a new prosthesis socket client
        /// </summary>
        /// <param name="onDataCallback">Callback for when data is available over the socket</param>
        /// <param name="ipAddress"></param>
        /// <param name="port"></param>
        /// <param name="logger">The logger which this socket will use. Must be non-null</param>
        public ProsthesisSocketClient(OnSocketDataReceive onDataCallback, string ipAddress, int port, Logger logger)
        {
            mTCPClient    = new TcpClient();
            OnDataReceive = onDataCallback;
            mEndPointIP   = ipAddress;
            mPort         = port;

            mLogger = logger;
            //Create a small buffer to appease the socket library
            mBuffer = new byte[4];

            mConnectionCallback        = new AsyncCallback(OnConnection);
            mSocketWorkerStartCallback = new WaitCallback(OnConnectionStart);
            mDataReadyCallback         = new AsyncCallback(OnDataAvailable);
        }
        /// <summary>
        /// Create a new prosthesis socket client
        /// </summary>
        /// <param name="onDataCallback">Callback for when data is available over the socket</param>
        /// <param name="ipAddress"></param>
        /// <param name="port"></param>
        /// <param name="logger">The logger which this socket will use. Must be non-null</param>
        public ProsthesisSocketClient(OnSocketDataReceive onDataCallback, string ipAddress, int port, Logger logger)
        {
            mTCPClient = new TcpClient();
            OnDataReceive = onDataCallback;
            mEndPointIP = ipAddress;
            mPort = port;

            mLogger = logger;
            //Create a small buffer to appease the socket library
            mBuffer = new byte[4];

            mConnectionCallback = new AsyncCallback(OnConnection);
            mSocketWorkerStartCallback = new WaitCallback(OnConnectionStart);
            mDataReadyCallback = new AsyncCallback(OnDataAvailable);
        }
        public void Shutdown()
        {
            if (mTCPClient != null)
            {
                mLogger.LogMessage(Logger.LoggerChannels.Network, string.Format("Closing connection to {0}", mEndPointIP));
                mTCPClient.Close();
                mTCPClient = null;
            }

            if (ConnectFinished != null)
            {
                ConnectFinished(this, false);
            }

            if (ConnectionClosed != null)
            {
                ConnectionClosed(this);
            }

            ConnectFinished = null;
            OnDataReceive   = null;
        }