5 "github.com/dragonfireclient/hydra-dragonfire/tolua"
6 "github.com/yuin/gopher-lua"
13 var lastTime = time.Now()
16 //go:embed builtin/luax/init.lua
17 var builtinLuaX string
19 //go:embed builtin/vector.lua
20 var builtinVector string
22 //go:embed builtin/escapes.lua
23 var builtinEscapes string
25 var builtinFiles = []string{
31 var hydraFuncs = map[string]lua.LGFunction{
34 "canceled": l_canceled,
36 "disconnect": l_disconnect,
39 func signalChannel() chan os.Signal {
40 sig := make(chan os.Signal, 1)
41 signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
45 func l_dtime(l *lua.LState) int {
46 l.Push(lua.LNumber(time.Since(lastTime).Seconds()))
50 func l_canceled(l *lua.LState) int {
51 l.Push(lua.LBool(canceled))
55 func l_poll(l *lua.LState) int {
56 client, pkt, timeout := doPoll(l, getClients(l))
60 l.Push(client.userdata)
62 l.Push(tolua.Pkt(l, pkt))
63 l.Push(lua.LBool(timeout))
67 func l_disconnect(l *lua.LState) int {
68 for _, client := range getClients(l) {
77 panic("missing filename")
85 l := lua.NewState(lua.Options{IncludeGoStackTrace: true})
89 for i, a := range os.Args {
90 l.RawSetInt(arg, i-1, lua.LString(a))
92 l.SetGlobal("arg", arg)
94 hydra := l.SetFuncs(l.NewTable(), hydraFuncs)
95 l.SetField(hydra, "BS", lua.LNumber(10.0))
96 l.SetGlobal("hydra", hydra)
98 l.SetField(l.NewTypeMetatable("hydra.auth"), "__index", l.SetFuncs(l.NewTable(), authFuncs))
99 l.SetField(l.NewTypeMetatable("hydra.client"), "__index", l.NewFunction(l_client_index))
101 for _, str := range builtinFiles {
102 if err := l.DoString(str); err != nil {
107 if err := l.DoFile(os.Args[1]); err != nil {