private void SendTestingResult(ProgramTestingResult ptResult, CompilerResult cResult)
        {
            /*
             * Указываем в лог-файле о скором
             * завершении  обработки  данного
             * запроса на тестирование.
             */

            logger.Trace(
                "#" +
                _submissionInfo.SubmissionId +
                ": Result is being sent to MySQL server..."
                );

            /*
             * Создаём команду для MySQL сервера
             * на     основе     сформированного
             * запроса к базе данных.
             */

            var updateSqlCommand = new MySqlCommand(
                Properties.Resources.submission_result_query,
                _connection
                );

            /*
             * Указываем параметры выше сформированного
             * запроса к базе данных.
             */

            updateSqlCommand.Parameters.AddWithValue(
                "@param_submissionId",
                _submissionInfo.SubmissionId
                ); // Идентификатор запроса

            updateSqlCommand.Parameters.AddWithValue(
                "@param_hasError",
                Convert.ToInt32(cResult.HasErrors)
                ); // Сигнал об ошибке при компиляции

            updateSqlCommand.Parameters.AddWithValue(
                "@param_compiler_text",
                cResult.CompilerMessage
                ); // Вывод компилятора

            updateSqlCommand.Parameters.AddWithValue(
                "@param_errorOutput",
                Encoding.UTF8.GetBytes(ptResult.GetErrorOutputAsLine())
                ); // Вывод ошибок решения

            updateSqlCommand.Parameters.AddWithValue(
                "@param_output",
                ptResult.TestingResults[ptResult.TestingResults.Length - 1].Output
                ); // Вывод решения

            updateSqlCommand.Parameters.AddWithValue(
                "@param_exitcodes",
                ptResult.GetExitCodesAsLine('|')
                ); // Коды выхода решения

            updateSqlCommand.Parameters.AddWithValue(
                "@param_usedProcTime",
                ptResult.GetUsedProcessorTimeAsLine('|')
                ); // Использованное процессорное время решения

            updateSqlCommand.Parameters.AddWithValue(
                "@param_usedMemory",
                ptResult.GetUsedMemoryAsLine('|')
                ); // Использованная память решения

            updateSqlCommand.Parameters.AddWithValue(
                "@param_result",
                ptResult.GetResultAsLine('|')
                ); // Потестовые результаты решения

            updateSqlCommand.Parameters.AddWithValue(
                "@param_rating",
                0
                ); // Полученный рейтинг за решение

            /*
             * Выполняем запрос к базе данных
             */

            updateSqlCommand.ExecuteNonQuery();
        }
        private ProgramTestingResult RunTesting(
            CompilerResult cResult,
            ref dynamic compilerConfiguration,
            ref ICompilerPlugin compilerPlugin
            )
        {
            /*
             * Записываем   в   лог-файл  информацию  о  том,
             * что в данный  момент  производим  тестирование
             * пользовательского решения поставленной задачи.
             */

            logger.Trace(
                "#" + _submissionInfo.SubmissionId +
                ": Running solution testing subsystem (" +
                _submissionInfo.TestType +
                " mode)..."
                );

            /*
             * Объявляем временную переменную,
             * которая будет хранить результат
             * выполнения тестирования пользо-
             * вательской программы.
             */

            ProgramTestingResult tmpResult = null;

            /*
             * Объявляем  объект на базе класса
             * тестировщика, с помощью которого
             * в скором времени будем выполнять
             * тестировани пользовательских ре-
             * шений задач по программированию.
             */

            var tester = new SimplePM_Tester.SimplePM_Tester(
                ref _connection,
                ref _serverConfiguration,
                ref _compilerConfigurations,
                ref _compilerPlugins,
                cResult.ExeFullname,
                ref _submissionInfo
                );

            /*
             * Выполняем тестирование в блоке обработки
             * исключительных систуаций,  и,  в  случае
             * возникновения такой  ситуации записываем
             * данные о ней в лог-файл  и  искусственно
             * создаём     результаты      тестирования
             * пользовательского решения задачи.
             */

            try
            {
                /*
                 * В зависимости от выбранного пользователем
                 * типа тестирования выполняем специфические
                 * операции по отношению к решению задачи.
                 */

                switch (_submissionInfo.TestType)
                {
                /* Проверка синтаксиса */
                case "syntax":

                    /*
                     * Вызываем   метод,   который   создаёт
                     * иллюзию  проверки   пользовательского
                     * решения    поставленной    задачи   и
                     * возвращает результаты своей "работы".
                     */

                    tmpResult = tester.Syntax();

                    break;

                /* Debug-тестирование */
                case "debug":

                    /*
                     * Вызываем метод Debug-тестирования
                     * пользовательского решения постав-
                     * ленной задачи по программированию
                     */

                    tmpResult = tester.Debug();

                    break;

                /* Release-тестирование */
                case "release":

                    /*
                     * Вызываем метод Release-тестирования
                     * пользовательского  решения  постав-
                     * ленной задачи  по  программированию
                     */

                    tmpResult = tester.Release(
                        ref compilerConfiguration,
                        ref compilerPlugin
                        );

                    break;
                }
            }
            catch (Exception ex)
            {
                // Записываем информацию об исключении в лог
                logger.Error(ex);

                /*
                 * Создаём псевдорезультат тестирования,
                 * который будет содержать информацию о
                 * возникшем во время тестирования поль-
                 * зовательского решения задачи исключе-
                 * нии.
                 */

                tmpResult = new ProgramTestingResult(1)
                {
                    /*
                     * Создаём превдотест и добавляем его
                     * в массив результатов тестирования.
                     */
                    TestingResults =
                    {
                        [0] = new TestResult
                        {
                        // За код выхода принимаем номер исклбчения
                        ExitCode = ex.HResult,

                        // За выходной поток ошибок принимаем исключение
                        ErrorOutput = ex.ToString(),

                        // Заполняем выходные данные информацией (not null)
                        Output = Encoding.UTF8.GetBytes("An exception occured during testing!"),

                        // Устанавливаем результат тестирования
                        Result = TestResult.ErrorOutputNotNullResult,

                        /*
                         * Указываем, что память и процессорное
                         * время не были использованы.
                         */

                        UsedMemory        = 0,
                        UsedProcessorTime = 0
                        }
                    }
                };
            }

            /*
             * Возвращаем результат выполнения
             * тестирования  пользовательского
             * решения данной задачи.
             */

            return(tmpResult);
        }