Example #1
0
        static void Main(string[] args)
        {
            Console.WriteLine($"--- {SubmissionType.FullName} ---");
            var submissionRunner = new SubmissionRunner(SubmissionType)
            {
                Seed = Seed
            };

            submissionRunner.Run();
        }
Example #2
0
        private static void Test4()
        {
            var runner = new SubmissionRunner(typeof(SimulatedEfficientSolution))
            {
                ShouldValidateResult = false,
                Seed = 1
            };

            runner.Run();
        }
Example #3
0
        public override void Start(IConnection connection)
        {
            base.Start(connection);
            var consumer = new AsyncEventingBasicConsumer(Channel);

            consumer.Received += async(ch, ea) =>
            {
                using var scope = _factory.CreateScope();
                var serialized = Encoding.UTF8.GetString(ea.Body.ToArray());
                var message    = JsonConvert.DeserializeObject <JobRequestMessage>(serialized);

                IJobRunner runner = null;
                switch (message.JobType)
                {
                case JobType.JudgeSubmission:
                    runner = new SubmissionRunner(scope.ServiceProvider);
                    break;

                case JobType.CheckPlagiarism:
                    runner = new PlagiarismChecker(scope.ServiceProvider);
                    break;

                default:
                    Logger.LogError($"Unknown job type JobType={message.JobType}");
                    break;
                }
                if (runner is not null)
                {
                    var completeVersion = await runner.HandleJobRequest(message);

                    if (completeVersion > 0)
                    {
                        await _producer.SendAsync(message.JobType, message.TargetId, completeVersion);
                    }
                }
                Channel.BasicAck(ea.DeliveryTag, false);
            };
            Channel.BasicQos(0, 1, false);
            Channel.BasicConsume(Queue, false, consumer); // disable auto ack for work scheduling
        }