// Make functions related to building a library of Lua code available func exportCodeLibrary(L *lua.LState, userstate pinterface.IUserState) { creator := userstate.Creator() // Register the Library class and the methods that belongs with it. mt := L.NewTypeMetatable(lLibraryClass) mt.RawSetH(lua.LString("__index"), mt) L.SetFuncs(mt, libMethods) // The constructor for new Libraries takes only an optional id L.SetGlobal("CodeLib", L.NewFunction(func(L *lua.LState) int { // Check if the optional argument is given id := defaultID if L.GetTop() == 1 { id = L.ToString(1) } // Create a new Library in Lua userdata, err := newCodeLibrary(L, creator, id) if err != nil { L.Push(lua.LNil) L.Push(lua.LString(err.Error())) L.Push(lua.LNumber(1)) return 3 // Number of returned values } // Return the hash map object L.Push(userdata) return 1 // number of results })) }
func NewUsersHole(state pinterface.IUserState) *UsersHole { uh := new(UsersHole) creator := state.Creator() uh.state = state uh.holes, _ = creator.NewHashMap("holes") uh.seq, _ = creator.NewKeyValue("seq") uh.servers = make(map[string]*HoleApp) return uh }
// Make functions related to HTTP requests and responses available to Lua scripts func exportList(L *lua.LState, userstate pinterface.IUserState) { creator := userstate.Creator() // Register the list class and the methods that belongs with it. mt := L.NewTypeMetatable(lListClass) mt.RawSetH(lua.LString("__index"), mt) L.SetFuncs(mt, listMethods) // The constructor for new lists takes a name and an optional redis db index L.SetGlobal("List", L.NewFunction(func(L *lua.LState) int { name := L.ToString(1) // Check if the optional argument is given if L.GetTop() == 2 { localDBIndex := L.ToInt(2) // Set the DB index, if possible switch rh := creator.(type) { case pinterface.IRedisCreator: rh.SelectDatabase(localDBIndex) } } // Create a new list in Lua userdata, err := newList(L, creator, name) if err != nil { L.Push(lua.LNil) L.Push(lua.LString(err.Error())) L.Push(lua.LNumber(1)) return 3 // Number of returned values } // Return the list object L.Push(userdata) return 1 // Number of returned values })) }