60 lines
1.1 KiB
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
|
|
}
|