public static Entity AddHeader(this Entity entity, string name, string @class, Action <HeaderDesign> options = null) { var headerBag = entity.WithProperties(HeaderDesign.BagName); var headerNames = headerBag.WithCollection(@class); var nameExists = headerNames.Any(x => (x as CaseVariantString)?.Value.EqualsIgnoreCase(name) == true); if (!nameExists) { headerNames.Add((CaseVariantString)name); } var headerEntity = ( from e in entity?.Entities ?? Enumerable.Empty <Entity>() where e.Rel.Has(@class) where name.EqualsIgnoreCase((e.Properties?["Name"] as CaseVariantString)?.Value) select e ).FirstOrDefault(); if (headerEntity == null && options != null) { var title = name.ChangeCase(TextCase.ProperCase); headerEntity = new Entity(); headerEntity.AddClass(Class.Header); headerEntity.AddRel(@class); headerEntity.SetTitle(title); headerEntity.SetProperty("Name", (CaseVariantString)name); headerEntity.SetProperty("Title", title); entity.WithEntities().Add(headerEntity); } options?.Invoke(new HeaderDesign(headerEntity)); return(entity); }
/****/ public static void SetMaxInventoryItemCount(this Entity entity, short count) { entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.InventoryItemMax, count) { IsDirtyable = false }); }
/****/ public static void SetValidInventoryItems(this Entity entity, List <ItemTypeEnum> items) { entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.ValidInventoryItems, items) { IsDirtyable = false }); }
public string SaveTemplate(HttpRequest request) { LoggerHelper.Info("Start"); Entity entity = null; try { Page page = GetPage(request); entity = CreateEntity(request, page); List <PageField> fields = GetEscapeFields(page); foreach (PageField field in fields) { LoggerHelper.Debug(field.FieldName + " is escapetext"); string escapeText = Microsoft.JScript.GlobalObject.unescape(entity.GetProperty(field.FieldName)); entity.SetProperty(field.FieldName, escapeText); } GetCatalogDAO(page).SaveEntity(entity); } catch (Exception e) { LoggerHelper.Error(e); return(ErrorResponse(e)); } finally { LoggerHelper.Info("End"); } return(SuccessResponse(entity)); }
/// <summary> /// Returns the list of connections specified in the Web.config /// /// If user is not part of the app support team an error is returned. /// </summary> /// <param name="request">The request</param> /// <returns>A JSON array</returns> public virtual string GetConnections(HttpRequest request) { IList <Entity> list = new List <Entity>(); LoggerHelper.Info("Start"); try { if (!CheckPermissions()) { return(ErrorResponse("User don't have permissions to use this functionality.")); } foreach (ConnectionStringSettings connSettings in ConfigurationManager.ConnectionStrings) { //LocalSqlServer,LocalMySqlServer,OraAspNetConString default connections in machine.config if ("LocalSqlServer" != connSettings.Name && "LocalMySqlServer" != connSettings.Name && "OraAspNetConString" != connSettings.Name) { Entity entity = new Entity("Connection"); entity.SetProperty("ConnName", connSettings.Name); list.Add(entity); } } } catch (Exception e) { LoggerHelper.Error(e); return(ErrorResponse(e)); } finally { LoggerHelper.Info("End"); } return(ListResponse(list)); }
public void PerformBehaviour(Entity target, Entity instigator) { if (instigator == null) { // angry at nobody. return; } if (!instigator.HasProperty((int)EntityPropertyEnum.RemotePlayer)) { // not angry at a player. return; } List <int> aggroList; if (target.HasProperty((int)GameEntityPropertyEnum.AggroList)) { aggroList = (List <int>)target.GetProperty((int)GameEntityPropertyEnum.AggroList).ObjectValue; } else { aggroList = new List <int>(5); target.SetProperty(new EntityProperty((int)GameEntityPropertyEnum.AggroList, aggroList) { IsDirtyable = false }); } if (!aggroList.Contains(instigator.EntityId)) { aggroList.Add(instigator.EntityId); } }
/// <summary> /// 遍历 JSON 对象的属性,并使用托管属性 API 来设置一般属性的值。 /// </summary> /// <param name="jObject"></param> /// <param name="entity"></param> private static void DeserializeProperties(JObject jObject, Entity entity) { var properties = entity.PropertiesContainer.GetAvailableProperties(); foreach (var mp in properties) { if (mp != Entity.IdProperty) { JToken jValue = null; if (jObject.TryGetValue(mp.Name, StringComparison.OrdinalIgnoreCase, out jValue)) { if (mp is IListProperty) { DeserializeList(entity, mp as IListProperty, jValue as JArray); } //一般属性。 else { var value = (jValue as JValue).Value; entity.SetProperty(mp, value, ManagedPropertyChangedSource.FromUIOperating); } } } } //using (var jsonTextReader = new StringReader(strContent)) //{ // var jsonSerializer = JsonSerializer.Create(this.SerializerSettings); // jsonSerializer.Populate(jsonTextReader, entity); //} }
private Entity GetTemplate(HttpRequest request) { string templateName = request.Params["templateName"]; string templateType = request.Params["templateType"]; IPageInfoDAO pageDAO = (IPageInfoDAO)FactoryUtils.GetDAO(ConfigurationManager.AppSettings["IPageInfoDAO"]); EPE.Common.Entities.Page.Page pageLetter = pageDAO.GetPageConfig("", "Templates"); Entity entityLetter = EntityUtils.CreateEntity(pageLetter); entityLetter.SetProperty("TemplateName", templateName); entityLetter.SetProperty("TemplateTypeText", templateType); IList <Entity> templates = DAOFactory.Instance.GetCatalogDAO().FindEntities(entityLetter, FilterInfo.SearchType.AND); return(templates[0]); }
public static void SetVisibleRating(this Entity entity, float value) { value = Math.Max(Math.Min(1, value), 0); entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.VisibleRating, value) { IsDirtyable = false }); }
private void TrySetProperty(Entity e, string pName, JToken value) { //有些小写的客户端数据被传输到了服务端,需要被过滤掉。 if (char.IsLower(pName[0])) { return; } var pm = _entityMeta.Property(pName) as PropertyMeta ?? _entityMeta.ChildrenProperty(pName); if (pm != null) { var mp = pm.ManagedProperty; if (mp is IListProperty) { //todo: 此处的性能可能需要优化,聚合保存子列表时,重复的查询 Repository var entityType = EntityMatrix.FindByList(pm.PropertyType).EntityType; var repo = RF.Find(entityType); //列表属性的设置不能使用 SetProperty,否则,list.Parent 将会无值。 //但是也不能直接使用 LoadProperty,否则会导致调用 list.MarkOld,从而不会保存这个列表。 //所以只能先装载一个空列表,然后再把 json 中的数据转换为实体加入到这个列表中。 var list = repo.NewList(); e.LoadProperty(mp, list); ListReader.JsonToEntity(value as JObject, repo, list); } else { var rawValue = (value as JValue).Value; rawValue = EntityJsonConverter.ToServerValue(pm.PropertyType, rawValue); e.SetProperty(mp, rawValue, ManagedPropertyChangedSource.FromUIOperating); } } else { var rawValue = (value as JValue).Value; //如果没有找到一般的属性,则尝试查找外键属性 for (int i = 0, c = _refIdProperties.Count; i < c; i++) { var rip = _refIdProperties[i]; if (rip.Name == pName) { e.SetRefId(rip, rawValue); break; } } //只读属性。 //if(notFound) //{ // throw new InvalidOperationException("没有在实体中找到这个属性:" + pName); //} } }
private bool ValidateUser(string userName, string passWord) { EPE.Common.Entities.Page.Page usersPage = DAOFactory.Instance.GetPageInfoDAO().GetPageConfig("", "Users"); Entity entity = EntityUtils.CreateEntity(usersPage); entity.SetProperty("USE_Login", userName); entity.SetProperty("USE_Password", passWord); IList <Entity> list = DAOFactory.Instance.GetCatalogDAO().FindEntities(entity, FilterInfo.SearchType.AND); if (list.Count == 1) { Session["CurrentUser"] = list[0]; Session["CurrentUserLogin"] = userName; return(true); } return(false); }
public static void IncreaseWeaponUseCount(this Entity entity) { if (!entity.HasProperty(GameEntityPropertyEnum.WeaponUseCount)) { entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.WeaponUseCount, 1)); } else { entity.GetProperty(GameEntityPropertyEnum.WeaponUseCount).ByteValue += 1; } }
private void SetNextMoan(Entity target, double now) { var nextMoan = now + (StaticRng.Random.NextDouble() * RandomDelayMultiplier) + BaseDelay; target.SetProperty( new EntityProperty((short)GameEntityPropertyEnum.NextZombieMoan, nextMoan) { IsDirtyable = false } ); }
/****/ public static long GetMinNoiseChaseTime(this Entity entity) { if (!entity.HasProperty(GameEntityPropertyEnum.ChaseNoiseMinTime)) { var minChaseTime = entity.GetChaseMinTime(); entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.ChaseNoiseMinTime, minChaseTime)); } var prop = entity.GetProperty(GameEntityPropertyEnum.ChaseNoiseMinTime); return(prop.LongValue); }
public static void SetInventoryItem(this Entity entity, InventoryItem item, ItemSpec itemSpec = null) { StaticFloatingItemCache.Instance.RegisterItem(item, entity); if (itemSpec == null) { itemSpec = item.GetItemSpec(); } entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.ItemSpecId, itemSpec.Id)); entity.SetNameplate(itemSpec.GetName()); entity.SetModel(itemSpec.GetModelName()); entity.SetNameplateColour(Colours.Yellow); }
/// <summary> /// 遍历 JSON 对象的属性,并使用托管属性 API 来设置一般属性的值。 /// </summary> /// <param name="jObject"></param> /// <param name="entity"></param> private void DeserializeProperties(JObject jObject, Entity entity) { var properties = entity.PropertiesContainer.GetAvailableProperties(); foreach (var propertyValue in jObject) { var propertyName = propertyValue.Key; var jValue = propertyValue.Value; var mp = properties.Find(propertyName, true); if (mp != null) { if (mp != Entity.IdProperty) { if (mp is IListProperty) { DeserializeList(entity, mp as IListProperty, jValue as JArray); } //一般属性。 else { var value = (jValue as JValue).Value; if (value is string && mp.PropertyType == typeof(byte[])) { value = Encoding.UTF8.GetBytes(value as string); } entity.SetProperty(mp, value, ManagedPropertyChangedSource.FromUIOperating); } } } else { //如果指定了状态,则主动设置该实体的状态。 if (propertyName.EqualsIgnoreCase(PersistenceStatusProperty)) { var value = (jValue as JValue).Value; var status = (PersistenceStatus)Enum.Parse(typeof(PersistenceStatus), value.ToString(), true); entity.PersistenceStatus = status; } } } //using (var jsonTextReader = new StringReader(strContent)) //{ // var jsonSerializer = JsonSerializer.Create(this.SerializerSettings); // jsonSerializer.Populate(jsonTextReader, entity); //} }
public static void RemoveInventory(this Entity entity) { if (!entity.HasInventory()) { return; } var inv = entity.GetInventory(); entity.SetInventoryId(StaticInventoryCache.Instance.UnknownId); entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.EntityRegisteredWithInventory, false) { IsPersistant = false, IsDirtyable = false, IsDirty = false }); StaticInventoryCache.Instance.RemoveInventory(inv.Id); }
public void PerformBehaviour(Entity target, Entity instigator) { if (!target.HasInventory()) { return; } var inventory = target.GetInventory(); var item = inventory[_slotId]; var itemSpecId = StaticItemSpecCache.Instance.EmptySpecId; if (item != null) { itemSpecId = item.ItemSpecId; } target.SetProperty(new EntityProperty((short)_entityProperty, itemSpecId)); }
public static void SetInventory(this Entity entity, Inventory value) { Debug.Assert(!entity.HasRegisteredWithInventory(), "Entity already has inventory"); entity.SetProperty(new EntityProperty((short)GameEntityPropertyEnum.EntityRegisteredWithInventory, true) { IsPersistant = false, IsDirtyable = false, IsDirty = false }); entity.SetInventoryId(value.Id); value.OnSlotChanged += (inv, slotIndex) => { entity.PerformBehaviour((short)GameEntityBehaviourEnum.OnInventoryChange, null); }; value.OnSlotChanged += (inv, slotIndex) => { if (slotIndex == (byte)InventorySpecialSlotEnum.PrimaryWeapon) { entity.PerformBehaviour((short)GameEntityBehaviourEnum.OnPrimaryWeaponChange, null); } }; value.OnSlotChanged += (inv, slotIndex) => { if (slotIndex == (byte)InventorySpecialSlotEnum.SecondaryWeapon) { entity.PerformBehaviour((short)GameEntityBehaviourEnum.OnSecondaryWeaponChange, null); } }; value.OnSlotChanged += (inv, slotIndex) => { if (slotIndex == (byte)InventorySpecialSlotEnum.HeadArmour) { entity.PerformBehaviour((short)GameEntityBehaviourEnum.OnHeadSlotChange, null); } }; }
/// <summary> /// 有必要的话,就修改Name /// </summary> /// <param name="newObject"></param> private void TryModifyName(Entity newObject, bool modifyName) { if (modifyName) { if (newObject is IHasHame) { var no = newObject as IHasHame; no.Name += "-新增"; } else { var mp = newObject.PropertiesContainer.GetAvailableProperties().Find("Name"); if (mp != null && !mp.IsReadOnly) { string name = newObject.GetProperty(mp).ToString(); newObject.SetProperty(mp, name + "-新增"); } } } }
/// <summary> /// Saves the specified entity in a Oracle database. /// </summary> /// <param name="entity">The entity to be saved</param> public virtual void SaveEntity(Entity entity) { LoggerHelper.Info("Start"); try { StringBuilder query; if (string.IsNullOrEmpty(entity.GetEntityId())) // New entity Insert { query = GetQueryBuilder().BuildInsertQuery(entity); LoggerHelper.Debug(query.ToString()); Int32 newId = GetQueryRunner().ExecuteScalar(GetConnection(), query); entity.SetProperty(entity.GetFieldId().Name, newId.ToString()); } else //update { if (entity.GetFieldId() == null) { LoggerHelper.Error("Entity does not have an Id field defined."); } query = GetQueryBuilder().BuildUpdateQuery(entity); LoggerHelper.Debug(query.ToString()); GetQueryRunner().ExecuteNonQuery(GetConnection(), query); } } catch (Exception e) { if (e.Message.Contains("UNIQUE KEY")) { throw new Exception(entity.GetTableName() + " already exists."); } else { throw new Exception("Unable to save " + entity.GetTableName() + ".", e); } } finally { LoggerHelper.Info("End"); } }
/// <summary> /// 多选模式下的写值操作 /// </summary> /// <param name="curEntity">正在编辑的实体。</param> /// <param name="svm">选择视图模型</param> /// <param name="selectedEntities">当前被选择的实体</param> private SetSelectionResult SyncSelectionToValue_Multiple(Entity curEntity, SelectionViewMeta rvm, IList <Entity> selectedEntities) { var result = string.Join(rvm.SplitterIfMulti, selectedEntities.Select(i => this.GetSelectedValue(i))); //赋值给this.PropertyValue this.PropertyValue = result; SetSelectionResult res = (this.PropertyValue as string) == result ? SetSelectionResult.Success : SetSelectionResult.Cancel; if (res == SetSelectionResult.Success) { //此时这个属性应该是一个 int 数组类型 if (rvm.RefIdHost != null) { var idArray = selectedEntities.Select(i => i.Id).ToArray(); curEntity.SetProperty(rvm.RefIdHost, idArray, ManagedPropertyChangedSource.FromUIOperating); } } return(res); }
private Entity GetUser(string userLogin) { if (string.IsNullOrEmpty(userLogin)) { return(null); } if (Session["CurrentUser"] == null) { EPE.Common.Entities.Page.Page usersPage = DAOFactory.Instance.GetPageInfoDAO().GetPageConfig("", "Users"); Entity entity = EntityUtils.CreateEntity(usersPage); entity.SetProperty("USE_Login", userLogin); IList <Entity> list = DAOFactory.Instance.GetCatalogDAO().FindEntities(entity); if (list.Count == 1) { Session["CurrentUser"] = list[0]; Entity user = (Entity)Session["CurrentUser"]; Session["CurrentUserName"] = user.GetProperty("USE_Name"); } } return((Entity)Session["CurrentUser"]); }
/// <summary> /// 设置某个实体的审核状态。 /// </summary> /// <param name="me">Me.</param> /// <param name="value">The value.</param> public static void SetTenantId(this Entity me, long value) { var mp = me.PropertiesContainer.GetCompiledProperties().Find(TenantIdProperty); me.SetProperty(mp, value); }
/// <summary> /// Modifies the EntityTuple.ReducedEntity by replacing related entities with their corresponding clones from the reduced entity set /// </summary> /// <param name="entityTuple"></param> /// <param name="flatTransmissionSet"></param> protected virtual void FixupRelations(EntityTuple <Entity> entityTuple, IEnumerable <EntityTuple <Entity> > flatTransmissionSet) { Entity entity = entityTuple.Entity; Entity reducedEntity = entityTuple.ReducedEntity; switch (reducedEntity.ChangeTracker.State) { case ObjectState.Added: { // copy navigation properties var navigationProperties = entity.PropertyInfos .Where(p => p.IsPhysical && p.Attributes.Any(attribute => attribute is NavigationPropertyAttribute)) .Select(p => p.PropertyInfo); foreach (var navigationProperty in navigationProperties) { var referencedInstance = navigationProperty.GetValue(entity, null); var referencedEntityCollection = referencedInstance as ITrackableCollection; if (!ReferenceEquals(null, referencedEntityCollection)) { if (referencedEntityCollection.Count > 0) { var collection = navigationProperty.GetValue(reducedEntity, null) as ITrackableCollection; foreach (Entity referencedEntity in referencedEntityCollection) { // lookup reduced version of current value (entity) Entity changeSetEntity; var entry = flatTransmissionSet.FirstOrDefault(e => e.Entity.Equals(referencedEntity)); if (entry != null) { changeSetEntity = entry.ReducedEntity; } else { // in case of directed relation (i.e. only one entity has a relation to the other and the other entity has not relation back) // the related entity might not yet be in the change set and has to be specifically created changeSetEntity = ReduceToModifications(referencedEntity); } collection.Add(changeSetEntity); } } } else if (referencedInstance is Entity) { // lookup reduced version of current value (entity) var entry = flatTransmissionSet.FirstOrDefault(e => e.Entity.Equals(referencedInstance)); if (entry != null) { navigationProperty.SetValue(reducedEntity, entry.ReducedEntity, null); } } } } break; case ObjectState.Unchanged: if (entity.HasChanges) { // there are changes in relations goto case ObjectState.Modified; } break; case ObjectState.Modified: case ObjectState.Deleted: { // copy changed navigation properties (relations and foreign keys) // single relation var physicalProperties = entity.PropertyInfos.Where(p => p.IsPhysical && p.Attributes.Any(attribute => attribute is NavigationPropertyAttribute)).ToDictionary(p => p.Name); foreach (var property in entity.ChangeTracker.OriginalValues.Where(p => physicalProperties.ContainsKey(p.Key))) { if (!reducedEntity.ChangeTracker.OriginalValues.ContainsKey(property.Key)) { // lookup reduced version of current value (entity) Entity currentChangeSetEntity = null; { // get current value (entity) var currentEntity = (Entity)entity.GetProperty(property.Key, true); if (currentEntity != null) { var entry = flatTransmissionSet.FirstOrDefault(e => e.Entity.Equals(currentEntity)); if (entry != null) { currentChangeSetEntity = entry.ReducedEntity; } else { // in case of directed relation (i.e. only one entity has a relation to the other and the other entity has not relation back) // the related entity might not yet be in the change set and has to be specifically created currentChangeSetEntity = ReduceToModifications(currentEntity); } } } Entity originalChangeSetEntity = null; { // get current value (entity) var currentEntity = (Entity)entity.ChangeTracker.OriginalValues[property.Key]; if (currentEntity != null) { var entry = flatTransmissionSet.FirstOrDefault(e => e.Entity.Equals(currentEntity)); if (entry != null) { originalChangeSetEntity = entry.ReducedEntity; } else { // in case of directed relation (i.e. only one entity has a relation to the other and the other entity has not relation back) // the related entity might not yet be in the change set and has to be specifically created originalChangeSetEntity = ReduceToModifications(currentEntity); } } } reducedEntity.SetProperty(property.Key, currentChangeSetEntity, true); reducedEntity.ChangeTracker.OriginalValues[property.Key] = originalChangeSetEntity; } } // relation added to collection foreach (var relation in entity.ChangeTracker.ObjectsAddedToCollectionProperties) { var navigationProperty = reducedEntity.GetType().GetProperty(relation.Key).GetValue(reducedEntity, null) as ITrackableCollection; var objectList = new EntityList(); foreach (var referencedEntity in relation.Value) { // lookup reduced version of current value (entity) Entity changeSetEntity; var entry = flatTransmissionSet.FirstOrDefault(e => e.Entity.Equals(referencedEntity)); if (entry != null) { changeSetEntity = entry.ReducedEntity; } else { // in case of directed relation (i.e. only one entity has a relation to the other and the other entity has not relation back) // the related entity might not yet be in the change set and has to be specifically created changeSetEntity = ReduceToModifications(referencedEntity); } if (changeSetEntity != null && !navigationProperty.Contains(changeSetEntity)) { navigationProperty.Add(changeSetEntity); objectList.Add(changeSetEntity); } } if (reducedEntity.ChangeTracker.ObjectsAddedToCollectionProperties.ContainsKey(relation.Key)) { continue; } reducedEntity.ChangeTracker.ObjectsAddedToCollectionProperties.Add(relation.Key, objectList); } // relation removed from collection foreach (var relation in entity.ChangeTracker.ObjectsRemovedFromCollectionProperties) { var objectList = new EntityList(); foreach (var referencedEntity in relation.Value) { // lookup reduced version of current value (entity) Entity changeSetEntity; var entry = flatTransmissionSet.FirstOrDefault(e => e.Entity.Equals(referencedEntity)); if (entry != null) { changeSetEntity = entry.ReducedEntity; } else { // in case of directed relation (i.e. only one entity has a relation to the other and the other entity has no relation back) // the related entity might not yet be in the change set and has to be specifically created changeSetEntity = ReduceToModifications(referencedEntity); } if (changeSetEntity != null) { objectList.Add(changeSetEntity); } } reducedEntity.ChangeTracker.ObjectsRemovedFromCollectionProperties.Add(relation.Key, objectList); } } break; default: throw new InvalidOperationException(); } }
/// <summary> /// 遍历 JSON 对象的属性,并使用托管属性 API 来设置一般属性的值。 /// </summary> /// <param name="jObject"></param> /// <param name="entity"></param> private void DeserializeProperties(JObject jObject, Entity entity) { var properties = entity.PropertiesContainer.GetAvailableProperties(); foreach (var propertyValue in jObject) { var propertyName = propertyValue.Key; var jValue = propertyValue.Value; var mp = properties.Find(propertyName, true); if (mp != null) { //id 属性需要提前处理,而不需要在这里直接反序列化。 if (mp == Entity.IdProperty) continue; if (mp is IListProperty) { DeserializeList(entity, mp as IListProperty, jValue as JArray); } else if (mp is IRefEntityProperty) { //一般引用属性不支持反序列化。 } //一般属性。 else { object value = null; //对于数组的泛型列表类型,需要进行特殊的处理。 if (jValue is JArray) { var jArray = jValue as JArray; var propertyType = mp.PropertyType; if (propertyType.IsArray) { var elementType = propertyType.GetElementType(); var array = Array.CreateInstance(elementType, jArray.Count); for (int i = 0, c = jArray.Count; i < c; i++) { var itemTyped = TypeHelper.CoerceValue(elementType, jArray[i]); array.SetValue(itemTyped, i); } value = array; } else if (TypeHelper.IsGenericType(propertyType, typeof(List<>)))//List<string> { var elementType = propertyType.GetGenericArguments()[0]; var list = Activator.CreateInstance(propertyType) as IList; for (int i = 0, c = jArray.Count; i < c; i++) { var itemTyped = TypeHelper.CoerceValue(elementType, jArray[i]); list.Add(itemTyped); } value = list; } else { //如果不是数组类型或者泛型列表类型的属性,则不支持反序列化。 //do nothing; } } else { value = (jValue as JValue).Value; if (value is string && mp.PropertyType == typeof(byte[])) { value = Convert.FromBase64String(value as string); } } entity.SetProperty(mp, value, ManagedPropertyChangedSource.FromUIOperating); } } else { //如果指定了状态,则主动设置该实体的状态。 if (propertyName.EqualsIgnoreCase(PersistenceStatusProperty)) { var value = (jValue as JValue).Value; var status = (PersistenceStatus)Enum.Parse(typeof(PersistenceStatus), value.ToString(), true); entity.PersistenceStatus = status; } } } //可以使用 Json.NET 来遍历给实体属性赋值。 //using (var jsonTextReader = new StringReader(strContent)) //{ // var jsonSerializer = JsonSerializer.Create(this.SerializerSettings); // jsonSerializer.Populate(jsonTextReader, entity); //} }
private static void CalculateCollectValue(Entity entity, IManagedProperty property, ManagedPropertyChangedEventArgs args) { var distance = Convert.ToDouble(args.NewValue) - Convert.ToDouble(args.OldValue); var oldValue = Convert.ToDouble(entity.GetProperty(property)); entity.SetProperty(property, oldValue + distance); }
protected virtual void UpdateLookupTextProperty(object value) { var selectedItemText = lookupItems.SingleOrDefault(t => t.Value.Equals(value)).Text; Entity.SetProperty(TextPropertyName, selectedItemText); }
/// <summary> /// 多选模式下的写值操作 /// </summary> /// <param name="curEntity">正在编辑的实体。</param> /// <param name="svm">选择视图模型</param> /// <param name="selectedEntities">当前被选择的实体</param> private SetSelectionResult SyncSelectionToValue_Multiple(Entity curEntity, SelectionViewMeta rvm, IList<Entity> selectedEntities) { var result = string.Join(rvm.SplitterIfMulti, selectedEntities.Select(i => this.GetSelectedValue(i))); //赋值给this.PropertyValue this.PropertyValue = result; SetSelectionResult res = (this.PropertyValue as string) == result ? SetSelectionResult.Success : SetSelectionResult.Cancel; if (res == SetSelectionResult.Success) { //此时这个属性应该是一个 int 数组类型 if (rvm.RefIdHost != null) { var idArray = selectedEntities.Select(i => i.Id).ToArray(); curEntity.SetProperty(rvm.RefIdHost, idArray, ManagedPropertyChangedSource.FromUIOperating); } } return res; }
public void GiveExperienceToPlayer(RemotePlayer remotePlayer, Entity playerEntity, int amount) { if (!playerEntity.HasProperty((int)GameEntityPropertyEnum.Experience)) { return; } var experience = playerEntity.GetProperty((int)GameEntityPropertyEnum.Experience).IntValue; var level = playerEntity.GetProperty((int)GameEntityPropertyEnum.Level).IntValue; var levelExperience = playerEntity.GetProperty((int)GameEntityPropertyEnum.LevelExperience).IntValue; var currentLevel = level; var currentExperience = experience; var currentLevelExperience = levelExperience; var experienceToDistribute = amount; while (experienceToDistribute > 0) { var toNextLevel = currentLevelExperience - currentExperience; if (experienceToDistribute >= toNextLevel) { experienceToDistribute -= toNextLevel; currentLevel++; currentLevelExperience = _levelExperienceCalculator.GetLevelExperienceRequirement(level); currentExperience = 0; } else { currentExperience += experienceToDistribute; experienceToDistribute = 0; } } if (experience != currentExperience) { playerEntity.SetProperty(new EntityProperty((int)GameEntityPropertyEnum.Experience, currentExperience)); } if (levelExperience != currentLevelExperience) { playerEntity.SetProperty(new EntityProperty((int)GameEntityPropertyEnum.LevelExperience, currentLevelExperience)); } if (level != currentLevel) { playerEntity.SetProperty(new EntityProperty((int)GameEntityPropertyEnum.Level, currentLevel)); } var xpMessage = new ServerPlayerXPIncrease { Amount = amount }; _gameServer.Engine.SendMessageToClient(xpMessage, remotePlayer); if (currentLevel != level) { PlayerLevelUp(remotePlayer, currentLevel); } }
/// <summary> /// 遍历 JSON 对象的属性,并使用托管属性 API 来设置一般属性的值。 /// </summary> /// <param name="jObject"></param> /// <param name="entity"></param> private void DeserializeProperties(JObject jObject, Entity entity) { var properties = entity.PropertiesContainer.GetAvailableProperties(); foreach (var propertyValue in jObject) { var propertyName = propertyValue.Key; var jValue = propertyValue.Value; var mp = properties.Find(propertyName, true); if (mp != null) { //只读属性不需要反序列化。 if (mp.IsReadOnly) { continue; } //幽灵属性也不需要处理。 if (mp == EntityConvention.Property_IsPhantom) { continue; } if (mp is IListProperty) { DeserializeList(entity, mp as IListProperty, jValue as JArray); } else if (mp is IRefEntityProperty) { //一般引用属性不支持反序列化。 } //一般属性。 else { object value = null; if (jValue is JArray) { #region 对于数组的泛型列表类型,需要进行特殊的处理。 var jArray = jValue as JArray; var propertyType = mp.PropertyType; if (propertyType.IsArray)//string[] { var elementType = propertyType.GetElementType(); var array = Array.CreateInstance(elementType, jArray.Count); for (int i = 0, c = jArray.Count; i < c; i++) { var itemTyped = TypeHelper.CoerceValue(elementType, jArray[i]); array.SetValue(itemTyped, i); } value = array; } else if (TypeHelper.IsGenericType(propertyType, typeof(List <>)))//List<string> { var elementType = propertyType.GetGenericArguments()[0]; var list = Activator.CreateInstance(propertyType) as IList; for (int i = 0, c = jArray.Count; i < c; i++) { var itemTyped = TypeHelper.CoerceValue(elementType, jArray[i]); list.Add(itemTyped); } value = list; } else { //如果不是数组类型或者泛型列表类型的属性,则不支持反序列化。 //do nothing; } #endregion } else { value = (jValue as JValue).Value; if (value is string) { var propertyType = mp.PropertyType; if (propertyType == typeof(byte[])) { value = Convert.FromBase64String(value as string); } else { //兼容处理枚举的 Label 值。 var innerType = TypeHelper.IgnoreNullable(propertyType); if (innerType.IsEnum) { value = EnumViewModel.LabelToEnum(value.ToString(), innerType); } } } } entity.SetProperty(mp, value, ManagedPropertyChangedSource.FromUIOperating); } } else { #region 处理:PersistenceStatus、TreeChildren //PersistenceStatus:如果指定了状态,则主动设置该实体的状态。 if (propertyName.EqualsIgnoreCase(PersistenceStatusProperty)) { var value = (jValue as JValue).Value; var status = (PersistenceStatus)Enum.Parse(typeof(PersistenceStatus), value.ToString(), true); entity.PersistenceStatus = status; } //TreeChildren:如果指定了树子节点列表,则也需要加载进来。 else if (propertyName.EqualsIgnoreCase(AggtSerializer.TreeChildrenProperty)) { var jArray = jValue as JArray; if (jArray != null) { var treeChildren = entity.TreeChildren; for (int i = 0, c = jArray.Count; i < c; i++) { var child = this.DeserializeEntity(entity.GetType(), jArray[i] as JObject); treeChildren.LoadAdd(child); } treeChildren.MarkLoaded(); } } #endregion } } //可以使用 Json.NET 来遍历给实体属性赋值。 //using (var jsonTextReader = new StringReader(strContent)) //{ // var jsonSerializer = JsonSerializer.Create(this.SerializerSettings); // jsonSerializer.Populate(jsonTextReader, entity); //} }
/// <summary> /// 单选模式下的写值操作 /// </summary> /// <param name="curEntity">正在编辑的实体。</param> /// <param name="svm">选择视图模型</param> /// <param name="selectedEntities">当前被选择的实体</param> private SetSelectionResult SyncSelectionToValue_Single(Entity curEntity, SelectionViewMeta svm, IList<Entity> selectedEntities) { bool success = false; //引用属性,应该先尝试设置实体属性,再设置 Id 属性。 var rp = this.Meta.PropertyMeta.ManagedProperty as IRefProperty; if (selectedEntities.Count > 0) { var selectedEntity = selectedEntities[0] as Entity; if (rp != null) { //如果 SelectedValuePath 是一个引用属性,或者直接就是一个实体属性, //则应该获取相应的实体的值。 var valuePath = svm.SelectedValuePath; if (valuePath != null) { if (valuePath is IRefProperty) { selectedEntity = selectedEntity.GetRefEntity((valuePath as IRefProperty).RefEntityProperty); } else if (rp.RefEntityType.IsAssignableFrom(valuePath.PropertyType)) { selectedEntity = this.GetSelectedValue(selectedEntity) as Entity; } } //设置实体到本引用属性上。 this.OnReferenceEntityChanging(); curEntity.SetRefEntity(rp.RefEntityProperty, selectedEntity, ManagedPropertyChangedSource.FromUIOperating); success = curEntity.GetRefEntity(rp.RefEntityProperty) == selectedEntity; if (success) { this.OnReferenceEntityChanged(); } } else { var value = this.GetSelectedValue(selectedEntity); this.PropertyValue = value; success = this.PropertyValue == value; if (success && svm.RefIdHost != null) { curEntity.SetProperty(svm.RefIdHost, selectedEntity.Id, ManagedPropertyChangedSource.FromUIOperating); } } } else { if (rp != null) { this.OnReferenceEntityChanging(); curEntity.SetRefEntity(rp.RefEntityProperty, null, ManagedPropertyChangedSource.FromUIOperating); success = curEntity.GetRefEntity(rp.RefEntityProperty) == null; if (success) { this.OnReferenceEntityChanged(); } } else { this.PropertyValue = null; success = this.PropertyValue == null; if (success && svm.RefIdHost != null) { curEntity.SetProperty(svm.RefIdHost, null, ManagedPropertyChangedSource.FromUIOperating); } } } return success ? SetSelectionResult.Success : SetSelectionResult.Cancel; }
/// <summary> /// Joins a existing list of entities with all the foreign tables defined /// in the Entity type /// </summary> /// <param name="entities">The list of entities</param> /// <param name="entity">The entity type</param> protected virtual void MergeData(List <Entity> entities, Entity entity) { List <Field> fields = entity.GetFields().FindAll(f => f.ForeignKey != null); foreach (Field field in fields) { ForeignKeyInfo fk = field.ForeignKey; string json = LoadFile(fk.TableName + ".txt"); if (string.IsNullOrEmpty(json)) { continue; } IList <Entity> list = DeserializeEntityList(json); //TODO: implement RIGTH join for (int i = entities.Count - 1; i >= 0; i--) { Entity ent = entities[i]; string joinfield = fk.JoinField.Replace("[", "").Replace("]", "").Trim(); Entity result = ((List <Entity>)list).Find(item => item.GetProperty(joinfield).Equals(ent.GetProperty(field.Name))); if (result == null && fk.Type == Field.FKType.Left) //LEFT { foreach (string jf in fk.JoinFields) { string name = jf; string value = ""; if (jf.IndexOf(" AS ") != -1) { string[] fieldAs = jf.Split(new string[] { " AS " }, StringSplitOptions.None); if (fieldAs.Length == 2) { name = fieldAs[1]; } } ent.SetProperty(name, value); } } else if (result == null && fk.Type == Field.FKType.Inner) //INNER { entities.RemoveAt(i); } else { foreach (string jf in fk.JoinFields) { string name = jf; string value = result.GetProperty(jf); if (jf.IndexOf(" AS ") != -1) { string[] fieldAs = jf.Split(new string[] { " AS " }, StringSplitOptions.None); if (fieldAs.Length == 2) { name = fieldAs[1]; value = result.GetProperty(fieldAs[0]); } } ent.SetProperty(name, value); } } } } }
/// <summary> /// 单选模式下的写值操作 /// </summary> /// <param name="curEntity">正在编辑的实体。</param> /// <param name="svm">选择视图模型</param> /// <param name="selectedEntities">当前被选择的实体</param> private SetSelectionResult SyncSelectionToValue_Single(Entity curEntity, SelectionViewMeta svm, IList <Entity> selectedEntities) { bool success = false; //引用属性,应该先尝试设置实体属性,再设置 Id 属性。 var rp = this.Meta.PropertyMeta.ManagedProperty as IRefProperty; if (selectedEntities.Count > 0) { var selectedEntity = selectedEntities[0] as Entity; if (rp != null) { //如果 SelectedValuePath 是一个引用属性,或者直接就是一个实体属性, //则应该获取相应的实体的值。 var valuePath = svm.SelectedValuePath; if (valuePath != null) { if (valuePath is IRefProperty) { selectedEntity = selectedEntity.GetRefEntity((valuePath as IRefProperty).RefEntityProperty); } else if (rp.RefEntityType.IsAssignableFrom(valuePath.PropertyType)) { selectedEntity = this.GetSelectedValue(selectedEntity) as Entity; } } //设置实体到本引用属性上。 this.OnReferenceEntityChanging(); curEntity.SetRefEntity(rp.RefEntityProperty, selectedEntity, ManagedPropertyChangedSource.FromUIOperating); success = curEntity.GetRefEntity(rp.RefEntityProperty) == selectedEntity; if (success) { this.OnReferenceEntityChanged(); } } else { var value = this.GetSelectedValue(selectedEntity); this.PropertyValue = value; success = this.PropertyValue == value; if (success && svm.RefIdHost != null) { curEntity.SetProperty(svm.RefIdHost, selectedEntity.Id, ManagedPropertyChangedSource.FromUIOperating); } } } else { if (rp != null) { this.OnReferenceEntityChanging(); curEntity.SetRefEntity(rp.RefEntityProperty, null, ManagedPropertyChangedSource.FromUIOperating); success = curEntity.GetRefEntity(rp.RefEntityProperty) == null; if (success) { this.OnReferenceEntityChanged(); } } else { this.PropertyValue = null; success = this.PropertyValue == null; if (success && svm.RefIdHost != null) { curEntity.SetProperty(svm.RefIdHost, null, ManagedPropertyChangedSource.FromUIOperating); } } } return(success ? SetSelectionResult.Success : SetSelectionResult.Cancel); }