Files
sonr/bridge/queue.go
Prad NukalaandGitHub 13e6c3e84d Master (#1262)
* clear

* feat: Add everything

* fix: Commenht
2025-10-03 14:45:52 -04:00

63 lines
1.7 KiB
Go

package bridge
import (
"log"
"github.com/hibiken/asynq"
"github.com/sonr-io/sonr/bridge/tasks"
)
// QueueManager handles Asynq server setup and task registration
type QueueManager struct {
server *asynq.Server
mux *asynq.ServeMux
config *Config
}
// NewQueueManager creates a new queue manager with the given configuration
func NewQueueManager(config *Config) *QueueManager {
// Initialize UCAN task processing server with optimized queue configuration
srv := asynq.NewServer(
asynq.RedisClientOpt{Addr: config.RedisAddr},
config.AsynqConfig,
)
// Register UCAN-based task handlers
mux := asynq.NewServeMux()
registerTaskHandlers(mux)
return &QueueManager{
server: srv,
mux: mux,
config: config,
}
}
// registerTaskHandlers registers all UCAN-based task handlers
func registerTaskHandlers(mux *asynq.ServeMux) {
// Core UCAN token operations
mux.Handle(tasks.TypeUCANToken, tasks.NewUCANProcessor())
mux.Handle(tasks.TypeUCANAttenuation, tasks.NewUCANAttenuationProcessor())
// MPC-based cryptographic operations
mux.Handle(tasks.TypeUCANSign, tasks.NewUCANSignProcessor())
mux.Handle(tasks.TypeUCANVerify, tasks.NewUCANVerifyProcessor())
// DID operations (replaces both TypeVaultGenerate and TypeVaultRefresh)
// Serves as proxy for future x/did module integration
mux.Handle(tasks.TypeUCANDIDGeneration, tasks.NewUCANDIDProcessor())
log.Printf("UCAN task handlers registered successfully")
}
// Run starts the Asynq server with the registered task handlers
func (qm *QueueManager) Run() error {
log.Printf("Starting Asynq task server with Redis at %s", qm.config.RedisAddr)
return qm.server.Run(qm.mux)
}
// Shutdown gracefully shuts down the Asynq server
func (qm *QueueManager) Shutdown() {
qm.server.Shutdown()
}