Esempio n. 1
0
        void CreateMainClassFile(string dir, string s_namespace, ClassMeta meta)
        {
            FileStream file = null;

            try
            {
                file = File.Create(Path.Combine(dir, meta.Name + ".cs"));
                file.WriteLine("using System;");
                file.WriteLine("using System.Collections.Generic;");
                file.WriteLine("using YiDian.EventBus;");
                file.WriteLine("using YiDian.EventBus.MQ.KeyAttribute;");
                file.WriteLine("namespace EventModels." + s_namespace);
                file.WriteLine("{");
                if (meta.IsEventType)
                {
                    file.WriteLine("    public partial class " + meta.Name + ": " + typeof(IMQEvent).Name);
                }
                else
                {
                    file.WriteLine("    public partial class " + meta.Name);
                }
                file.WriteLine("    {");
                foreach (var p in meta.Properties)
                {
                    if (p.Attr != null)
                    {
                        if (p.Attr.AttrType == AttrType.Index)
                        {
                            file.WriteLine(string.Format(attr_property, p.Attr.Value));
                        }
                    }
                    file.WriteLine(string.Format(index_property, p.SeralizeIndex.ToString()));
                    if (p.Type.StartsWith(PropertyMetaInfo.P_Array))
                    {
                        var type = p.Type.Substring(6);
                        file.Write(string.Format(list_property, type, p.Name));
                    }
                    else if (p.Type.StartsWith(PropertyMetaInfo.P_Enum))
                    {
                        var type = p.Type.Substring(5);
                        file.Write(string.Format(s_property, type, p.Name));
                    }
                    else
                    {
                        file.Write(string.Format(s_property, p.Type, p.Name));
                    }
                    file.WriteLine("{ get; set; }");
                }
                file.WriteLine("    }");
                file.WriteLine("}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.ToString());
            }
            finally
            {
                file?.Close();
            }
        }
Esempio n. 2
0
        private CreateClassData CreateUseCase(MakeUseCaseParameter param)
        {
            var className      = $"{param.CompleteName}Interactor";
            var classNameSpace = $"Domain.Application.{param.ControllerName}";

            var meta = new ClassMeta(classNameSpace, className);

            meta.SetupUsing()
            .AddUsing("System")
            .AddUsing("UseCase." + param.ControllerName + "." + param.ActionName);

            meta.SetupImplements()
            .AddImplements("I" + param.CompleteName + "UseCase");

            meta.SetupMethods()
            .AddMethod("Handle", method => method
                       .SetReturnType(param.CompleteName + "Response")
                       .AddArgument("request", param.CompleteName + "Request")
                       .SetAccessLevel(AccessLevel.Public)
                       );

            var content = classFileGenerateDriver.Create(meta, Language.CSharp);

            return(new CreateClassData(
                       Path.Combine("Application", param.ActionName),
                       className + ".cs",
                       content
                       ));
        }
Esempio n. 3
0
        public async void AvailableCharacterSelected()
        {
            var buildingMetaId = "Test_AvailableCharacterSelected";
            var classMetaId    = "Test_AvailableCharacterSelected";
            var playerId       = "Test_AvailableCharacterSelected";
            var characterIndex = 0;

            // Create test class meta if it doesn't exist.
            var classMeta = await new ClassMeta(classMetaId).LoadAsync();

            if (classMeta == null)
            {
                classMeta             = new ClassMeta(classMetaId);
                classMeta.Requirement = new Requirement()
                {
                    BuildingMetaIds = new List <string> {
                        buildingMetaId
                    }
                };
                await classMeta.InsertAsync();
            }

            // Create test player, character and required building.
            var building = new Building(buildingMetaId);

            building.IsConstructed = true;
            var character = new Character(classMetaId);
            var player    = await Helpers.CreateTestPlayer(playerId, building : building, character : character);

            // Auth player.
            var sessionToken = Helpers.GetSessionToken(playerId);

            // Mock data.
            var data = JToken.Parse($@"{{
                'PlayerId':'{playerId}',
                'SessionToken':'{sessionToken}',
                'CharacterIndex':{characterIndex}
            }}");

            // Execute controller.
            var controller    = new SelectCharacterController();
            var responseToken = await controller.HandleHttpRequestAsync(data);

            // Assert controller response status is OK.
            Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]);

            // Make sure char is selected for the first time (req-free).
            player = await player.LoadAsync();

            Assert.True(player.SelectedCharacterIndex == characterIndex);

            // Make sure char is selected for the second time (with req checked).
            responseToken = await controller.HandleHttpRequestAsync(data);

            Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]);
        }
        public async void LevelIncreased()
        {
            var classMetaId = "Test_LevelIncreased2";
            var playerId    = "Test_LevelIncreased2";
            var expToAdd    = 700;
            var charIndex   = 0;

            // Create test class meta if it doesn't exist.
            var classMeta = await new ClassMeta(classMetaId).LoadAsync();

            if (classMeta == null)
            {
                classMeta = new ClassMeta(classMetaId);
                classMeta.ExpToLevelUp = new List <int>()
                {
                    0, 100, 200, 300, 500
                };
                await classMeta.InsertAsync();
            }

            // Create test player.
            var player = await Helpers.CreateTestPlayer(playerId);

            player.Characters.Add(new Character(classMetaId));
            await player.ReplaceAsync();

            // Auth player.
            var sessionToken = Helpers.GetSessionToken(playerId);

            // Mock data.
            var data = JToken.Parse($@"{{
                'PlayerId':'{playerId}',
                {Helpers.JsonServerCredentials},
                'Experience':'{expToAdd}',
                'CharacterIndex':'{charIndex}'
            }}");

            // Execute controller.
            var controller    = new AddExperienceController();
            var responseToken = await controller.HandleHttpRequestAsync(data);

            // Assert controller response status is OK.
            Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]);

            // Assert new level is set in response.
            Assert.Equal(responseToken["NewLevel"], 3);

            // Make sure level is added to character.
            player = await player.LoadAsync();

            Assert.Equal(player.Characters[0].Level, 3);

            // Make sure talent points are added to character.
            Assert.Equal(player.Characters[0].TalentPoints, 3);
        }
