Входные данные подаются через файл input.txt
, либо же входной файл можно изменить в коде:
const FILE = "../input.txt"
Сборка и запуск:
$ go build main.go && ./main
P.S. Строки нумеруются с нуля)
К команде запуска выше добавляются два флага командной строки:
$ go build main.go && ./main --help
Usage of ./main:
-max_queue_size int
The size of job queue (default 10)
-max_workers int
The number of workers to start (default 2)
Билдим и запускаем сервер
$ cd server
$ go build main.go && ./main -port 8000
Билдим и запускаем тестилку для него
$ cd tester
$ go build main.go && ./main
Тестилка проверяет три основных use-кейса и никого не дудосит, потому что зачем?)
Тесты могли бы быть и лучше, но времени у нас не так много...
# создаем задачу асинхронно на 5 секунд
$ curl -X POST -H "Content-Type: application/json" --data '{"duration": "5s"}' http://localhost:8000/add/async
# создаем задачу синхронно на 10 секунд (соединение будет открыто на протяжении этого времени)
$ curl -X POST -H "Content-Type: application/json" --data '{"duration": "10s"}' http://localhost:8000/add/sync
P.S. Если не указывать поле name в JSONе, то оно будет случайным
P.P.S. Будет код ответа 400, если тело запроса некорректно
$ curl http://localhost:8000/schedule
# получаем JSON вида [{"name":"2","duration":"1s"}]
# (или null, если очередь пуста)
$ curl http://localhost:8000/time
# получаем текстовый ответ вида 40s
$ go mod tidy # надо поставить protobuf =(
$ go build main.go && ./main
Я только не совсем понял, должны ли мы были сопоставить proto-файлики по файлу TESTS
,
который нам предложили, или программа должна проводить сопоставление автоматически.
На всякий случай, я оставил закомментированным код автосопоставления в файле main.go
.
Он тоже работает.
Если возникнут вопросы: @somnoynadno