Step1)在題目點選「提交解答」,驅動網址「problem/a0000/submit」,查詢online-judge/dmoj/urls.py的第120行,對應到程式「problem.ProblemSubmit.as_view」
Step2)呼叫online-judge/judge/views/problem.py內的ProblemSubmit,使用self.new_submission.judge(force_judge=True, judge_id=form.cleaned_data['judge']),new_submission是ProblemSubmitForm儲存後的回傳物件,是models的Submission物件,由step3得知,所以self.new_submission.judge呼叫Submission的judge,用於傳送程式給bridge,bridge再傳送給評判主機。
Step3)ProblemSubmitForm定義在online-judge/forms.py,對應的model為Submission
Step4)在online-judge/judge/models/submission.py的類別Submission,定義judge函式呼叫judge_submission,定義在online-judge/judge/judgeapi.py
Step5)在online-judge/judge/judgeapi.py找到judge_submission,最後呼叫同檔案上方的judge_request,judge_request將解題程式碼送給Bridge。
Step6)DMOJ的bridge使用「python3 manage.py runbridged」,runbridged定義在套件judge,online-judge/judge/management/commands/runbridged.py,呼叫judge_daemon啟動bridge
Step7)在dmoj/online-judge/judge/bridge/daemon.py定義judge_daemon