Esempio n. 5
0
        private ITemplate FindClassTemplate(ClassMeta classMeta, Language language)
        {
            switch (language)
            {
            case Language.CSharp:
                return(new ClassTemplate(classMeta));

            default:
                throw new ArgumentOutOfRangeException(nameof(language), language, null);
            }
        }
Esempio n. 6
0
        public async void PlayerCreatedWithDefaultParams()
        {
            var playerId       = "Test_PlayerCreatedWithDefaultParams";
            var itemMetaId     = "Test_PlayerCreatedWithDefaultParams";
            var classMetaId    = "Test_PlayerCreatedWithDefaultParams";
            var playerPassword = "******";

            // Create test class meta if it doesn't exist.
            var classMeta = await new ClassMeta(classMetaId).LoadAsync();

            if (classMeta == null)
            {
                classMeta = new ClassMeta(classMetaId);
                classMeta.DefaultItems = new List <string> {
                    itemMetaId
                };
                classMeta.IsInitiallyAvailable = true;
                await classMeta.InsertAsync();
            }

            // Delete existing test player.
            var existingPlayer = await new Player(playerId).LoadAsync();

            if (existingPlayer != null)
            {
                await existingPlayer.DeleteAsync();
            }

            // Mock data.
            var data = JToken.Parse($@"{{
                'PlayerId':'{playerId}',
                'Password':'******'
            }}");

            // Execute controller.
            var createPlayerController = new CreatePlayerController();
            var responseToken          = await createPlayerController.HandleHttpRequestAsync(data);

            // Assert controller response status is OK.
            Assert.Equal(responseToken, JStatus.Ok);

            // Load new player.
            var createdPlayer = await new Player(playerId).LoadAsync();

            // Make sure default character is added.
            Assert.True(createdPlayer.Characters.Exists(character => character.ClassMetaId == classMetaId));

            // Make sure default item is added.
            Assert.True(createdPlayer.HasItemOfMeta(itemMetaId));
        }
Esempio n. 7
0
        private CreateClassData CreateResponse(MakeUseCaseParameter param)
        {
            var className      = responseName(param);
            var classNameSpace = nameSpace(param);

            var meta = new ClassMeta(classNameSpace, className);

            meta.SetupUsing().AddUsing(usingNameSpace);
            meta.SetupImplements().AddImplements("IResponse");

            var content = classFileGenerateDriver.Create(meta, Language.CSharp);

            return(new CreateClassData(
                       Path.Combine(param.ControllerName, param.ActionName),
                       className + ".cs",
                       content
                       ));
        }
Esempio n. 8
0
        //public void RegisterEvents(AppMetas metas)
        //{
        //    var app = metas.Name;
        //    var version = metas.Version;
        //    foreach (var meta in metas.MetaInfos)
        //    {
        //        RegisterEvent(app, version, meta);
        //    }
        //}

        #region HttpApi
        private CheckResult RegisterClassEvent(string appname, string version, ClassMeta meta)
        {
            try
            {
                var uri = "reg_class?app=" + appname + "&version=" + version;
                var sb  = new StringBuilder();
                meta.ToJson(sb);
                var json     = sb.ToString();
                var response = PostReq(uri, json);
                return(response.JsonTo <CheckResult>());
            }
            catch (Exception ex)
            {
                return(new CheckResult()
                {
                    IsVaild = false, InvaildMessage = ex.ToString()
                });
            }
        }
