Ejemplo n.º 1
0
        /// <summary>
        /// Инициализация кастомных RichTextBox с данными декодирования.
        /// </summary>
        /// <remarks>
        /// Отличается от обычного тем, что по умолчанию он недоступен для редактирования (Enabled = false),
        /// но выглядит как доступный. Используется во вкладках меню "Прием" и "Декодирование".
        /// </remarks>
        /// <param name="rtbMko">RichTextBox для заголовков МКО.</param>
        /// <param name="rtbMkoData">RichTextBox для данных МКО.</param>
        /// <param name="rtbDateTimeTitle">RichTextBox для заголовков даты и времени из МКО.</param>
        /// <param name="rtbDateTime">RichTextBox для даты и времени из МКО.</param>
        /// <param name="rtbServiceTitle">RichTextBox для заголовков служебной информации.</param>
        /// <param name="rtbServiceData">RichTextBox для данных служебной информации.</param>
        public static void DecodeRichTextBoxInit(DisabledRichTextBox rtbMko, DisabledRichTextBox rtbMkoData, DisabledRichTextBox rtbDateTimeTitle, DisabledRichTextBox rtbDateTime,
                                                 DisabledRichTextBox rtbServiceTitle, DisabledRichTextBox rtbServiceData)
        {
            RobotoFont.AllocFont(rtbMko, 11);
            RobotoFont.AllocFont(rtbMkoData, 11);
            RobotoFont.AllocFont(rtbDateTimeTitle, 11);
            RobotoFont.AllocFont(rtbDateTime, 11);
            RobotoFont.AllocFont(rtbServiceTitle, 11);
            RobotoFont.AllocFont(rtbServiceData, 11);

            var MkoTitle = "Время конца формирования ТД (БШВ)\n\n" +
                           "Первый год в текущем четырехлетии\n\n" +
                           "Номер текущих суток четырехлетия\n\n" +
                           "Оцифрованная бортовая шкала времени (БШВ)\n\n" +
                           "Время конца формирования ППО (БШВ)\n\n" +
                           "Параметры кватерниона L0\n\n" +
                           "Параметры кватерниона L1\n\n" +
                           "Параметры кватерниона L2\n\n" +
                           "Параметры кватерниона L3\n\n" +
                           "Время конца формирования ПЦДМ (БШВ)\n\n" +
                           "Положение КА по оси X в формате IEEE-754 двойной\n\n" +
                           "Положение КА по оси Y в формате IEEE-754 двойной\n\n" +
                           "Положение КА по оси Z в формате IEEE-754 двойной";

            rtbMko.Text        = MkoTitle;
            rtbMko.BorderStyle = BorderStyle.None;

            var mkoData = "\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0";

            rtbMkoData.Text        = mkoData;
            rtbMkoData.BorderStyle = BorderStyle.None;

            var dateTimeTitle = "\nМКО Дата:\n\nМКО Время:";

            rtbDateTimeTitle.Text        = dateTimeTitle;
            rtbDateTimeTitle.BorderStyle = BorderStyle.None;

            var dateTime = "\n0.0.0\n\n0:0:0";

            rtbDateTime.Text        = dateTime;
            rtbDateTime.BorderStyle = BorderStyle.None;

            var serviceTitle = "Время включения прибора ФЦП\n\n" +
                               "Текущее бортовое время КА\n\n" +
                               "Задержка начала сканирования строки по отношению к секундной метке\n\n" +
                               "Порядковый номер комплекта прибора ЭА240 (МСУ - МР)\n\n" +
                               "Маркер признака передачи блока аналоговой или цифровой телеметрии прибора\n\n" +
                               "Блок служебной телеметрии прибора\n\n" +
                               "Резерв\n\n" +
                               "Интегралы уровней яркости внутренних калибровочных сигналов прибора";

            rtbServiceTitle.Text        = serviceTitle;
            rtbServiceTitle.BorderStyle = BorderStyle.None;

            var serviceData = "\t\t\t0\n\n\t\t\t0\n\n\t\t\t0\n\n\n\t\t\t0\n\n\t\t\t0\n\n\n\t\t\t0\n\n\t\t\t0\n\n\t\t\t0";

            rtbServiceData.Text        = serviceData;
            rtbServiceData.BorderStyle = BorderStyle.None;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Обновление данных декодирования на GUI.
        /// </summary>
        /// <param name="linesService">Значения служебной информации полученной полосы.</param>
        /// <param name="linesTd">Значения ТД полученной полосы.</param>
        /// <param name="linesOshv">Значения ОШВ полученной полосы.</param>
        /// <param name="linesBshv">Значения БШВ полученной полосы.</param>
        /// <param name="linesPcdm">Значения ПЦДМ полученной полосы.</param>
        /// <param name="linesDate">Значения Даты и времени полученной полосы.</param>
        /// <param name="rtbDateTime">RichTextBox для даты и времени из МКО.</param>
        /// <param name="rtbMkoData">RichTextBox для данных МКО.</param>
        /// <param name="rtbServiceData">RichTextBox для данных служебной информации.</param>
        /// <param name="channels">Набор FlowLayoutPanel для одиночных каналов.</param>
        /// <param name="allChannels">Набор FlowLayoutPanel для каналов на вкладке "Все каналы".</param>
        /// <param name="channelsPanels">Набор контейнеров на которых находятся FlowLayoutPanel для одиночных каналов.</param>
        /// <param name="allChannelsPanels">Набор контейнеров на которых находятся FlowLayoutPanel для каналов на вкладке "Все каналы".</param>
        /// <param name="listImagesForSave">Список хранящий изображения по каждому каналу.</param>
        /// <param name="imagesLines">Полученные полосы изображений по каждому каналу.</param>
        public static void UpdateGuiDecodeData(string linesService, string linesTd, string linesOshv, string linesBshv, string linesPcdm, DateTime linesDate,
                                               DisabledRichTextBox rtbDateTime, DisabledRichTextBox rtbMkoData, DisabledRichTextBox rtbServiceData, FlowLayoutPanel[] channels, FlowLayoutPanel[] allChannels, Panel[] channelsPanels, Panel[] allChannelsPanels, List <Bitmap>[] listImagesForSave, DirectBitmap[] imagesLines)
        {
            var td      = linesTd.Split(' ');
            var oshv    = linesOshv.Split(' ');
            var bshv    = linesBshv.Split(' ');
            var pcdm    = linesPcdm.Split(' ');
            var service = linesService.Split(' ');

            // Собираем данные в richTextBox. Стремновато, но так быстрее. Если использовать 15 лейблов, то время декодирования увеличится где то на 20%.
            var mkoData  = $"{td[0]} {td[1]}\n\n{td[2]}\n\n{td[3]}\n\n{oshv[0]} {oshv[1]}\n\n{bshv[0]} {bshv[1]}\n\n{bshv[2]} {bshv[3]}\n\n{bshv[4]} {bshv[5]}\n\n{bshv[6]} {bshv[7]}\n\n{bshv[8]} {bshv[9]}\n\n{pcdm[0]} {pcdm[1]}\n\n{pcdm[2]} {pcdm[3]} {pcdm[4]} {pcdm[5]}\n\n{pcdm[6]} {pcdm[7]} {pcdm[8]} {pcdm[9]}\n\n{pcdm[10]} {pcdm[11]} {pcdm[12]} {pcdm[13]}";
            var date     = $"{linesDate.Day}.{linesDate.Month}.{linesDate.Year}";
            var time     = $"{linesDate.Hour:D2}:{linesDate.Minute:D2}:{linesDate.Second:D2}";
            var dateTime = $"\n{date}\n\n{time}";

            // Служебная информация - расшифровка "Время включения прибора ФЦП".
            var fcpDaysFromHex = Convert.ToInt32($"{service[0]}{service[1]}", 16);                         // Кол-во суток.
            var fcpMsFromHex   = Convert.ToInt32($"{service[2]}{service[3]}{service[4]}{service[5]}", 16); // Миллисекунды.
            var fcpUsFromHex   = Convert.ToInt32($"{service[6]}{service[7]}", 16);                         // Микросекунды.

            var fcpDateTime       = Constants.referenceDate + TimeSpan.FromDays(fcpDaysFromHex - 1) + TimeSpan.FromMilliseconds(fcpMsFromHex);
            var decodeFcpDateTime = $"{fcpDateTime.Day}.{fcpDateTime.Month}.{fcpDateTime.Year}  {fcpDateTime.Hour:D2}:{fcpDateTime.Minute:D2}:{fcpDateTime.Second:D2}.{fcpUsFromHex}";

            // Служебная информация - расшифровка "Текущее бортовое время КА".
            var onBoardHoursFromHex   = Convert.ToInt32($"{service[8]}", 16);
            var onBoardMinutesFromHex = Convert.ToInt32($"{service[9]}", 16);
            var onBoardSecondsFromHex = Convert.ToInt32($"{service[10]}", 16);

            var onBoardTime = $"{onBoardHoursFromHex:D2}:{onBoardMinutesFromHex:D2}:{onBoardSecondsFromHex:D2}";

            // Служебная информация - расшифровка "Задержка начала сканирования строки по отношению к секундной метке".
            var scanDelayFromHex = Convert.ToInt32($"{service[11]}", 16);

            // Служебная информация - расшифровка "Порядковый номер комплекта прибора ЭА240 (МСУ - МР)".
            var msuSerialTypeNumber = $"{service[12]}".ToCharArray();
            var msuSerialNumber     = Convert.ToInt32($"{msuSerialTypeNumber[0]}", 16);
            var msuSerialResult     = string.Empty;

            if (msuSerialTypeNumber.Length > 1) // Костыль. Возникала ошибка при декодировании файла с NRZ. В нем в массив попадает только 1 элемент.
            {
                var msuSerialType = msuSerialTypeNumber[1] == 'F' ? "Резервный" : "Основной";
                msuSerialResult = $"Номер прибора: {msuSerialNumber}. Полукомплект: {msuSerialType}";
            }
            else
            {
                msuSerialResult = $"Номер прибора: {msuSerialNumber}";
            }

            // Вывод служебной информации.
            var serviceData = $"\t{service[0]} {service[1]} {service[2]} {service[3]} {service[4]} {service[5]} {service[6]} {service[7]} ({decodeFcpDateTime})\n\n\t{service[8]} {service[9]} {service[10]} ({onBoardTime})\n\n\t{service[11]} ({scanDelayFromHex} мс)\n\n\n\t{service[12]} ({msuSerialResult})\n\n\t{service[13]}\n\n\n\t{service[14]} {service[15]} {service[16]} {service[17]} {service[18]} {service[19]} {service[20]} {service[21]} {service[22]} {service[23]} {service[24]} {service[25]} {service[26]} {service[27]} {service[28]} {service[29]} {service[30]} {service[31]} {service[32]} {service[33]}\n\n\t{service[34]}\n\n\t{service[35]} {service[36]} {service[37]} {service[38]} {service[39]} {service[40]} {service[41]} {service[42]} {service[43]} {service[44]} {service[45]} {service[46]} {service[47]} {service[48]} {service[49]}";

            rtbDateTime.Text    = dateTime;
            rtbMkoData.Text     = mkoData;
            rtbServiceData.Text = serviceData;

            CreateNewFlps(channels, allChannels, channelsPanels, allChannelsPanels);
            AddImages(channels, allChannels, listImagesForSave, imagesLines);
        }
Ejemplo n.º 3
0
        private void Form1_Load(object sender, EventArgs e)
        {
            #region INITIALISATIONS

            Directory.CreateDirectory("logs");
            if (!File.Exists(AndroidActionsFile))
            {
                File.Create(AndroidActionsFile);
            }
            if (!File.Exists(GenGineActionsFile))
            {
                File.Create(GenGineActionsFile);
            }



            LogsRichTb = new DisabledRichTextBox
            {
                //Dock = DockStyle.Fill,
                ReadOnly    = true,
                BackColor   = Color.Black,
                BorderStyle = BorderStyle.None,
                ForeColor   = Color.Orange,
                Parent      = LogsPanel,
                Bounds      = new Rectangle(10, 0, LogsPanel.Width - 11, LogsPanel.Height)
            };


            UcInitialize();
            Synch_Environment(homeUc);



            titlePanel.MouseMove += TitlePanel_MouseMove;
            titlePanel.MouseDown += TitlePanel_MouseDown;
            titlePanel.MouseUp   += TitlePanel_MouseUp;

            //chestEspTip.SetToolTip(chestEspBtn, "Ch3sts h@ck");
            //Speed_Cd_Tip.SetToolTip(Speed_Cd_btn, "Sp3ed & Cd h@cks");
            //OneHitKillTip.SetToolTip(OneHitKillBtn, "One hit Kill h@ck");
            //GodModTip.SetToolTip(GodModBtn, "g0d Mode h@ck");
            //InfinitStaminaTip.SetToolTip(InfinitStamina, "Endless Stam!na h@ck");
            GenGineTip.SetToolTip(GenGineBtn, "GenGine (mini CE)");
            AndroidVersionTip.SetToolTip(AndroidVersionBtn, "Hack Android Version");
            ClearLogsTip.SetToolTip(ClearLogsBtn, "Clear Logs");
            SaveLogsTip.SetToolTip(SaveLogsBtn, "Save Logs");
            SeekHelpTip.SetToolTip(SeekHelpBtn, "Seek for help");

            stateColor.BackColor = onHoldColor;

            WriteLogs("[ + ] Waiting for GenshinImpact ...", onHoldColor);
            #endregion

            #region THREADS


            try
            {
#if !DEBUG
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(news_link);
                request.AutomaticDecompression = DecompressionMethods.GZip;

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    using (Stream stream = response.GetResponseStream())
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            news = reader.ReadToEnd();

                            string[] _news = news.Split('\n');

                            if (_news.Length >= 1)
                            {
                                if (_news[0].Contains("-"))
                                {
                                    if (_news[0].Split('-')[1].Trim() != version)
                                    {
                                        ProcessStartInfo pin = new ProcessStartInfo
                                        {
                                            CreateNoWindow  = true,
                                            UseShellExecute = false,
                                            FileName        = "cmd.exe",
                                            WindowStyle     = ProcessWindowStyle.Hidden,
                                            Arguments       = $"/C start {GenPact_download}"
                                        };

                                        MessageBox.Show(NewVersionMessage);
                                        Process.Start(pin);
                                        Environment.Exit(0);
                                    }
                                    else
                                    {
                                        if (news.StartsWith(ForcedPopUpKeyword))
                                        {
                                            MessageBox.Show(news);
                                        }

                                        else if (news.StartsWith(PopUpKeyword) && !File.Exists("GenPact.dmp"))
                                        {
                                            MessageBox.Show(news);
                                            File.Create("GenPact.dmp");
                                        }
                                    }
                                }
                                else
                                {
                                    Environment.Exit(0);
                                }
                            }
                            else
                            {
                                Environment.Exit(0);
                            }
                        }



                new Thread(new ThreadStart(() =>
                {
                    while (true)
                    {
                        HttpWebRequest req         = (HttpWebRequest)WebRequest.Create(news_link);
                        req.AutomaticDecompression = DecompressionMethods.GZip;

                        using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
                            using (Stream stream = response.GetResponseStream())
                                using (StreamReader reader = new StreamReader(stream))
                                {
                                    string __      = reader.ReadToEnd();
                                    string[] _news = __.Split('\n');

                                    if (_news.Length >= 1)
                                    {
                                        if (_news[0].Contains("-"))
                                        {
                                            if (_news[0].Split('-')[1].Trim() != version)
                                            {
                                                ProcessStartInfo pin = new ProcessStartInfo
                                                {
                                                    CreateNoWindow  = true,
                                                    UseShellExecute = false,
                                                    FileName        = "cmd.exe",
                                                    WindowStyle     = ProcessWindowStyle.Hidden,
                                                    Arguments       = $"/C start {GenPact_download}"
                                                };

                                                BeginInvoke(new Action(() =>
                                                {
                                                    Hide();
                                                }));

                                                MessageBox.Show(NewVersionMessage);
                                                Process.Start(pin);
                                                Environment.Exit(0);
                                            }
                                            else
                                            {
                                                if (__.StartsWith(ForcedPopUpKeyword))
                                                {
                                                    news = __;
                                                    MessageBox.Show(news);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            Environment.Exit(0);
                                        }
                                    }
                                    else
                                    {
                                        Environment.Exit(0);
                                    }
                                }
                        Thread.Sleep(60000);
                    }
                })).Start();
#endif

                new Thread(new ThreadStart(() =>
                {
                    if (GenPactMem.jsControls == null)
                    {
                        GenPactMem.jsControls = GenPactMem.ReadJs();
                    }

                    while (true)
                    {
                        for (int i = 32; i < 127; i++)
                        {
                            int kState = GenPactMem.GetAsyncKeyState(i);

                            if (kState == -32768)
                            {
                                string ch = Convert.ToString((char)i);
                                if (GenPactMem.jsControls.ContainsKey(ch))
                                {
                                    try
                                    {
                                        //MessageBox.Show($"Clicked -> {ch}");
                                        string feature = (string)GenPactMem.jsControls[ch].ToObject(typeof(string));
                                        if (!string.IsNullOrEmpty(feature))
                                        {
                                            foreach (Control c in featuresUc.Controls)
                                            {
                                                if (c.Tag != null && c is PictureBox)
                                                {
                                                    if (c.Tag.ToString().Contains(feature))
                                                    {
                                                        featuresUc.BeginInvoke(new Action(() =>
                                                        {
                                                            featuresUc.pictureBox8_Click(c as PictureBox, null);
                                                        }));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception) { throw; }
                                }
                            }
                        }
                        Thread.Sleep(50);
                    }
                })).Start();

                new Thread(new ThreadStart(() =>
                {
                    while (true)
                    {
                        if (Watcher.HasExited)
                        {
                            LaunchWtahcer();
                            WriteLogs("[ ! ] - Relaunched Watcher !", append: true);
                        }

                        Settings.Default.GameProcess = CheckGenShinProcess();

                        BeginInvoke(new Action(() =>
                        {
                            if (genshin_was_not_running)
                            {
                                if (Settings.Default.GameProcess != null)
                                {
                                    stateColor.BackColor = successColor;
                                    WriteLogs("[ + ] Found Genshin Impact .", successColor);
                                    ContentPanel.Enabled    = true;
                                    MenuPanel.Enabled       = true;
                                    genshin_was_not_running = false;
                                }
                            }
                            else
                            {
                                if (Settings.Default.GameProcess == null)
                                {
                                    stateColor.BackColor = onHoldColor;
                                    WriteLogs("[ + ] Waiting for GenshinImpact ...", onHoldColor);
                                    ContentPanel.Enabled    = false;
                                    MenuPanel.Enabled       = false;
                                    genshin_was_not_running = true;
                                    miliseconds2wait        = 500;
                                }
                            }
                        }));
                        Thread.Sleep(miliseconds2wait);
                    }
                })).Start();
            }
            catch (ThreadAbortException)
            {
                Environment.Exit(0);
            }
            catch (Exception ex)
            {
                MessageBox.Show("\n[ ! ] " + ex.Message);
                Environment.Exit(0);
            }



            #endregion
        }