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(); } }
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 )); }
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); }
private ITemplate FindClassTemplate(ClassMeta classMeta, Language language) { switch (language) { case Language.CSharp: return(new ClassTemplate(classMeta)); default: throw new ArgumentOutOfRangeException(nameof(language), language, null); } }
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)); }
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 )); }
//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() }); } }
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 )); }
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(); }
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)); }
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); }
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(); } }
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")); }
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)); }
public async Task <IActionResult> InsertAsync(string ClassName, string idClass, ClassMeta clas) { var result = await _iclassService.InsertAsync(ClassName, idClass, clas); return(Ok(result)); }
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)); }
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; }
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)); }