Esempio n. 9
0
        private CreateClassData CreateInteractor(MakeUseCaseParameter param)
        {
            var className      = $"Mock{param.CompleteName}Interactor";
            var classNamespace = $"MockUseCase.{param.ControllerName}";

            var meta = new ClassMeta(classNamespace, className);

            meta.SetupUsing()
            .AddUsing("NrsLib.SequentiallyJsonDataLoader")
            .AddUsing("UseCase." + param.ControllerName + "." + param.ActionName);

            meta.SetupImplements()
            .AddImplements("I" + param.CompleteName + "UseCase");

            meta.SetupFields()
            .AddField("jsonsLoader",
                      field => field.SetReadOnly(true).SetType("JsonsLoader"));

            meta.SetupConstructor()
            .AddConstructor(constructor => constructor
                            .SetAccessLevel(AccessLevel.Public)
                            .AddArgument("jsonsLoader", "JsonsLoader")
                            .AddBody("this.jsonsLoader = jsonsLoader;"));

            var responseClassName = param.CompleteName + "Response";

            meta.SetupMethods()
            .AddMethod("Handle", method => method
                       .SetReturnType(responseClassName)
                       .AddArgument("request", param.CompleteName + "Request")
                       .SetAccessLevel(AccessLevel.Public)
                       .AddBody($"return jsonsLoader.Generate<{responseClassName}>();")
                       );

            var content = classFileGenerateDriver.Create(meta, Language.CSharp);

            return(new CreateClassData(
                       param.ControllerName,
                       className + ".cs",
                       content
                       ));
        }
Esempio n. 10
0
        static void Main(string[] args)
        {
            var classMeta = new ClassMeta("TestNameSpace.Test", "TestClass");

            // setup partial class
            classMeta.SetupClass()
            .SetPartial(true);

            // setup using
            classMeta.SetupUsing()
            .AddUsing("System")
            .AddUsing("System.Linq");

            // setup implements
            classMeta.SetupImplements()
            .AddImplements("ISuperClass")
            .AddImplements("ISuperClassWithGeneric", implement => implement.AddGeneric("string"));

            // setup constructor
            classMeta.SetupConstructor()
            .AddConstructor(constructor => constructor
                            .SetAccessLevel(AccessLevel.Public)
                            .AddArgument("args", "string[]")
                            .AddArgument("num", "int")
                            .AddBody("Console.WriteLine(\"Instantiated\");"))
            .AddConstructor(constructor => constructor
                            .SetAccessLevel(AccessLevel.Public)
                            .AddArgument("args", "string[]")
                            .SetCallThis("args", "1"));

            // setup field
            classMeta.SetupFields()
            .AddField("testField", field => field.SetType("int").SetValue("1"));

            // setup simple public method
            classMeta.SetupMethods()
            .AddMethod("TestPublicMethod", method => method.AddArgument("test", "string").SetAccessLevel(AccessLevel.Public));

            // setup no body method
            classMeta.SetupMethods()
            .AddMethod("NoBodyMethod", method => method.NoBodyOnNoLine(true));

            // setup complex method
            classMeta.SetupMethods()
            .AddMethod("ComplexMethod", method =>
                       method.SetReturnType("int")
                       .AddBody("int i = 0;", "i++;", "return i;")
                       .AddGenerics("T", generics => generics.AddWhere("class").AddWhere("new()"))
                       .AddGenerics("TT", generics => generics.AddWhere("class"))
                       .AddArgument("t", "T")
                       );

            classMeta.SetupProperty()
            .AddProperty("test");

            // if you don't want to use lambda
            var tmpMethod = new MethodDefinition("TempMethod");

            tmpMethod
            .AddBody("Console.WriteLine(\"Hello world\");")
            .SetAccessLevel(AccessLevel.Public)
            .AddArgument("args", "string[]");
            classMeta.SetupMethods()
            .AddMethod(tmpMethod);

            var interfaceMeta = new InterfaceMeta("TestNameSpace.Test", "TestInterface");

            interfaceMeta.SetupUsing()
            .AddUsing("System.Linq");

            interfaceMeta.SetupImplements()
            .AddImplements("SuperClass", x => x.AddGeneric("string"));

            interfaceMeta.SetupMethod()
            .AddMethod("TestMethod", x => x.AddArgument("test", "string"))
            .AddMethod("Test2Method")
            .AddMethod("TestGenericsMethod", method =>
                       method.AddGenerics("TKey", generics => generics.AddWhere("class").AddWhere("new()"))
                       .AddGenerics("TVal", generics => generics.AddWhere("struct"))
                       );

            // create
            var driver        = new MainDriver();
            var classText     = driver.Create(classMeta, Language.CSharp);
            var interfaceText = driver.Create(interfaceMeta, Language.CSharp);

            Console.WriteLine("---- class -----");
            Console.WriteLine(classText);
            Console.WriteLine("---- interface -----");
            Console.WriteLine(interfaceText);
            Console.WriteLine("push any key to end");
            Console.ReadKey();
        }
Esempio n. 11
0
        public async Task <ActionResultReponese <string> > InsertAsync(string className, string idClass, ClassMeta clasMeta)
        {
            var idGui      = Guid.NewGuid().ToString();
            var isNameExit = await _classRepository.CheckExistsAsync(idClass);

            if (isNameExit)
            {
                return(new ActionResultReponese <string>(-2, "da ton tai", "ClassSpecialized"));
            }
            var isSpecialized = await _ispecializedRepository.CheckExistByIdSpecialized(clasMeta.IdSpecialized);

            if (!isSpecialized)
            {
                return(new ActionResultReponese <string>(-3, "IdSpecialized khong ton tai", "Specialized"));
            }
            var isEducation = await _iEducationProgramRepository.CheckExistsAsync(clasMeta.IdEducationProgram);

            if (!isEducation)
            {
                return(new ActionResultReponese <string>(-5, "EducationProgram khong ton tai", "EducationProgram"));
            }
            var clas = new ClassSpecialized
            {
                id                 = idGui,
                IdClass            = idClass.Trim(),
                ClassName          = className.Trim(),
                IdSpecialized      = clasMeta.IdSpecialized?.Trim(),
                IdEducationProgram = clasMeta.IdEducationProgram?.Trim(),
                Course             = clasMeta.Course?.Trim(),
                Createdate         = DateTime.Now,
                LastUpdate         = null,
                IsActive           = true,
                IsDelete           = false
            };
            var result = await _classRepository.InsertAsync(clas);

            if (result >= 0)
            {
                return(new ActionResultReponese <string>(result, "thanh cong", "ClassSpecializd", null));
            }
            return(new ActionResultReponese <string>(result, "that bai", "ClassSpecializd", null));
        }
