E5BotForSQLite/task/sign.go

60 lines
1.1 KiB
Go

package task
import (
"fmt"
"github.com/iyear/E5SubBot/config"
"github.com/iyear/E5SubBot/model"
"go.uber.org/zap"
)
func Sign(clients []*model.Client) []*model.ErrClient {
var errClients []*model.ErrClient
done := make(chan struct{})
in := make(chan *model.ErrClient, 5)
out := make(chan *model.ErrClient, 5)
go func() {
for _, client := range clients {
in <- &model.ErrClient{
Client: client,
Err: nil,
}
}
close(in)
}()
for i := 0; i < config.MaxGoroutines; i++ {
go func() {
for {
select {
case errCli, f := <-in:
if !f {
continue
}
err := errCli.GetOutlookMails()
errCli.Err = err
out <- errCli
case <-done:
return
}
}
}()
}
for i := 0; i < len(clients); i++ {
errClient := <-out
if errClient.Err == nil {
fmt.Printf("%s OK\n", errClient.MsId)
} else {
zap.S().Errorw("failed to sign",
"error", errClient.Err,
"id", errClient.ID,
)
//fmt.Printf("%s %s\n",errClient.MsId,errClient.Err)
}
errClients = append(errClients, errClient)
}
close(done)
return errClients
}