dashboard/services/uniss/main.go
2025-06-04 17:07:17 +08:00

67 lines
1.5 KiB
Go

package uniss
// TODO
// 1.data center object 2.swarm stop after scheduler
import (
"context"
"dashboard/logger"
"dashboard/models"
"dashboard/pkg/errgroups"
"dashboard/settings"
)
var log *logger.Logger
type UnisStation struct {
commonService *commonService
communicateService *communicateService
dataCenterService *dataCenterService
}
func NewUnis(_log *logger.Logger, conf *settings.UnisConfig) (res *UnisStation, err error) {
res = new(UnisStation)
log = _log
res.dataCenterService = newDataCenterService(conf)
res.communicateService, err = newcommunicateService(conf)
if err != nil {
return
}
res.commonService = newcommonService(res.communicateService)
return
}
func (u *UnisStation) GetHttpChannel() chan *models.UnisHttpRequest {
return u.communicateService.httpServerHandler.httpC
}
// High performance threads do not allow any blocking
// If there is blocking work, asynchronous methods need to be used
func (u *UnisStation) mainthread(ctx context.Context) error {
for {
select {
case <-ctx.Done():
log.Error("Unis mesageHandle cancel by ctx")
return ctx.Err()
case httpMsg := <-u.communicateService.httpServerHandler.httpC:
u.communicateService.httpServerHandler.httpHandle(httpMsg)
case httpc := <-u.communicateService.httpClientHandler.httpC:
u.communicateService.httpClientHandler.httpClientHandle(httpc)
// default:
}
}
}
func (u *UnisStation) Run(ctx context.Context) error {
ewgs := errgroups.NewErrGroupFunc()
ewgs.Add(u.communicateService.Run)
ewgs.Add(u.mainthread)
return ewgs.Run(ctx)
}