Esempio n. 12
0
        ClassMeta CreateClassMeta(Type type, string appName, out List <Type> types, bool enableDefaultSeralize)
        {
            var isEventType = type.GetInterfaces().Where(x => x == typeof(IMQEvent)).Count() > 0;
            var meta        = new ClassMeta()
            {
                Name = type.Name, IsEventType = isEventType, DefaultSeralize = enableDefaultSeralize
            };

            types = new List <Type>();
            foreach (var p in type.GetProperties())
            {
                var pinfo = new PropertyMetaInfo()
                {
                    Name = p.Name, Type = GetBaseTypeName(p.PropertyType.Name), SeralizeIndex = ((SeralizeIndex)p.GetCustomAttribute(typeof(SeralizeIndex), false)).Index
                };
                if (pinfo.Type == string.Empty)
                {
                    if (p.PropertyType.IsGenericType && p.PropertyType.GetInterfaces().Contains(typeof(IList)))
                    {
                        var s_list = PropertyMetaInfo.P_Array + separator;
                        var t_args = p.PropertyType.GenericTypeArguments;
                        for (var i = 0; i < t_args.Length; i++)
                        {
                            var pname = GetBaseTypeName(t_args[i].Name);
                            if (string.IsNullOrEmpty(pname))
                            {
                                pname = t_args[i].Name;
                            }
                            s_list += pname;
                            if (i != t_args.Length - 1)
                            {
                                s_list += separator;
                            }
                        }
                        pinfo.Type = s_list;
                    }
                    else if (p.PropertyType.IsArray)
                    {
                        var pname = p.PropertyType.Name;
                        pname = pname.Substring(0, pname.IndexOf('['));
                        var name = GetBaseTypeName(pname);
                        if (string.IsNullOrEmpty(name))
                        {
                            name = pname;
                        }
                        pinfo.Type = PropertyMetaInfo.P_Array + separator + name;
                    }
                    else
                    {
                        if (p.PropertyType.IsEnum)
                        {
                            pinfo.Type = PropertyMetaInfo.P_Enum + separator + p.PropertyType.Name;
                        }
                        else
                        {
                            pinfo.Type = p.PropertyType.Name;
                        }
                        if (!p.PropertyType.IsSubclassOf(typeof(IMQEvent)))
                        {
                            types.Add(p.PropertyType);
                        }
                    }
                }
                var attrs = p.GetCustomAttributes(typeof(KeyIndex), false);
                if (attrs.Length != 0)
                {
                    pinfo.Attr = new MetaAttr()
                    {
                        AttrType = AttrType.Index, Value = ((KeyIndex)attrs[0]).Index.ToString()
                    }
                }
                ;
                meta.Properties.Add(pinfo);
            }

            return(meta);
        }
