cic-custodial/internal/tasker/server/server.go

55 lines
1.4 KiB
Go

package server
import (
"github.com/grassrootseconomics/cic-custodial/internal/actions"
tasker_client "github.com/grassrootseconomics/cic-custodial/internal/tasker/client"
"github.com/hibiken/asynq"
"github.com/zerodha/logf"
)
type Opts struct {
ActionsProvider *actions.ActionsProvider
TaskerClient *tasker_client.TaskerClient
RedisDSN string
Concurrency int
Logger logf.Logger
}
type TaskerProcessor struct {
ActionsProvider *actions.ActionsProvider
TaskerClient *tasker_client.TaskerClient
}
type TaskerServer struct {
Server *asynq.Server
Mux *asynq.ServeMux
}
func NewTaskerServer(o Opts) *TaskerServer {
taskerProcessor := &TaskerProcessor{
ActionsProvider: o.ActionsProvider,
TaskerClient: o.TaskerClient,
}
asynqServer := asynq.NewServer(
asynq.RedisClientOpt{
Addr: o.RedisDSN,
},
asynq.Config{
Concurrency: o.Concurrency,
Logger: asynqCompatibleLogger(o.Logger),
},
)
mux := asynq.NewServeMux()
mux.HandleFunc(string(tasker_client.ActivateAccountTask), taskerProcessor.activateAccountProcessor)
mux.HandleFunc(string(tasker_client.SetNewAccountNonceTask), taskerProcessor.setNewAccountNonce)
mux.HandleFunc(string(tasker_client.GiftGasTask), taskerProcessor.giftGasProcessor)
mux.HandleFunc(string(tasker_client.TxDispatchTask), taskerProcessor.txDispatcher)
return &TaskerServer{
Server: asynqServer,
Mux: mux,
}
}