/// <summary>
        /// Connect minitouch
        /// </summary>
        public static void ConnectMinitouch([CallerLineNumber] int lineNumber = 0, [CallerMemberName] string caller = null)
        {
            try
            {
                if (AdbInstance.Instance.minitouchSocket != null)
                {
                    AdbInstance.Instance.minitouchSocket = null;
                }
            }
            catch
            {
            }
            Thread.Sleep(100);
            try
            {
                var path = Path.GetTempPath() + "minitouch";
                if (File.Exists(path))
                {
                    var ports = File.ReadAllLines(path);
                    foreach (var tmp in ports)
                    {
                        foreach (var port in ports)
                        {
                            if (AdbInstance.Instance.minitouchPort == Convert.ToInt32(port))
                            {
                                AdbInstance.Instance.minitouchPort++;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
                using (var stream = File.AppendText(path))
                {
                    stream.WriteLine(AdbInstance.Instance.minitouchPort); //Let other instance know that this socket is in use!
                }
            }
            catch
            {
            }
            if (!ScriptRun.Run)
            {
                return;
            }
            Variables.AdvanceLog("Connecting Minitouch", lineNumber, caller);
            string rndMiniTouch            = Path.GetRandomFileName();
            ConsoleOutputReceiver receiver = new ConsoleOutputReceiver();

            try
            {
                AdbInstance.Instance.client.ExecuteRemoteCommand("find /data/local/tmp/ -maxdepth 1 -type f -delete", (Variables.Controlled_Device as DeviceData), receiver);
            }
            catch
            {
                Variables.AdvanceLog("Unable to delete temp minitouch file, will try at next round!");
            }
            BotCore.Push(Environment.CurrentDirectory + "//adb//minitouch", "/data/local/tmp/" + rndMiniTouch, 777);
            try
            {
                int error = 0;
                while (Variables.Controlled_Device == null && ScriptRun.Run)
                {
                    error++;
                    Thread.Sleep(1000);
                    foreach (var device in AdbInstance.Instance.client.GetDevices())
                    {
                        Variables.AdvanceLog(device.ToString(), lineNumber, caller);
                        if (device.ToString() == Variables.AdbIpPort)
                        {
                            Variables.Controlled_Device = device;
                            Variables.DeviceChanged     = true;
                            Variables.AdvanceLog("Device found, connection establish on " + Variables.AdbIpPort, lineNumber, caller);
                            break;
                        }
                    }
                    if (error > 30)
                    {
                        RestartEmulator();
                        error = 0;
                    }
                }
                if (!ScriptRun.Run)
                {
                    return;
                }
Cm:
                AdbInstance.Instance.client.ExecuteRemoteCommandAsync("/data/local/tmp/" + rndMiniTouch, (Variables.Controlled_Device as DeviceData), receiver, CancellationToken.None);
                AdbInstance.Instance.client.CreateForward((Variables.Controlled_Device as DeviceData), ForwardSpec.Parse($"tcp:{AdbInstance.Instance.minitouchPort}"), ForwardSpec.Parse("localabstract:minitouch"), true);
                AdbInstance.Instance.minitouchSocket = new TcpSocket();
                AdbInstance.Instance.minitouchSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), AdbInstance.Instance.minitouchPort));
                if (AdbInstance.Instance.minitouchSocket.Connected)
                {
                    try
                    {
                        string cmd   = "d 0 0 0 100\nc\nu 0\nc\n";
                        byte[] bytes = AdbClient.Encoding.GetBytes(cmd);
                        AdbInstance.Instance.minitouchSocket.Send(bytes, 0, bytes.Length, SocketFlags.None);
                    }
                    catch
                    {
                        Variables.AdvanceLog("Socket disconnected, retrying...", lineNumber, caller);
                        goto Cm;
                    }
                    Variables.AdvanceLog("Minitouch connected on Port number " + AdbInstance.Instance.minitouchPort, lineNumber, caller);
                }
                else
                {
                    Variables.AdvanceLog("Socket disconnected, retrying...", lineNumber, caller);
                    EjectSockets();
                    AdbInstance.Instance.minitouchPort++;
                    goto Cm;
                }
            }
            catch (Exception ex)
            {
                if (ex is AdbException)
                {
                    AdbInstance.Instance.server.RestartServer();
                    RestartEmulator();
                    AdbInstance.Instance.minitouchPort = 1111;
                    return;
                }
                Variables.AdvanceLog(ex.ToString(), lineNumber, caller);
                EjectSockets();
                AdbInstance.Instance.minitouchPort++;
                ConnectMinitouch();
            }
            Variables.DirectXCapt = Variables.emulator.DXScreen();
        }