go-judge/taskqueue/channel.go
criyle 1f86f25995 Refactor & Documentation
- pkg/runner -> pkg/envexec
- add idea about executor server
2020-03-03 02:32:59 -05:00

51 lines
1.0 KiB
Go

package taskqueue
import (
"github.com/criyle/go-judge/runner"
)
var _ runner.Queue = &ChannelQueue{}
// ChannelQueue implements taskqueue by buffered go channel
type ChannelQueue struct {
queue chan runner.Task
}
// NewChannelQueue creates new Queue with buffed go channel
func NewChannelQueue(size int) runner.Queue {
return &ChannelQueue{
queue: make(chan runner.Task, size),
}
}
// Send puts task into run queue
func (q *ChannelQueue) Send(t runner.RunTask) (<-chan runner.RunTaskResult, error) {
c := make(chan runner.RunTaskResult, 1)
q.queue <- Task{
task: t,
result: c,
}
return c, nil
}
// ReceiveC returns the underlying channel
func (q *ChannelQueue) ReceiveC() <-chan runner.Task {
return q.queue
}
// Task implements Task interface
type Task struct {
task runner.RunTask
result chan<- runner.RunTaskResult
}
// Task returns task parameters
func (t Task) Task() *runner.RunTask {
return &t.task
}
// Done returns the run task result
func (t Task) Done(r *runner.RunTaskResult) {
t.result <- *r
}