Esempio n. 13
0
        void CreateSeralizeClassFile(string dir, string s_namespace, ClassMeta meta)
        {
            FileStream file = null;

            try
            {
                file = File.Create(Path.Combine(dir, meta.Name + "_s.cs"));
                file.WriteLine("using System;");
                file.WriteLine("using System.Text;");
                file.WriteLine("using System.Collections.Generic;");
                file.WriteLine("using YiDian.EventBus;");
                file.WriteLine("using YiDian.EventBus.MQ;");
                file.WriteLine("using YiDian.EventBus.MQ.KeyAttribute;");
                file.WriteLine("namespace EventModels." + s_namespace);
                file.WriteLine("{");
                file.WriteLine("    public partial class " + meta.Name + ": " + typeof(IYiDianSeralize).Name);
                file.WriteLine("    {");
                file.WriteLine("        public uint ToBytes(WriteStream stream)");
                file.WriteLine("        {");
                file.WriteLine("            uint size = 5;");
                file.WriteLine("            var span = stream.Advance(4);");
                var dic = PropertyGroup(meta.Properties);
                file.WriteLine(string.Format("            stream.WriteByte({0});", dic.Count.ToString()));
                if (dic.TryGetValue(EventPropertyType.L_8, out List <PropertyMetaInfo> l8_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_8,{0});", l8_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_Date, out List <PropertyMetaInfo> ldate_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_Date,{0});", ldate_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_16, out List <PropertyMetaInfo> l16_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_16,{0});", l16_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_32, out List <PropertyMetaInfo> l32_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_32,{0});", l32_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_64, out List <PropertyMetaInfo> l64_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_64,{0});", l64_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_Str, out List <PropertyMetaInfo> lstr_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_Str,{0});", lstr_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_Array, out List <PropertyMetaInfo> larr_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_Array,{0});", larr_props.Count.ToString()));
                }
                if (dic.TryGetValue(EventPropertyType.L_N, out List <PropertyMetaInfo> ln_props))
                {
                    file.WriteLine(string.Format("             size +=stream.WriteHeader(EventPropertyType.L_N,{0});", ln_props.Count.ToString()));
                }
                if (l8_props != null)
                {
                    l8_props = l8_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l8_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        if (item.Type == PropertyMetaInfo.P_Boolean)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteByte({0} ? (byte)1 : (byte)0);", item.Name));
                        }
                        else
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteByte({0});", item.Name));
                        }
                    }
                }
                if (ldate_props != null)
                {
                    ldate_props = ldate_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in ldate_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        file.WriteLine(string.Format("             size +=stream.WriteDate({0});", item.Name));
                    }
                }
                if (l16_props != null)
                {
                    l16_props = l16_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l16_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        if (item.Type == PropertyMetaInfo.P_UInt16)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteUInt16({0});", item.Name));
                        }
                        else
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteInt16({0});", item.Name));
                        }
                    }
                }
                if (l32_props != null)
                {
                    l32_props = l32_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l32_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        if (item.Type == PropertyMetaInfo.P_UInt32)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteUInt32({0});", item.Name));
                        }
                        else if (item.Type.StartsWith(PropertyMetaInfo.P_Enum))
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteInt32((int){0});", item.Name));
                        }
                        else
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteInt32({0});", item.Name));
                        }
                    }
                }
                if (l64_props != null)
                {
                    l64_props = l64_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l64_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        if (item.Type == PropertyMetaInfo.P_UInt64)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteUInt64({0});", item.Name));
                        }
                        else if (item.Type == PropertyMetaInfo.P_Double)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteDouble({0});", item.Name));
                        }
                        else
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteInt64({0});", item.Name));
                        }
                    }
                }
                if (lstr_props != null)
                {
                    lstr_props = lstr_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in lstr_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        if (item.Type == PropertyMetaInfo.P_Date)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteDate({0});", item.Name));
                        }
                        else
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteString({0});", item.Name));
                        }
                    }
                }
                if (larr_props != null)
                {
                    larr_props = larr_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in larr_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        var arrtype = item.Type.Substring(6);
                        if (arrtype == PropertyMetaInfo.P_Byte)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayByte({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_Date)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayDate({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_Boolean)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayBool({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_Double)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayDouble({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int16)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayInt16({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_UInt16)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayUInt16({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int32)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayInt32({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_UInt32)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayUInt32({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int64)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayInt64({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_UInt64)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayUInt64({0});", item.Name));
                        }
                        else if (arrtype == PropertyMetaInfo.P_String)
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteArrayString({0});", item.Name));
                        }
                        else
                        {
                            file.WriteLine(string.Format("             size +=stream.WriteEventArray({0});", item.Name));
                        }
                    }
                }
                if (ln_props != null)
                {
                    ln_props = ln_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in ln_props)
                    {
                        file.WriteLine(string.Format("             size +=stream.WriteIndex({0});", item.SeralizeIndex.ToString()));
                        file.WriteLine(string.Format("             size +=stream.WriteEventObj({0});", item.Name));
                    }
                }
                file.WriteLine("            BitConverter.TryWriteBytes(span, size);");
                file.WriteLine("            return size;");
                file.WriteLine("        }");

                file.WriteLine("        public void BytesTo(ReadStream stream)");
                file.WriteLine("        {");
                file.WriteLine("            var headers = stream.ReadHeaders();");

                #region L8
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_8, out byte count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (l8_props != null)
                {
                    l8_props = l8_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l8_props)
                    {
                        if (item.Type == PropertyMetaInfo.P_Boolean)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadByte() == 1;continue;");
                            file.WriteLine("}");
                        }
                        else
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadByte();continue;");
                            file.WriteLine("}");
                        }
                    }
                }
                file.WriteLine("                    stream.Advance(1);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion

                #region LDate
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_Date, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (ldate_props != null)
                {
                    ldate_props = ldate_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in ldate_props)
                    {
                        file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                        file.Write("{");
                        file.Write($" {item.Name} = stream.ReadDate();continue;");
                        file.WriteLine("}");
                    }
                }
                file.WriteLine("                    stream.Advance(11);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion
                #region L16
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_16, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (l16_props != null)
                {
                    l16_props = l16_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l16_props)
                    {
                        if (item.Type == PropertyMetaInfo.P_Int16)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadInt16();continue;");
                            file.WriteLine("}");
                        }
                        else
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadUInt16();continue;");
                            file.WriteLine("}");
                        }
                    }
                }
                file.WriteLine("                    stream.Advance(2);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion

                #region L32
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_32, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (l32_props != null)
                {
                    l32_props = l32_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l32_props)
                    {
                        if (item.Type == PropertyMetaInfo.P_Int32)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadInt32();continue;");
                            file.WriteLine("}");
                        }
                        else if (item.Type.StartsWith(PropertyMetaInfo.P_Enum))
                        {
                            var type = item.Type.Substring(5);
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = ({type})stream.ReadInt32();continue;");
                            file.WriteLine("}");
                        }
                        else
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadUInt32();continue;");
                            file.WriteLine("}");
                        }
                    }
                }
                file.WriteLine("                    stream.Advance(4);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion

                #region L_64
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_64, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (l64_props != null)
                {
                    l64_props = l64_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in l64_props)
                    {
                        if (item.Type == PropertyMetaInfo.P_Int64)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadInt64();continue;");
                            file.WriteLine("}");
                        }
                        else if (item.Type == PropertyMetaInfo.P_Double)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadDouble();continue;");
                            file.WriteLine("}");
                        }
                        else if (item.Type == PropertyMetaInfo.P_UInt64)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadUInt64();continue;");
                            file.WriteLine("}");
                        }
                    }
                }
                file.WriteLine("                    stream.Advance(8);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion

                #region L_Str
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_Str, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (lstr_props != null)
                {
                    lstr_props = lstr_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in lstr_props)
                    {
                        if (item.Type == PropertyMetaInfo.P_Date)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadDate();continue;");
                            file.WriteLine("}");
                        }
                        else
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadString();continue;");
                            file.WriteLine("}");
                        }
                    }
                }
                file.WriteLine("                     var c = stream.ReadInt32();stream.Advance(c);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion

                #region L_Array
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_Array, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (larr_props != null)
                {
                    larr_props = larr_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in larr_props)
                    {
                        var arrtype = item.Type.Substring(6);
                        if (arrtype == PropertyMetaInfo.P_Byte)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayByte().ToArray();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Date)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayDate().To;continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Boolean)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayBool();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Double)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayDouble();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int16)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayInt16();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_UInt16)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayUInt16();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int32)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayInt32();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_UInt32)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayUInt32();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int64)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayInt64();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_UInt64)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayUInt64();continue;");
                            file.WriteLine("}");
                        }
                        else if (arrtype == PropertyMetaInfo.P_String)
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArrayString();continue;");
                            file.WriteLine("}");
                        }
                        else
                        {
                            file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                            file.Write("{");
                            file.Write($" {item.Name} = stream.ReadArray<{arrtype}>();continue;");
                            file.WriteLine("}");
                        }
                    }
                }
                file.WriteLine("                    var c = stream.ReadInt32();stream.Advance(c);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion

                #region L_N
                file.WriteLine("            if (headers.TryGetValue(EventPropertyType.L_N, out count))");
                file.WriteLine("            {");
                file.WriteLine("                for (var i = 0; i < count; i++)");
                file.WriteLine("                {");
                file.WriteLine("                    var index = stream.ReadByte();");
                if (ln_props != null)
                {
                    ln_props = ln_props.OrderBy(x => x.SeralizeIndex).ToList();
                    foreach (var item in ln_props)
                    {
                        file.Write($"                    if (index == {item.SeralizeIndex.ToString()})");
                        file.Write("{");
                        file.Write($" {item.Name} = new {item.Type}();");
                        file.Write($" {item.Name}.BytesTo(ref stream);continue;");
                        file.WriteLine("}");
                    }
                }
                file.WriteLine("                    var l = stream.ReadInt32();");
                file.WriteLine("                    stream.Advance(l);");
                file.WriteLine("                }");
                file.WriteLine("            }");
                #endregion
                file.WriteLine("        }");


                file.WriteLine("        public uint BytesSize(Encoding encoding)");
                file.WriteLine("        {");
                var size = 5 + dic.Count * 2 + meta.Properties.Count + (l8_props == null ? 0 : l8_props.Count) + (ldate_props == null ? 0 : ldate_props.Count * 11) + (l16_props == null ? 0 : l16_props.Count * 2) + (l32_props == null ? 0 : l32_props.Count * 4) + (l64_props == null ? 0 : l64_props.Count * 8);
                file.Write($"                var size={size}+");
                if (lstr_props != null)
                {
                    foreach (var s_pty in lstr_props)
                    {
                        if (s_pty.Type == PropertyMetaInfo.P_Date)
                        {
                            file.Write("11+");
                        }
                        else
                        {
                            file.Write($"WriteStream.GetStringSize({s_pty.Name},encoding)+");
                        }
                    }
                }
                if (larr_props != null)
                {
                    foreach (var item in larr_props)
                    {
                        var arrtype = item.Type.Substring(6);
                        if (arrtype == PropertyMetaInfo.P_Byte || arrtype == PropertyMetaInfo.P_Boolean)
                        {
                            file.Write($"WriteStream.GetValueArraySize(1,{item.Name})+");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Date)
                        {
                            file.Write("11+");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Double)
                        {
                            file.Write($"WriteStream.GetValueArraySize(8,{item.Name})+");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int16 || arrtype == PropertyMetaInfo.P_UInt16)
                        {
                            file.Write($"WriteStream.GetValueArraySize(2,{item.Name})+");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int32 || arrtype == PropertyMetaInfo.P_UInt32 || arrtype.StartsWith(PropertyMetaInfo.P_Enum))
                        {
                            file.Write($"WriteStream.GetValueArraySize(4,{item.Name})+");
                        }
                        else if (arrtype == PropertyMetaInfo.P_Int64 || arrtype == PropertyMetaInfo.P_UInt64 || arrtype == PropertyMetaInfo.P_Double)
                        {
                            file.Write($"WriteStream.GetValueArraySize(8,{item.Name})+");
                        }
                        else if (arrtype == PropertyMetaInfo.P_String)
                        {
                            file.Write($"WriteStream.GetArrayStringSize({item.Name},encoding)+");
                        }
                        else
                        {
                            file.Write($"WriteStream.GetArrayEventObjSize({item.Name},encoding)+");
                        }
                    }
                }
                if (ln_props != null)
                {
                    foreach (var item in ln_props)
                    {
                        file.Write($"{item.Name}.BytesSize(encoding)+");
                    }
                }
                file.WriteLine($" 0;");
                file.WriteLine($"                return size;");
                file.WriteLine("        }");


                file.WriteLine("    }");
                file.WriteLine("}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.ToString());
            }
            finally
            {
                file?.Close();
            }
        }
