/// <summary>
        /// Starts the server.
        /// </summary>
        public void Start()
        {
            this.webSocketServer.Start();
            string connectFileName = this.PrepareConnectFile();

            this.LaunchSafariProcess(connectFileName);
            this.connection = this.WaitForConnection(TimeSpan.FromSeconds(45));
            this.DeleteConnectFile();
            if (this.connection == null)
            {
                throw new WebDriverException("Did not receive a connection from the Safari extension. Please verify that it is properly installed and is the proper version.");
            }
        }
        /// <summary>
        /// Waits for a connection to be established with the server by the Safari browser extension.
        /// </summary>
        /// <param name="timeout">A <see cref="TimeSpan"/> containing the amount of time to wait for the connection.</param>
        /// <returns>A <see cref="SafariDriverConnection"/> representing the connection to the browser.</returns>
        public SafariDriverConnection WaitForConnection(TimeSpan timeout)
        {
            SafariDriverConnection foundConnection = null;
            DateTime end = DateTime.Now.Add(timeout);

            while (this.connections.Count == 0 && DateTime.Now < end)
            {
                Thread.Sleep(250);
            }

            if (this.connections.Count > 0)
            {
                foundConnection = this.connections.Dequeue();
            }

            return(foundConnection);
        }