go-judge/README.md
2019-09-01 20:40:34 -07:00

1.1 KiB

go-judge

Under designing.

The goal to to reimplement syzoj/judge-v3 in GO language using go-sandbox.

Planned Design

Brokers and interfaces:

  • client: receive pushed judge tasks from website (web-socket / socket.io / RabbitMQ)
  • data: interface to download, cache and access test files from website by id
  • taskqueue: send to and receive from a queue to run task (GO channel / (RabbitMQ, Redis)) and also including upload / download executable files from compile task
  • file: general file interface (local / memory)
  • language: language configuration for runner

Workers:

  • judger: execute judge tasks and distribute as run task to queue
  • runner: receive run task and execute in sandbox (compile / standard / interactive / answer submit)

Models:

  • JudgeTask: judge task pushed from website (type, data)
  • JudgeSetting: problem setting (from yaml) and JudgeCase
  • RunTask: run task parameters send to run_queue
  • RunResult: run task result sent back from queue

Utilities:

  • Config: read client config from TOML file