Esempio n. 14
0
        public async Task <ActionResultReponese <string> > UpdateAsync(string id, string idClass, string className, ClassMeta clasMeta)
        {
            var info = await _classRepository.GetInfoAsync(id, idClass);

            if (info == null)
            {
                return(new ActionResultReponese <string>(-5, "IdClass khong ton tai", "ClassSpecializd"));
            }
            var isNameExit = await _classRepository.CheckNameExistsAsync(className);

            if (isNameExit)
            {
                return(new ActionResultReponese <string>(-2, "ClasName da ton tai", "ClassSpecialized"));
            }
            var isSpecialized = await _ispecializedRepository.CheckExistByIdSpecialized(clasMeta.IdSpecialized);

            if (!isSpecialized)
            {
                return(new ActionResultReponese <string>(-3, "IdSpecialized khong ton tai", "Specialized"));
            }
            var isEducation = await _iEducationProgramRepository.CheckExistsAsync(clasMeta.IdEducationProgram);

            if (!isEducation)
            {
                return(new ActionResultReponese <string>(-5, "EducationProgram khong ton tai", "EducationProgram"));
            }
            info.id                 = id;
            info.IdClass            = idClass?.Trim();
            info.ClassName          = className?.Trim();
            info.IdSpecialized      = clasMeta.IdSpecialized?.Trim();
            info.IdEducationProgram = clasMeta.IdEducationProgram?.Trim();
            info.Course             = clasMeta.Course?.Trim();
            info.LastUpdate         = DateTime.Now;
            info.LastUpdate         = null;
            var result = await _classRepository.UpdateAsync(info);

            if (result <= 0)
            {
                return(new ActionResultReponese <string>(result, "UpDateClass false", "ClassSpecialized"));
            }
            return(new ActionResultReponese <string>(result, "UpDateClass thanh cong", "ClassSpecialized"));
        }
