Exemple #1
0
        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,
            });
        }
Exemple #2
0
        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()));
        }
Exemple #3
0
        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()));
        }
Exemple #4
0
        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;
    }
Exemple #6
0
        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
            });
        }
Exemple #7
0
        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()));
        }
Exemple #8
0
        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
            });
        }
Exemple #9
0
        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()));
        }
Exemple #10
0
        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()));
        }
Exemple #11
0
        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");
                }
            }
        }
Exemple #12
0
 public void SetScriptLoader(LuaScriptLoader scriptLoader)
 {
     this.scriptLoader = scriptLoader;
 }
Exemple #13
0
        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);
        }