4
4
"encoding/json"
5
5
"fmt"
6
6
"math/rand"
7
- "net"
8
- "net/http"
9
7
"sync"
10
8
"time"
11
9
@@ -32,13 +30,8 @@ type Bot struct {
32
30
prev * behavior.Tree
33
31
cur * behavior.Tree
34
32
35
- httpMod * script.HttpModule
36
- protoMod * script.ProtoModule
37
- utilsMod * script.UtilsModule
38
- base64Mod * script.Base64Module
39
-
40
- L * lua.LState
41
33
sync.Mutex
34
+ bs * botState
42
35
}
43
36
44
37
const (
@@ -61,7 +54,7 @@ func (b *Bot) GetMetadata() (string, string, error) {
61
54
return b .preloadErr , "" , nil
62
55
}
63
56
64
- meta , err := utils .Table2Map (b .L .GetGlobal ("meta" ).(* lua.LTable ))
57
+ meta , err := utils .Table2Map (b .bs . L .GetGlobal ("meta" ).(* lua.LTable ))
65
58
if err != nil {
66
59
return "" , "" , err
67
60
}
@@ -71,7 +64,7 @@ func (b *Bot) GetMetadata() (string, string, error) {
71
64
return "" , "" , err
72
65
}
73
66
74
- change , err := utils .Table2Map (b .L .GetGlobal ("change" ).(* lua.LTable ))
67
+ change , err := utils .Table2Map (b .bs . L .GetGlobal ("change" ).(* lua.LTable ))
75
68
if err != nil {
76
69
return "" , "" , err
77
70
}
@@ -105,34 +98,18 @@ func NewWithBehaviorTree(path string, bt *behavior.Tree, tmpl string) *Bot {
105
98
id : uuid .New ().String (),
106
99
tree : bt ,
107
100
cur : bt ,
108
- L : lua . NewState (),
101
+ bs : luaPool . Get (),
109
102
name : tmpl ,
110
- httpMod : script .NewHttpModule (& http.Client {
111
- Transport : & http.Transport {
112
- DialContext : (& net.Dialer {
113
- Timeout : 5 * time .Second ,
114
- }).DialContext ,
115
- DisableKeepAlives : true ,
116
- },
117
- Timeout : 5 * time .Second ,
118
- }),
119
- protoMod : & script.ProtoModule {},
120
- utilsMod : & script.UtilsModule {},
121
- base64Mod : & script.Base64Module {},
122
103
}
123
104
124
105
rand .Seed (time .Now ().UnixNano ())
125
106
126
- bot .L .PreloadModule ("proto" , bot .protoMod .Loader )
127
- bot .L .PreloadModule ("http" , bot .httpMod .Loader )
128
- bot .L .PreloadModule ("utils" , bot .utilsMod .Loader )
129
- bot .L .PreloadModule ("base64" , bot .base64Mod .Loader )
130
-
131
107
// 这里要对script目录进行一次检查,将lua脚本都载入进来
132
108
preScripts := utils .GetDirectoryFiels (path , ".lua" )
133
109
for _ , v := range preScripts {
134
- err := bot .L . DoFile ( path + v )
110
+ err := DoFile ( bot .bs . L , path + v )
135
111
if err != nil {
112
+ fmt .Println ("err" , err .Error ())
136
113
bot .preloadErr = fmt .Sprintf ("load script %v err : %v" , path + v , err .Error ())
137
114
}
138
115
}
@@ -161,21 +138,21 @@ func (b *Bot) run_selector(nod *behavior.Tree, next bool) (bool, error) {
161
138
162
139
func (b * Bot ) run_assert (nod * behavior.Tree , next bool ) (bool , error ) {
163
140
164
- err := b . L . DoString ( nod .Code )
141
+ err := DoString ( b . bs . L , nod .Code )
165
142
if err != nil {
166
143
return false , err
167
144
}
168
145
169
- err = b .L .CallByParam (lua.P {
170
- Fn : b .L .GetGlobal ("execute" ),
146
+ err = b .bs . L .CallByParam (lua.P {
147
+ Fn : b .bs . L .GetGlobal ("execute" ),
171
148
NRet : 1 ,
172
149
Protect : true ,
173
150
})
174
151
if err != nil {
175
152
return false , err
176
153
}
177
- v := b .L .Get (- 1 )
178
- b .L .Pop (1 )
154
+ v := b .bs . L .Get (- 1 )
155
+ b .bs . L .Pop (1 )
179
156
180
157
if lua .LVAsBool (v ) {
181
158
if next {
@@ -211,22 +188,22 @@ func (b *Bot) run_sequence(nod *behavior.Tree, next bool) (bool, error) {
211
188
212
189
func (b * Bot ) run_condition (nod * behavior.Tree , next bool ) (bool , error ) {
213
190
214
- err := b . L . DoString ( nod .Code )
191
+ err := DoString ( b . bs . L , nod .Code )
215
192
if err != nil {
216
193
return false , err
217
194
}
218
195
219
- err = b .L .CallByParam (lua.P {
220
- Fn : b .L .GetGlobal ("execute" ),
196
+ err = b .bs . L .CallByParam (lua.P {
197
+ Fn : b .bs . L .GetGlobal ("execute" ),
221
198
NRet : 1 ,
222
199
Protect : true ,
223
200
})
224
201
if err != nil {
225
202
return false , err
226
203
}
227
204
228
- v := b .L .Get (- 1 )
229
- b .L .Pop (1 )
205
+ v := b .bs . L .Get (- 1 )
206
+ b .bs . L .Pop (1 )
230
207
231
208
if lua .LVAsBool (v ) {
232
209
if next {
@@ -288,21 +265,21 @@ ext:
288
265
289
266
func (b * Bot ) run_script (nod * behavior.Tree , next bool ) (bool , error ) {
290
267
291
- err := b . L . DoString ( nod .Code )
268
+ err := DoString ( b . bs . L , nod .Code )
292
269
if err != nil {
293
270
return false , err
294
271
}
295
272
296
- err = b .L .CallByParam (lua.P {
297
- Fn : b .L .GetGlobal ("execute" ),
273
+ err = b .bs . L .CallByParam (lua.P {
274
+ Fn : b .bs . L .GetGlobal ("execute" ),
298
275
NRet : 1 ,
299
276
Protect : true ,
300
277
})
301
278
if err != nil {
302
279
return false , err
303
280
}
304
- //v := b.L.Get(-1)
305
- b .L .Pop (1 )
281
+ //v := b.bs. L.Get(-1)
282
+ b .bs . L .Pop (1 )
306
283
307
284
// mergo.MergeWithOverwrite(&b.metadata, t)
308
285
@@ -400,16 +377,19 @@ func (b *Bot) RunByBlock() error {
400
377
}()
401
378
402
379
err := b .run_children (b .tree , b .tree .Children )
403
- fmt .Println ("run block err" , err )
380
+ if err != nil {
381
+ fmt .Println ("run block err" , err )
382
+ }
383
+
404
384
return err
405
385
}
406
386
407
387
func (b * Bot ) GetReport () []script.Report {
408
- return b .httpMod .GetReport ()
388
+ return b .bs . httpMod .GetReport ()
409
389
}
410
390
411
391
func (b * Bot ) Close () {
412
- b . L . Close ( )
392
+ luaPool . Put ( b . bs )
413
393
}
414
394
415
395
type State int32
0 commit comments