Esempio n. 15
0
        public async Task <IActionResult> UpdateAsync(string id, string idClass, string className, ClassMeta clas)
        {
            var result = await _iclassService.UpdateAsync(id, idClass, className, clas);

            return(Ok(result));
        }
Esempio n. 16
0
        public async Task <IActionResult> InsertAsync(string ClassName, string idClass, ClassMeta clas)
        {
            var result = await _iclassService.InsertAsync(ClassName, idClass, clas);

            return(Ok(result));
        }
Esempio n. 17
0
        private async Task PerformAccessibleTalentLearnedTestForTier(int tier)
        {
            string testId         = $"Test_Accessible{tier}TierTalentLearned";
            var    talentsToLearn = new List <string> {
                testId
            };

            // Create test ability meta if it doesn't exist.
            var abilityMeta = await new AbilityMeta(testId).LoadAsync();

            if (abilityMeta == null)
            {
                abilityMeta = new AbilityMeta(testId);
                await abilityMeta.InsertAsync();
            }

            // Create test class meta if it doesn't exist.
            var classMeta = await new ClassMeta(testId).LoadAsync();

            if (classMeta == null)
            {
                classMeta = new ClassMeta(testId);
                classMeta.Abilities.Add(abilityMeta.Id);
                await classMeta.InsertAsync();
            }

            // Create test talent meta if it doesn't exist.
            await CreateTestTalentMetaOfTier(testId, testId, tier);

            // Create test player.
            var player = await Helpers.CreateTestPlayer(testId);

            var character = new Character(testId);

            character.TalentPoints = 1;
            // Create prereq metas for and add talents from previous tiers.
            if (tier > 0)
            {
                for (int i = 1; i < tier; i++)
                {
                    var ic = i;
                    var prereqTalentMetaId = testId + ic;
                    await CreateTestTalentMetaOfTier(prereqTalentMetaId, testId, ic);

                    character.LearnedTalentMetaIds.Add(prereqTalentMetaId);
                }
            }
            else if (tier < 0)
            {
                for (int i = -1; i > tier; i--)
                {
                    var ic = i;
                    var prereqTalentMetaId = testId + ic;
                    await CreateTestTalentMetaOfTier(prereqTalentMetaId, testId, ic);

                    character.LearnedTalentMetaIds.Add(prereqTalentMetaId);
                }
            }
            player.Characters.Add(character);
            await player.ReplaceAsync();

            // Auth player.
            var sessionToken = Helpers.GetSessionToken(testId);

            // Mock data.
            var data = JToken.Parse($@"{{
                'PlayerId':'{testId}',
                'SessionToken':'{sessionToken}',
                'TalentMetaIds':'{JsonConvert.SerializeObject(talentsToLearn)}',
                'CharacterId':'{character.Id}'
            }}");

            // Execute controller.
            var controller    = new LearnTalentsController();
            var responseToken = await controller.HandleHttpRequestAsync(data);

            // Assert controller response status is OK.
            Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]);

            // Make sure talent is learned.
            player = await player.LoadAsync();

            Assert.True(player.GetCharacterById(character.Id).IsTalentLearned(testId));
        }
