7
7
"os"
8
8
"strconv"
9
9
"strings"
10
+ "sync"
10
11
"time"
11
12
12
13
"ehang.io/nps/bridge"
@@ -24,11 +25,11 @@ import (
24
25
25
26
var (
26
27
Bridge * bridge.Bridge
27
- RunList map [int ]interface {}
28
+ RunList sync. Map // map[int]interface{}
28
29
)
29
30
30
31
func init () {
31
- RunList = make ( map [ int ] interface {})
32
+ RunList = sync. Map {}
32
33
}
33
34
34
35
//init task from db
@@ -37,7 +38,8 @@ func InitFromCsv() {
37
38
if vkey := beego .AppConfig .String ("public_vkey" ); vkey != "" {
38
39
c := file .NewClient (vkey , true , true )
39
40
file .GetDb ().NewClient (c )
40
- RunList [c .Id ] = nil
41
+ RunList .Store (c .Id , nil )
42
+ //RunList[c.Id] = nil
41
43
}
42
44
//Initialize services in server-side files
43
45
file .GetDb ().JsonDb .Tasks .Range (func (key , value interface {}) bool {
@@ -102,7 +104,8 @@ func StartNewServer(bridgePort int, cnf *file.Tunnel, bridgeType string) {
102
104
if err := svr .Start (); err != nil {
103
105
logs .Error (err )
104
106
}
105
- RunList [cnf .Id ] = svr
107
+ RunList .Store (cnf .Id , svr )
108
+ //RunList[cnf.Id] = svr
106
109
} else {
107
110
logs .Error ("Incorrect startup mode %s" , cnf .Mode )
108
111
}
@@ -155,7 +158,8 @@ func NewMode(Bridge *bridge.Bridge, c *file.Tunnel) proxy.Service {
155
158
156
159
//stop server
157
160
func StopServer (id int ) error {
158
- if v , ok := RunList [id ]; ok {
161
+ //if v, ok := RunList[id]; ok {
162
+ if v , ok := RunList .Load (id ); ok {
159
163
if svr , ok := v .(proxy.Service ); ok {
160
164
if err := svr .Close (); err != nil {
161
165
return err
@@ -170,7 +174,8 @@ func StopServer(id int) error {
170
174
t .Status = false
171
175
file .GetDb ().UpdateTask (t )
172
176
}
173
- delete (RunList , id )
177
+ //delete(RunList, id)
178
+ RunList .Delete (id )
174
179
return nil
175
180
}
176
181
return errors .New ("task is not running" )
@@ -180,7 +185,8 @@ func StopServer(id int) error {
180
185
func AddTask (t * file.Tunnel ) error {
181
186
if t .Mode == "secret" || t .Mode == "p2p" {
182
187
logs .Info ("secret task %s start " , t .Remark )
183
- RunList [t .Id ] = nil
188
+ //RunList[t.Id] = nil
189
+ RunList .Store (t .Id , nil )
184
190
return nil
185
191
}
186
192
if b := tool .TestServerPort (t .Port , t .Mode ); ! b && t .Mode != "httpHostServer" {
@@ -192,11 +198,13 @@ func AddTask(t *file.Tunnel) error {
192
198
}
193
199
if svr := NewMode (Bridge , t ); svr != nil {
194
200
logs .Info ("tunnel task %s start mode:%s port %d" , t .Remark , t .Mode , t .Port )
195
- RunList [t .Id ] = svr
201
+ //RunList[t.Id] = svr
202
+ RunList .Store (t .Id , svr )
196
203
go func () {
197
204
if err := svr .Start (); err != nil {
198
205
logs .Error ("clientId %d taskId %d start error %s" , t .Client .Id , t .Id , err )
199
- delete (RunList , t .Id )
206
+ //delete(RunList, t.Id)
207
+ RunList .Delete (t .Id )
200
208
return
201
209
}
202
210
}()
@@ -220,7 +228,8 @@ func StartTask(id int) error {
220
228
221
229
//delete task
222
230
func DelTask (id int ) error {
223
- if _ , ok := RunList [id ]; ok {
231
+ //if _, ok := RunList[id]; ok {
232
+ if _ , ok := RunList .Load (id ); ok {
224
233
if err := StopServer (id ); err != nil {
225
234
return err
226
235
}
@@ -250,7 +259,8 @@ func GetTunnel(start, length int, typeVal string, clientId int, search string) (
250
259
}
251
260
if start -- ; start < 0 {
252
261
if length -- ; length >= 0 {
253
- if _ , ok := RunList [v .Id ]; ok {
262
+ //if _, ok := RunList[v.Id]; ok {
263
+ if _ , ok := RunList .Load (v .Id ); ok {
254
264
v .RunStatus = true
255
265
} else {
256
266
v .RunStatus = false
0 commit comments