public async Task ReleaseAsync(int permits) { var preparedScript = LuaScriptLoader.GetScript(LockScript.SEMAPHORE_RELEASE); var result = await _redisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = GetLockKey(), channel = GetChannelName(), permits = permits, }); }
public async Task <bool> TryAcquireAsync(int quantity, int millisecondsTimeout) { var preparedScript = LuaScriptLoader.GetScript(LockScript.SEMAPHORE_ACQUIRE); var result = await _redisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = GetLockKey(), quantity = quantity, }); return(string.Equals("1", result.ToString())); }
protected virtual async Task <bool> RenewExpirationAsync() { var preparedScript = LuaScriptLoader.GetScript(LockScript.MUTEX_LOCK_RENEW); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { key = LockKey, field = LockId, expire = InternalLockLeaseTime, }); return(string.Equals("1", result.ToString())); }
protected virtual async Task InvokUnlockScriptAsync(int leaseTime) { var preparedScript = LuaScriptLoader.GetScript(LockScript.MUTEX_LOCK_RELEASE); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = LockKey, lock_id = LockId, expire = leaseTime, channel = ChannelName, msg = LockPubSub.UNLOCK_MESSAGE, }); }
public LuaScript() { script = new Script(); LuaScriptLoader loader = new LuaScriptLoader(); loader.ModulePaths = new string[] { "?" }; script.Options.ScriptLoader = loader; LuaSystemLibrary systemLib = new LuaSystemLibrary(this); script.Globals["System"] = systemLib; }
protected override async Task InvokUnlockScriptAsync(int leaseTime) { var preparedScript = LuaScriptLoader.GetScript(LockScript.WRITE_LOCK_RELEASE); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = LockKey, channel = ChannelName, read_unlock_msg = LockPubSub.READ_UNLOCK_MESSAGE, expire = leaseTime, lock_id = LockId }); }
protected override async Task <bool> RenewExpirationAsync() { var preparedScript = LuaScriptLoader.GetScript(LockScript.READ_LOCK_RENEW); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = LockKey, timeout_prefix = LockKey, expire = InternalLockLeaseTime, lock_id = LockId }); return(string.Equals("1", result.ToString())); }
protected override async Task InvokUnlockScriptAsync(int leaseTime) { var preparedScript = LuaScriptLoader.GetScript(LockScript.READ_LOCK_RELEASE); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = LockKey, channel = ChannelName, timeout_key = GetReadWriteTimeoutNamePrefix(), timeout_prefix = LockKey, unlock_msg = LockPubSub.UNLOCK_MESSAGE, lock_id = LockId }); }
protected virtual async Task <int?> InvokLockScriptAsync(int leaseTime) { var preparedScript = LuaScriptLoader.GetScript(LockScript.MUTEX_LOCK_ACQUIRE); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = LockKey, lock_id = LockId, expire = leaseTime, }); if (result.IsNull) { return(null); } return(int.Parse(result.ToString())); }
protected override async Task <int?> InvokLockScriptAsync(int leaseTime) { var preparedScript = LuaScriptLoader.GetScript(LockScript.READ_LOCK_ACQUIRE); var result = await RedisDb.ScriptEvaluateAsync(preparedScript, new { lock_key = LockKey, timeout_key = GetReadWriteTimeoutNamePrefix(), expire = leaseTime, lock_id = LockId, write_lock = GetWriteLockName() }); if (result.IsNull) { return(null); } return(int.Parse(result.ToString())); }
public LuaSetup() { PrintMessage("Lua!"); LuaScriptLoader luaScriptLoader = new LuaScriptLoader(this); LuaCustomConverters.RegisterAll(); UserData.RegisterType <TraitorMessageType>(); UserData.RegisterType <JobPrefab>(); UserData.RegisterType <CharacterInfo>(); UserData.RegisterType <Rectangle>(); UserData.RegisterType <Point>(); UserData.RegisterType <Level.InterestingPosition>(); UserData.RegisterType <Level.PositionType>(); UserData.RegisterType <Level>(); UserData.RegisterType <Items.Components.Steering>(); UserData.RegisterType <ServerLog.MessageType>(); UserData.RegisterType <SpawnType>(); UserData.RegisterType <ChatMessageType>(); UserData.RegisterType <WayPoint>(); UserData.RegisterType <Character>(); UserData.RegisterType <Item>(); UserData.RegisterType <Submarine>(); UserData.RegisterType <Client>(); UserData.RegisterType <LuaPlayer>(); UserData.RegisterType <LuaHook>(); UserData.RegisterType <LuaGame>(); UserData.RegisterType <LuaRandom>(); UserData.RegisterType <LuaTimer>(); UserData.RegisterType <Vector2>(); UserData.RegisterType <Vector3>(); UserData.RegisterType <Vector4>(); lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.LoadMethods); lua.Options.DebugPrint = PrintMessage; lua.Options.ScriptLoader = luaScriptLoader; hook = new LuaHook(this); game = new LuaGame(this); lua.Globals["Player"] = new LuaPlayer(); lua.Globals["Game"] = game; lua.Globals["Hook"] = hook; lua.Globals["Random"] = new LuaRandom(); lua.Globals["Timer"] = new LuaTimer(this); lua.Globals["WayPoint"] = UserData.CreateStatic <WayPoint>(); lua.Globals["SpawnType"] = UserData.CreateStatic <SpawnType>(); lua.Globals["ChatMessageType"] = UserData.CreateStatic <ChatMessageType>(); lua.Globals["ServerLog_MessageType"] = UserData.CreateStatic <ServerLog.MessageType>(); lua.Globals["Submarine"] = UserData.CreateStatic <Submarine>(); lua.Globals["Client"] = UserData.CreateStatic <Client>(); lua.Globals["Character"] = UserData.CreateStatic <Character>(); lua.Globals["Item"] = UserData.CreateStatic <Item>(); lua.Globals["Level"] = UserData.CreateStatic <Level>(); lua.Globals["Vector2"] = UserData.CreateStatic <Vector2>(); lua.Globals["Vector3"] = UserData.CreateStatic <Vector3>(); lua.Globals["PositionType"] = UserData.CreateStatic <Level.PositionType>(); lua.Globals["JobPrefab"] = UserData.CreateStatic <JobPrefab>(); lua.Globals["TraitorMessageType"] = UserData.CreateStatic <TraitorMessageType>(); foreach (string d in Directory.GetDirectories("Lua")) { if (Directory.Exists(d + "/autorun")) { luaScriptLoader.RunFolder(d + "/autorun"); } } }
public void SetScriptLoader(LuaScriptLoader scriptLoader) { this.scriptLoader = scriptLoader; }
private IEnumerator InitializeAsync(Core.KernelInitializeData initializeData) { new LuaScriptParser(initializeData.LuaScriptingDefine); initializeData.LuaScriptingDefine = null; #if UNITY_EDITOR if (!initializeData.LoadLuaByAssetDatabaseWhenEditor) #endif { m_FileToCodes = new Dictionary <string, byte[]>(); LuaScriptLoader luaScriptLoader = new LuaScriptLoader(initializeData, m_FileToCodes); yield return(luaScriptLoader); LuaScriptParser.s_Instance.Release(); } m_LuaEnv = new LuaEnv(); m_LuaEnv.AddLoader(CustomLoader); #region add libs m_LuaEnv.AddBuildin("cjson", OpenLuaLibrary.LoadCJson); if (initializeData.LuaLibs != null) { for (int iLib = 0; iLib < initializeData.LuaLibs.Length; iLib++) { LuaLibItem iterLib = initializeData.LuaLibs[iLib]; if (iterLib.Initer is XLua.LuaDLL.lua_CSFunction initer) { m_LuaEnv.AddBuildin(iterLib.Name, initer); } else { MDebug.LogError("XLua", $"Lub lib({iterLib.Name}).Initer not is a lua_CSFunction"); } } } #endregion #region load log if (initializeData.LuaEnableHighPerformanceLog) { m_LuaEnv.AddBuildin("gfloginternal", OpenLuaLibrary.LoadGFLogInternal); Execuret_RequireToGlobalVariable("gfloginternal", "gfloginternal"); } else { GFLogInternalLib.OpenLib(m_LuaEnv.L, "gfloginternal"); } Execuret_RequireToGlobalVariable("gflog", "Common.GFLog"); #endregion GFTimeLib.OpenLib(m_LuaEnv.L, "gftime"); GFEventCenterLib.OpenLib(m_LuaEnv.L, "gfeventcenter"); Execuret_Require("Common.GFEventCenter"); #region start lua ExecuteString(string.Format("require('{0}')", initializeData.LuaEnterFile)); ExecuteString(initializeData.LuaEnterFunction); #endregion SetEnable(true); }