/// <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(); }