/// <summary>
        /// Initializes a new instance of the <see cref="NativeClient.TimeDelayEstimator"/> class.
        /// </summary>
        /// <param name="aCommunicator">The communicator connected to the server.</param>
        public TimeDelayEstimator(Communicator aCommunicator)
        {
            if (!aCommunicator.IsConnected)
                throw new ArgumentException("Communicator must be connected when passed to Authenticator constructor.");

            communicator = aCommunicator;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="NativeClient.Authenticator"/> class. The Communication must
        /// be connected.
        /// </summary>
        /// <param name="Communicator">The Communicator instance to be used to communicate with the server.</param>
        public Authenticator(Communicator communicator)
        {
            if (!communicator.IsConnected)
                throw new ArgumentException("Communicator must be connected when passed to Authenticator constructor.");

            Communicator = communicator;
            QueryAuthInterface();
        }
		/// <summary>
		/// Initializes a new instance of the <see cref="NativeClient.WorldManager"/> class.
		/// </summary>
		/// <param name="communicator">Connected communicator.</param>
		public WorldManager (Communicator communicator)
		{
			if (!communicator.IsConnected)
				throw new ArgumentException ("Communicator must be connected when passed to WorldManager constructor.");

			this.communicator = communicator;

			QueryClientServices ();
		}
        /// <summary>
        /// Starts the simulation of the client.
        /// </summary>
        public void StartSimulation()
        {
            logger.Info("Connecting to the server");

            communicator = new Communicator();
            communicator.Connected += HandleConnected;
            communicator.Disconnected += HandleDisconnected;
            if (ServerURI != null)
                communicator.OpenConnection(ServerURI);
            else
                communicator.OpenConnection(ServerHost, ServerPort);
        }
		public ClientDriver ()
		{
			communicator = new Communicator ();
		}