5 "github.com/dragonfireclient/hydra-dragonfire/tolua"
6 "github.com/yuin/gopher-lua"
13 var lastTime = time.Now()
16 //go:embed builtin/vector.lua
17 var vectorLibrary string
19 var hydraFuncs = map[string]lua.LGFunction{
22 "canceled": l_canceled,
24 "disconnect": l_disconnect,
27 func signalChannel() chan os.Signal {
28 sig := make(chan os.Signal, 1)
29 signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
33 func l_dtime(l *lua.LState) int {
34 l.Push(lua.LNumber(time.Since(lastTime).Seconds()))
38 func l_canceled(l *lua.LState) int {
39 l.Push(lua.LBool(canceled))
43 func l_poll(l *lua.LState) int {
44 client, pkt, timeout := doPoll(l, getClients(l))
48 l.Push(client.userdata)
50 l.Push(tolua.Pkt(l, pkt))
51 l.Push(lua.LBool(timeout))
55 func l_disconnect(l *lua.LState) int {
56 for _, client := range getClients(l) {
65 panic("missing filename")
73 l := lua.NewState(lua.Options{IncludeGoStackTrace: true})
77 for i, a := range os.Args {
78 l.RawSetInt(arg, i-1, lua.LString(a))
80 l.SetGlobal("arg", arg)
82 hydra := l.SetFuncs(l.NewTable(), hydraFuncs)
83 l.SetField(hydra, "BS", lua.LNumber(10.0))
84 l.SetGlobal("hydra", hydra)
86 l.SetField(l.NewTypeMetatable("hydra.auth"), "__index", l.SetFuncs(l.NewTable(), authFuncs))
87 l.SetField(l.NewTypeMetatable("hydra.client"), "__index", l.NewFunction(l_client_index))
89 if err := l.DoString(vectorLibrary); err != nil {
93 if err := l.DoFile(os.Args[1]); err != nil {