@@ -2,10 +2,12 @@ package bot
2
2
3
3
import (
4
4
"EverythingSuckz/fsb/config"
5
+ "context"
5
6
"fmt"
6
7
"os"
7
8
"path/filepath"
8
9
"sync"
10
+ "time"
9
11
10
12
"github.com/celestix/gotgproto"
11
13
"github.com/celestix/gotgproto/sessionMaker"
@@ -89,6 +91,9 @@ func GetNextWorker() *Worker {
89
91
90
92
func StartWorkers (log * zap.Logger ) {
91
93
log .Sugar ().Info ("Starting workers" )
94
+ timeOut := 30 * time .Second
95
+ ctx , cancel := context .WithTimeout (context .Background (), timeOut )
96
+ defer cancel ()
92
97
Workers .Init (log )
93
98
if config .ValueOf .UseSessionFile {
94
99
log .Sugar ().Info ("Using session file for workers" )
@@ -99,21 +104,30 @@ func StartWorkers(log *zap.Logger) {
99
104
return
100
105
}
101
106
}
102
- c := make (chan struct {})
107
+ c := make (chan struct {}, len ( config . ValueOf . MultiTokens ) )
103
108
for i := 0 ; i < len (config .ValueOf .MultiTokens ); i ++ {
104
109
go func (i int ) {
105
110
err := Workers .Add (config .ValueOf .MultiTokens [i ])
106
111
if err != nil {
107
112
log .Error ("Failed to start worker" , zap .Error (err ))
108
113
return
109
114
}
110
- c <- struct {}{}
115
+ select {
116
+ default :
117
+ c <- struct {}{}
118
+ case <- ctx .Done ():
119
+ return
120
+ }
111
121
}(i )
112
122
}
113
123
// wait for all workers to start
114
124
log .Sugar ().Info ("Waiting for all workers to start" )
115
125
for i := 0 ; i < len (config .ValueOf .MultiTokens ); i ++ {
116
- <- c
126
+ select {
127
+ case <- c :
128
+ case <- time .After (timeOut ):
129
+ log .Sugar ().Warnf ("Timed out waiting for worker %d to start" , i )
130
+ }
117
131
}
118
132
}
119
133
0 commit comments