Esempio n. 18
0
        public async void AvailableItemEquipped()
        {
            var itemMetaId  = "Test_AvailableItemEquipped";
            var itemSlot    = "Test_AvailableItemEquipped";
            var classMetaId = "Test_AvailableItemEquipped";
            var playerId    = "Test_AvailableItemEquipped";

            // Create test class meta if it doesn't exist.
            var classMeta = await new ClassMeta(classMetaId).LoadAsync();

            if (classMeta == null)
            {
                classMeta = new ClassMeta(classMetaId);
                await classMeta.InsertAsync();
            }

            // Create test item meta if it doesn't exist.
            var itemMeta = await new ItemMeta(itemMetaId).LoadAsync();

            if (itemMeta == null)
            {
                itemMeta               = new ItemMeta(itemMetaId);
                itemMeta.ClassMetaId   = classMetaId;
                itemMeta.EquipmentSlot = itemSlot;
                await itemMeta.InsertAsync();
            }

            // Create test player with a character and item.
            var player = await Helpers.CreateTestPlayer(playerId);

            var character = new Character(classMetaId);

            player.Characters.Add(character);
            var item = new Item(itemMetaId);

            player.AddItem(item);
            await player.ReplaceAsync();

            // Auth player.
            var sessionToken = Helpers.GetSessionToken(playerId);

            // Mock data.
            var data = JToken.Parse($@"{{
                'PlayerId':'{playerId}',
                'SessionToken':'{sessionToken}',
                'CharacterId':'{character.Id}',
                'ItemId':'{item.Id}'
            }}");

            // Execute controller.
            var controller    = new EquipItemController();
            var responseToken = await controller.HandleHttpRequestAsync(data);

            // Assert controller response status is OK.
            Assert.Equal(responseToken["Status"], JStatus.Ok.JToken["Status"]);

            // Make sure item is equiped.
            player = await player.LoadAsync();

            Assert.True(player.GetItemById(item.Id).IsOwnedByCharacter);
            Assert.True(player.GetItemById(item.Id).OwningCharacterId == character.Id);
        }
 public ClassTemplate(ClassMeta meta)
 {
     this.meta = meta;
 }
Esempio n. 20
0
        public async void TalentNotLearnedWhenNotEnoughPoints()
        {
            string testId         = $"Test_TalentNotLearnedWhenNotEnoughPoints";
            var    talentsToLearn = new List <string> {
                testId
            };

            // Create test ability meta if it doesn't exist.
            var abilityMeta = await new AbilityMeta(testId).LoadAsync();

            if (abilityMeta == null)
            {
                abilityMeta = new AbilityMeta(testId);
                await abilityMeta.InsertAsync();
            }

            // Create test class meta if it doesn't exist.
            var classMeta = await new ClassMeta(testId).LoadAsync();

            if (classMeta == null)
            {
                classMeta = new ClassMeta(testId);
                classMeta.Abilities.Add(abilityMeta.Id);
                await classMeta.InsertAsync();
            }

            // Create test talent meta if it doesn't exist.
            await CreateTestTalentMetaOfTier(testId, testId, 1);

            // Create test player with zero talent points.
            var player = await Helpers.CreateTestPlayer(testId);

            var character = new Character(testId);

            character.TalentPoints = 0;
            player.Characters.Add(character);
            await player.ReplaceAsync();

            // Auth player.
            var sessionToken = Helpers.GetSessionToken(testId);

            // Mock data.
            var data = JToken.Parse($@"{{
                'PlayerId':'{testId}',
                'SessionToken':'{sessionToken}',
                'TalentMetaIds':'{JsonConvert.SerializeObject(talentsToLearn)}',
                'CharacterId':'{character.Id}'
            }}");

            // Execute controller.
            var controller    = new LearnTalentsController();
            var responseToken = await controller.HandleHttpRequestAsync(data);

            // Assert controller response status is RequirementNotFulfilled.
            Assert.Equal(responseToken["Status"], JStatus.RequirementNotFulfilled.JToken["Status"]);

            // Make sure talent is not learned.
            player = await player.LoadAsync();

            Assert.False(player.GetCharacterById(character.Id).IsTalentLearned(testId));
        }