Пример #1
0
        /// <summary>
        /// Послать ошибку на сервер.
        /// </summary>
        /// <param name="errorMes">Текст ошибки</param>
        /// <param name="additionalInfo">Дополнительная информация</param>
        public static bool SendErrorToServer(string errorMes, string additionalInfo)
        {
            //Выходим, если делать ничего не нужно.
            if (!SaveError)
            {
                return(false);
            }

            //Это для того чтобы если во время работы этого кода возникнет ошибка, не было зацикливания.
            SaveError = false;

            try
            {
                //Если чтение параметра неудачное, то ничего не делаем.
                var Params = new string[10];

                //Получаем только при первой ошибке.
                if (ErrorsCount == 0)
                {
                    if (Param.Load(DirectionQuery.Remote, Var.UserID, "SaveError", true, "User", out Params))
                    {
                        if (!Params[0].Replace("SaveError=", "").ToBool())
                        {
                            return(false);
                        }
                        SaveScreenshot      = Params[1].Replace("SaveScreenshot=", "").ToBool();
                        CompressRatio       = Params[2].Replace("CompressRatio=", "").ToInt();
                        SecBetweenSendError = Params[3].Replace("SecBetweenSendError=", "").ToInt();
                    }
                }

                //sys.Error.SaveError true/false: Сохранять ошибку на сервере или нет. Пример: SaveError=true
                //sys.Error.SaveScreenshot true/false: Сохранять текст ошибки на сервере или нет. Пример: SaveScreenshot=true
                //sys.Error.CompressRatio int:  находится значение степени сжатия скриншота. По умолчанию формат JPEG, степень сжатия 90. Пример: CompressRatio=90
                //sys.Error.SecBetweenSendError int: - количество секунд между ошибками.
                //sys.Error.LastDateTimeSendError datetime: Время последней ошибки.

                if (sys.GetSecDiff(LastDateTimeSendError, DateTime.Now) < SecBetweenSendError)
                {
                    SaveError = true;
                    return(false);
                }

                string imagebase64      = "";
                string screenshoFormat  = "";
                string screenshotWidth  = "";
                string screenshotHeight = "";
                string screenshotSize   = "";

                if (SaveScreenshot)
                {
                    //Получение скриншота
                    screenshoFormat  = "WEBP";
                    screenshotWidth  = Screen.PrimaryScreen.Bounds.Width.ToString();
                    screenshotHeight = Screen.PrimaryScreen.Bounds.Height.ToString();
                    Bitmap   printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
                    Graphics graphics    = Graphics.FromImage(printscreen as Image);
                    graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
                    byte[] webpImageData;
                    WebP.EncodeLossly(printscreen, CompressRatio, out webpImageData);
                    imagebase64    = Convert.ToBase64String(webpImageData);
                    screenshotSize = FBAFile.GetFileSizeStr(webpImageData.Length, true, false);
                }
                additionalInfo  = sys.AddRightCR(additionalInfo);
                additionalInfo += GetSystemInfo();
                string sql = "INSERT INTO fbaError (EntityID, UserID, ErrorTime, ErrorText, ScreenshotFormat, ScreenshotWidth, ScreenshotHeight, ScreenshotSize, " +
                             "CompressRatio, AdditionalInfo, ScreenshotData) VALUES (" + Var.CR +
                             "123, " + Var.UserID + "," + sys.DateTimeCurrent() + ",'" + errorMes + "','" + screenshoFormat + "','" + screenshotWidth + "','" + screenshotHeight + "'," + screenshotSize + ",'" + Error.CompressRatio.ToString() + "','" + additionalInfo + "','" + imagebase64 + "')";

                sys.Exec(DirectionQuery.Remote, sql);
                LastDateTimeSendError = DateTime.Now;
            }
            catch
            {
                //Ошибку не выдаем.
            }

            SaveError = true;
            return(true);
        }
Пример #2
0
        /// <summary>
        /// Показ изображения.
        /// </summary>
        private void SelectError()
        {
            string errorID = dgvError.Value("ID");

            if (errorID == "")
            {
                return;
            }
            var    arr = new string[11];
            string sql = "SELECT " +
                         "ID, " +               //0
                         "UserID, " +           //1
                         "ErrorTime, " +        //2
                         "ErrorText, " +        //3
                         "ScreenshotData, " +   //4
                         "ScreenshotFormat, " + //5
                         "ScreenshotWidth, " +  //6
                         "ScreenshotHeight, " + //7
                         "ScreenshotSize, " +   //8
                         "CompressRatio, " +    //9
                         "AdditionalInfo " +    //10
                         " from fbaError WHERE ID = " + errorID;

            if (!sys.GetValueArr(DirectionQuery.Remote, sql, ref arr))
            {
                return;
            }
            if (arr[0] == "")
            {
                sys.SM("Не найдена ошибка!");
                return;
            }

            tbID.Text            = arr[0];
            tbImageSize.Text     = arr[6] + "x" + arr[7];
            tbFormat.Text        = arr[5];
            tbErrorDate.Text     = arr[2];
            tbErrorText.Text     = arr[3];
            tbAddInfo.Text       = arr[10];
            tbUserID.Text        = arr[1];
            tbCompressRatio.Text = arr[9];
            tbFileSize.Text      = arr[8];
            try
            {
                //Как было ранее:
                //byte[] arrayimg = Convert.FromBase64String(screenshotData);
                //Image image = Image.FromStream(new MemoryStream(arrayimg));
                //pictureBox1.Image = image;

                //Test WebP to pictureBox
                Bitmap bmp6;
                byte[] arrayimg = Convert.FromBase64String(arr[4]);
                WebP.Decode(arrayimg, out bmp6);
                pictureBox1.Image = bmp6;
                ShowError();
            }
            catch (Exception ex)
            {
                sys.SM("Ошибка при открытии изображения: " + ex.Message);
                return;
            }
        }