public object Desirialize(int offset, DynamicBuffer buffer, Dictionary <int, object> referenceMaping) { short position = (short)offset == 0 ? (short)0 : BitConverter.ToInt16(buffer.CurrentBuffer, offset); if (position == -1) { return(null); } object entity; if (referenceMaping.TryGetValue(position, out entity)) { return(entity); } else { entity = FormatterServices.GetSafeUninitializedObject(typeInfo.Type); } referenceMaping.Add(position, entity); ObjectFlag flag = (ObjectFlag)buffer.CurrentBuffer[offset]; position++; foreach (var member in typeInfo.Fields) { var memberTypeInfo = TypeInfo.instanse(member.FieldType); object innerObject = memberTypeInfo.Resolver.Desirialize(position, buffer, referenceMaping); entity = typeInfo.SetValue(entity, innerObject, member); position += (short)memberTypeInfo.SizeInBuffer; } return(entity); }
private static void RemoveOldest(Dictionary <string, CacheMemento> cache, ObjectFlag flag) { DateTime oldestEntry = cache.Values.Select(t => t.Added).Min(); string oldestId = cache.Where(kvp => kvp.Value.Added == oldestEntry).Select(kvp => kvp.Key).First(); cache.Remove(oldestId); }
private static void ClearPreviousTransients(this HttpSessionStateBase session, INakedObject nakedObject, ObjectFlag flag) { if (nakedObject.Oid.HasPrevious) { if (nakedObject.Oid.Previous.IsTransient) { session.GetCache(flag).Remove(FrameworkHelper.GetObjectId(nakedObject.Oid.Previous)); } } }
public static void ClearCachedObjects(this HttpSessionStateBase session, ObjectFlag flag = ObjectFlag.None) { Dictionary <string, CacheMemento> cache = session.GetCache(flag); List <string> toRemove = cache.Select(kvp => kvp.Key).ToList(); toRemove.ForEach(k => cache.Remove(k)); }
public static void AddOrUpdateInCache(this HttpSessionStateBase session, INakedObject nakedObject, string url, ObjectFlag flag = ObjectFlag.None) { // only add transients if we are storing transients in the session if ((!nakedObject.ResolveState.IsTransient() || MvcIdentityAdapterHashMap.StoringTransientsInSession) || nakedObject.Specification.IsCollection) { session.ClearPreviousTransients(nakedObject, flag); session.GetCache(flag).AddOrUpdateInCache(nakedObject, url, flag); } }
public ObjectDef(string line) : base(line) { Id = GetInt(0); ModelName = GetString(1); TextureDictionaryName = GetString(2); DrawDist = GetSingle(3); Flags = (ObjectFlag)GetInt(4); }
public ObjectDef(string line) : base(line) { Id = GetInt(0); ModelName = GetString(1); TextureDictionaryName = GetString(2); DrawDist = GetSingle(3); Flags = (ObjectFlag) GetInt(4); }
public ObjectDefinition(String model, String txd, float drawDist, ObjectFlag flags) { ModelName = model; TextureDictName = txd; DrawDist = drawDist; DrawDist2 = DrawDist * DrawDist; Flags = flags; ModelRequested = false; }
public ObjectDefinition( String model, String txd, float drawDist, ObjectFlag flags ) { ModelName = model; TextureDictName = txd; DrawDist = drawDist; DrawDist2 = DrawDist * DrawDist; Flags = flags; ModelRequested = false; }
/// <summary> /// Set or clear <paramref name="flag"/> in <see cref="ObjectFlags"/>. /// </summary> /// <param name="flag">The flag to set or clear.</param> /// <param name="set">True to set, false to clear.</param> public void SetFlag(ObjectFlag flag, bool set) { if (set) { AddFlag(flag); } else { ClearFlag(flag); } }
public new object Desirialize(int offset, DynamicBuffer buffer, Dictionary <int, object> referenceMaping) { short position = (short)offset == 0 ? (short)0 : BitConverter.ToInt16(buffer.CurrentBuffer, offset); int positionInBuffer = 0; ObjectFlag flag = (ObjectFlag)buffer.CurrentBuffer[offset]; positionInBuffer++; bool isHasValue = BitConverter.ToBoolean(buffer.CurrentBuffer, position + positionInBuffer); positionInBuffer++; if (isHasValue) { return(memberTypeInfo.Resolver.Desirialize(position + positionInBuffer, buffer, referenceMaping)); } return(null); }
public static void ClearDestroyedObjectsOfType(this HttpSessionStateBase session, INakedObjectSpecification spec, ObjectFlag flag = ObjectFlag.None) { Dictionary<string, CacheMemento> cache = session.GetCache(flag); List<string> toRemove = cache.Where(cm => cm.Value.Spec.IsOfType(spec)).Select(kvp => new { kvp.Key, no = SafeGetNakedObjectFromId(kvp.Key) }).Where(ao => ao.no.ResolveState.IsDestroyed()).Select(ao => ao.Key).ToList(); toRemove.ForEach(k => cache.Remove(k)); }
private static Dictionary<string, CacheMemento> GetCache(this HttpSessionStateBase session, ObjectFlag flag) { var objs = (Dictionary<string, CacheMemento>)session[Bucket[(int)flag]]; if (objs == null) { objs = new Dictionary<string, CacheMemento>(); session.Add(Bucket[(int) flag], objs); } return objs; }
public static IEnumerable<string> AllCachedUrls(this HttpSessionStateBase session, ObjectFlag flag = ObjectFlag.None) { return session.GetCache(flag).OrderBy(kvp => kvp.Value.Added).Where(kvp => kvp.Value.Url != null).Select(kvp => kvp.Value.Url); }
private static IEnumerable<INakedObject> GetAndTidyCachedNakedObjectsOfType(this HttpSessionStateBase session, INakedObjectSpecification spec, ObjectFlag flag) { session.ClearDestroyedObjectsOfType(spec, flag); return session.GetCache(flag).Where(cm => cm.Value.Spec.IsOfType(spec)).OrderBy(kvp => kvp.Value.Added).Select(kvp => FrameworkHelper.GetNakedObjectFromId(kvp.Key)); }
public bool HasFlags( ObjectFlag flag ) { return ( Flags & flag ) == flag; }
public static object LastObject(this HttpSessionStateBase session, ObjectFlag flag = ObjectFlag.None) { KeyValuePair<string, CacheMemento> lastEntry = session.GetCache(flag).OrderBy(kvp => kvp.Value.Added).LastOrDefault(); if (lastEntry.Equals(default(KeyValuePair<string, CacheMemento>))) { return null; } INakedObject lastObject = SafeGetNakedObjectFromId(lastEntry.Key); if (lastObject.ResolveState.IsDestroyed()) { session.GetCache(flag).Remove(lastEntry.Key); return session.LastObject(flag); } return lastObject.Object; }
public static void AddToCache(this HttpSessionStateBase session, IFrameworkFacade facade, IObjectFacade nakedObject, ObjectFlag flag = ObjectFlag.None) { session.AddToCache(facade, nakedObject, null, flag); }
public static void RemoveOthersFromCache(this HttpSessionStateBase session, object domainObject, ObjectFlag flag = ObjectFlag.None) { INakedObject nakedObject = FrameworkHelper.GetNakedObject(domainObject); session.RemoveOthersFromCache(nakedObject, flag); }
internal static IEnumerable <object> AllCachedObjects(this HttpSessionStateBase session, IFrameworkFacade facade, ObjectFlag flag = ObjectFlag.None) { return(session.GetAndTidyCachedNakedObjects(facade, flag).Where(no => !no.IsDestroyed).Select(no => no.GetDomainObject())); }
public static void AddToCache(this HttpSessionStateBase session, IFrameworkFacade facade, object domainObject, ObjectFlag flag = ObjectFlag.None) { var nakedObject = facade.GetObject(domainObject); session.AddToCache(facade, nakedObject, flag); }
private static void AddToCache(this Dictionary <string, CacheMemento> cache, IFrameworkFacade facade, IObjectFacade nakedObject, string url, ObjectFlag flag) { var loid = facade.OidTranslator.GetOidTranslation(nakedObject); string objectId = loid == null ? "" : loid.Encode(); cache[objectId] = new CacheMemento { Added = DateTime.Now, Spec = nakedObject.Specification.FullName, Url = url }; while (cache.Count > CacheSize) { RemoveOldest(cache, flag); } }
private static void AddOrUpdateInCache(this Dictionary <string, CacheMemento> cache, IFrameworkFacade facade, IObjectFacade nakedObject, string url, ObjectFlag flag) { string objectId = facade.OidTranslator.GetOidTranslation(nakedObject).Encode(); if (cache.ContainsKey(objectId)) { cache[objectId].Spec = nakedObject.Specification.FullName; cache[objectId].Url = url; } else { cache[objectId] = new CacheMemento { Added = DateTime.Now, Spec = nakedObject.Specification.FullName, Url = url }; while (cache.Count > CacheSize) { RemoveOldest(cache, flag); } } }
private static Dictionary <string, CacheMemento> GetCache(this HttpSessionStateBase session, ObjectFlag flag) { var objs = (Dictionary <string, CacheMemento>)session[Bucket[(int)flag]]; if (objs == null) { objs = new Dictionary <string, CacheMemento>(); session.Add(Bucket[(int)flag], objs); } return(objs); }
public static IEnumerable <string> AllCachedUrls(this HttpSessionStateBase session, ObjectFlag flag = ObjectFlag.None) { return(session.GetCache(flag).OrderBy(kvp => kvp.Value.Added).Where(kvp => kvp.Value.Url != null).Select(kvp => kvp.Value.Url)); }
public static void AddOrUpdateInCache(this HttpSessionStateBase session, IFrameworkFacade facade, IObjectFacade nakedObject, string url, ObjectFlag flag = ObjectFlag.None) { // only add transients if we are storing transients in the session if (!nakedObject.IsTransient || nakedObject.Specification.IsCollection) { //session.ClearPreviousTransients(nakedObject, flag); session.GetCache(flag).AddOrUpdateInCache(facade, nakedObject, url, flag); } }
public static IEnumerable <object> CachedObjectsOfType(this HttpSessionStateBase session, IFrameworkFacade facade, ITypeFacade spec, ObjectFlag flag = ObjectFlag.None) { return(session.GetAndTidyCachedNakedObjectsOfType(facade, spec, flag).Select(no => no.GetDomainObject())); }
public static void RemoveOthersFromCache(this HttpSessionStateBase session, IFrameworkFacade facade, object domainObject, ObjectFlag flag = ObjectFlag.None) { var nakedObject = GetNakedObject(facade, domainObject); session.RemoveOthersFromCache(facade, nakedObject, flag); }
private static IEnumerable <IObjectFacade> GetAndTidyCachedNakedObjectsOfType(this HttpSessionStateBase session, IFrameworkFacade facade, ITypeFacade spec, ObjectFlag flag) { session.ClearDestroyedObjectsOfType(facade, spec, flag); return(session.GetCache(flag).Where(cm => SameSpec(cm.Value.Spec, spec, facade)).OrderBy(kvp => kvp.Value.Added).Select(kvp => GetNakedObjectFromId(facade, kvp.Key))); }
public void RenderOccludedObject(IGameViewport viewport, GameObject obj) { mTotalLastFrame++; var type = obj.type; var flags = obj.GetFlags(); // Dont render destroyed or disabled objects const ObjectFlag dontDrawFlags = ObjectFlag.OFF | ObjectFlag.DESTROYED | ObjectFlag.DONTDRAW; if ((flags & dontDrawFlags) != 0) { return; } if (flags.HasFlag(ObjectFlag.INVISIBLE) || flags.HasFlag(ObjectFlag.INVENTORY)) { return; } switch (type) { case ObjectType.scenery: case ObjectType.trap: return; case ObjectType.pc: case ObjectType.npc: if (GameSystems.Critter.IsConcealed(obj)) { return; } break; default: break; } // Dont draw secret doors that haven't been found yet var secretDoorFlags = obj.GetSecretDoorFlags(); if (secretDoorFlags.HasFlag(SecretDoorFlag.SECRET_DOOR)) { var found = ((secretDoorFlags & SecretDoorFlag.SECRET_DOOR_FOUND) != 0); if (!found && type != ObjectType.portal) { return; } } var animatedModel = obj.GetOrCreateAnimHandle(); var animParams = obj.GetAnimParams(); locXY worldLoc; GameObject parent = null; if (type.IsEquipment()) { parent = GameSystems.Item.GetParent(obj); } var alpha = GetAlpha(obj); if (parent != null) { var parentAlpha = GetAlpha(parent); alpha = (alpha + parentAlpha) / 2; worldLoc = parent.GetLocation(); } else { worldLoc = obj.GetLocation(); } if (alpha == 0) { return; } // Handle fog occlusion of the world position, but handle it differently for portals if (type != ObjectType.portal) { var fogStatus = GameSystems.MapFogging.GetFogStatus(worldLoc, animParams.offsetX, animParams.offsetY); if ((fogStatus & 0xB0) == 0 || (fogStatus & 1) == 0) { return; } } else { LocAndOffsets loc; loc.location = worldLoc; loc.off_x = animParams.offsetX - locXY.INCH_PER_SUBTILE; loc.off_y = animParams.offsetY - locXY.INCH_PER_SUBTILE; loc.Normalize(); var fogStatus = GameSystems.MapFogging.GetFogStatus(loc.location, loc.off_x, loc.off_y); if ((fogStatus & 0xB0) == 0 || (fogStatus & 1) == 0) { return; } } LocAndOffsets worldPosFull; worldPosFull.off_x = animParams.offsetX; worldPosFull.off_y = animParams.offsetY; worldPosFull.location = worldLoc; var radius = obj.GetRadius(); var renderHeight = obj.GetRenderHeight(true); if (!IsObjectOnScreen(viewport.Camera, worldPosFull, animParams.offsetZ, radius, renderHeight)) { return; } var lightSearchRadius = 0.0f; if (!flags.HasFlag(ObjectFlag.DONTLIGHT)) { lightSearchRadius = radius; } LocAndOffsets locAndOffsets; locAndOffsets.location = worldLoc; locAndOffsets.off_x = animParams.offsetX; locAndOffsets.off_y = animParams.offsetY; var lights = FindLights(locAndOffsets, lightSearchRadius); mRenderedLastFrame++; MdfRenderOverrides overrides = new MdfRenderOverrides(); overrides.alpha = alpha / 255.0f; if (type != ObjectType.portal) { mOccludedMaterial.Resource.Bind(viewport, mDevice, lights, overrides); mAasRenderer.RenderWithoutMaterial(animatedModel, animParams); if (type.IsCritter()) { /* * This renders the equipment in a critter's hand separately, but * I am not certain *why* exactly. I thought this would have been * handled by addmeshes, but it might be that there's a distinct * difference between addmeshes that are skinned onto the mobile's * skeleton and equipment that is unskinned and just positioned * in the player's hands. */ var weaponPrim = GameSystems.Critter.GetWornItem(obj, EquipSlot.WeaponPrimary); if (weaponPrim != null) { RenderOccludedObject(viewport, weaponPrim); } var weaponSec = GameSystems.Critter.GetWornItem(obj, EquipSlot.WeaponSecondary); if (weaponSec != null) { RenderOccludedObject(viewport, weaponSec); } var shield = GameSystems.Critter.GetWornItem(obj, EquipSlot.Shield); if (shield != null) { RenderOccludedObject(viewport, shield); } } } else { if (GameSystems.ItemHighlight.ShowHighlights) { overrides.ignoreLighting = true; } mAasRenderer.Render(viewport, animatedModel, animParams, lights, overrides); } }
public static void RemoveOthersFromCache(this HttpSessionStateBase session, INakedObject nakedObject, ObjectFlag flag = ObjectFlag.None) { session.GetCache(flag).RemoveOthersFromCache(nakedObject); }
public void RenderObjectHighlight(IGameViewport viewport, GameObject obj, ResourceRef <IMdfRenderMaterial> material) { mTotalLastFrame++; var type = obj.type; var flags = obj.GetFlags(); // Dont render destroyed or disabled objects const ObjectFlag dontDrawFlags = ObjectFlag.OFF | ObjectFlag.DESTROYED | ObjectFlag.DONTDRAW; if ((flags & dontDrawFlags) != 0) { return; } // Hide invisible objects we're supposed to show them if (flags.HasFlag(ObjectFlag.INVISIBLE)) { return; } // Dont draw secret doors that haven't been found yet var secretDoorFlags = obj.GetSecretDoorFlags(); if (secretDoorFlags.HasFlag(SecretDoorFlag.SECRET_DOOR)) { var found = secretDoorFlags.HasFlag(SecretDoorFlag.SECRET_DOOR_FOUND); if (!found && type != ObjectType.portal) { return; } } var animatedModel = obj.GetOrCreateAnimHandle(); var animParams = obj.GetAnimParams(); locXY worldLoc; GameObject parent = null; if (type.IsEquipment()) { parent = GameSystems.Item.GetParent(obj); } var alpha = GetAlpha(obj); if (parent != null) { var parentAlpha = GetAlpha(parent); alpha = (alpha + parentAlpha) / 2; worldLoc = parent.GetLocation(); } else { worldLoc = obj.GetLocation(); } if (alpha == 0) { return; } // Handle fog occlusion of the world position if (type != ObjectType.container && (type == ObjectType.projectile || type.IsCritter() || type.IsEquipment()) && (GameSystems.MapFogging.GetFogStatus(worldLoc, animParams.offsetX, animParams.offsetY) & 1) == 0) { return; } LocAndOffsets worldPosFull; worldPosFull.off_x = animParams.offsetX; worldPosFull.off_y = animParams.offsetY; worldPosFull.location = worldLoc; var radius = obj.GetRadius(); var renderHeight = obj.GetRenderHeight(true); if (!IsObjectOnScreen(viewport.Camera, worldPosFull, animParams.offsetZ, radius, renderHeight)) { return; } var lightSearchRadius = 0.0f; if (!flags.HasFlag(ObjectFlag.DONTLIGHT)) { lightSearchRadius = radius; } LocAndOffsets locAndOffsets; locAndOffsets.location = worldLoc; locAndOffsets.off_x = animParams.offsetX; locAndOffsets.off_y = animParams.offsetY; var lights = FindLights(locAndOffsets, lightSearchRadius); mRenderedLastFrame++; MdfRenderOverrides overrides = new MdfRenderOverrides(); overrides.alpha = alpha / 255.0f; material.Resource.Bind(viewport, mDevice, lights, overrides); mAasRenderer.RenderWithoutMaterial(animatedModel, animParams); }
// This is dangerous - retrieves all cached objects from the database - use with care ! internal static IEnumerable<object> AllCachedObjects(this HttpSessionStateBase session, ObjectFlag flag = ObjectFlag.None) { return session.GetAndTidyCachedNakedObjects(flag).Where(no => !no.ResolveState.IsDestroyed()).Select(no => no.Object); }
public void RenderObject(IGameViewport viewport, GameObject obj, bool showInvisible) { mTotalLastFrame++; var type = obj.type; var flags = obj.GetFlags(); // Dont render destroyed or disabled objects const ObjectFlag dontDrawFlags = ObjectFlag.OFF | ObjectFlag.DESTROYED | ObjectFlag.DONTDRAW; if ((flags & dontDrawFlags) != 0) { return; } // Hide invisible objects we're supposed to show them if ((flags & ObjectFlag.INVISIBLE) != 0 && !showInvisible) { return; } // Dont draw secret doors that haven't been found yet var secretDoorFlags = obj.GetSecretDoorFlags(); if (secretDoorFlags.HasFlag(SecretDoorFlag.SECRET_DOOR)) { var found = secretDoorFlags.HasFlag(SecretDoorFlag.SECRET_DOOR_FOUND); if (!found && type != ObjectType.portal) { return; } } var animatedModel = obj.GetOrCreateAnimHandle(); var animParams = obj.GetAnimParams(); locXY worldLoc; GameObject parent = null; if (type.IsEquipment()) { parent = GameSystems.Item.GetParent(obj); } var alpha = GetAlpha(obj); if (parent != null) { var parentAlpha = GetAlpha(parent); alpha = (alpha + parentAlpha) / 2; worldLoc = parent.GetLocation(); } else { worldLoc = obj.GetLocation(); } if (alpha == 0) { return; } // Handle fog occlusion of the world position if (type != ObjectType.container && (type == ObjectType.projectile || type.IsCritter() || type.IsEquipment()) && (GameSystems.MapFogging.GetFogStatus(worldLoc, animParams.offsetX, animParams.offsetY) & 1) == 0) { return; } LocAndOffsets worldPosFull; worldPosFull.off_x = animParams.offsetX; worldPosFull.off_y = animParams.offsetY; worldPosFull.location = worldLoc; var radius = obj.GetRadius(); var renderHeight = obj.GetRenderHeight(true); if (!IsObjectOnScreen(viewport.Camera, worldPosFull, animParams.offsetZ, radius, renderHeight)) { return; } if (Globals.Config.drawObjCylinders) { Tig.ShapeRenderer3d.DrawCylinder( viewport, worldPosFull.ToInches3D(animParams.offsetZ), radius, renderHeight ); } var lightSearchRadius = 0.0f; if (!flags.HasFlag(ObjectFlag.DONTLIGHT)) { lightSearchRadius = radius; } LocAndOffsets locAndOffsets; locAndOffsets.location = worldLoc; locAndOffsets.off_x = animParams.offsetX; locAndOffsets.off_y = animParams.offsetY; var lights = FindLights(locAndOffsets, lightSearchRadius); if (type == ObjectType.weapon) { int glowType; if (flags.HasFlag(ObjectFlag.INVENTORY) && parent != null) { glowType = GameSystems.D20.GetWeaponGlowType(parent, obj); } else { glowType = GameSystems.D20.GetWeaponGlowType(null, obj); } if (glowType != 0 && glowType <= mGlowMaterials.Length) { var glowMaterial = mGlowMaterials[glowType - 1]; if (glowMaterial.IsValid) { RenderObjectHighlight(viewport, obj, glowMaterial); } } } if (GameSystems.ItemHighlight.ShowHighlights && (type.IsEquipment() && !(flags.HasFlag(ObjectFlag.INVENTORY) || flags.HasFlag(ObjectFlag.CLICK_THROUGH)) || GameSystems.Critter.IsLootableCorpse(obj) || type == ObjectType.portal)) { RenderObjectHighlight(viewport, obj, mHighlightMaterial); // Add a single light with full ambient color to make the object appear fully lit lights.Clear(); Light3d fullBrightLight = new Light3d(); fullBrightLight.ambient = LinearColor.White; fullBrightLight.color = new LinearColor(0, 0, 0); fullBrightLight.dir = Vector4.UnitZ; fullBrightLight.type = Light3dType.Directional; lights.Add(fullBrightLight); } mRenderedLastFrame++; MdfRenderOverrides overrides = new MdfRenderOverrides(); overrides.alpha = alpha / 255.0f; mAasRenderer.Render(viewport, animatedModel, animParams, lights, overrides); Light3d globalLight = new Light3d(); if (lights.Count > 0) { globalLight = lights[0]; } if (type.IsCritter()) { if (alpha > 16) { if (mShadowType == ShadowType.ShadowMap) { RenderShadowMapShadow(viewport, obj, animParams, animatedModel, globalLight, alpha); } else if (mShadowType == ShadowType.Geometry) { mAasRenderer.RenderGeometryShadow( viewport.Camera, animatedModel, animParams, globalLight, alpha / 255.0f); } else if (mShadowType == ShadowType.Blob) { RenderBlobShadow(viewport, obj, animatedModel, ref animParams, alpha); } } /* * This renders the equipment in a critter's hand separately, but * I am not certain *why* exactly. I thought this would have been * handled by addmeshes, but it might be that there's a distinct * difference between addmeshes that are skinned onto the mobile's * skeleton and equipment that is unskinned and just positioned * in the player's hands. */ var weaponPrim = GameSystems.Critter.GetWornItem(obj, EquipSlot.WeaponPrimary); if (weaponPrim != null) { RenderObject(viewport, weaponPrim, showInvisible); } var weaponSec = GameSystems.Critter.GetWornItem(obj, EquipSlot.WeaponSecondary); if (weaponSec != null) { RenderObject(viewport, weaponSec, showInvisible); } var shield = GameSystems.Critter.GetWornItem(obj, EquipSlot.Shield); if (shield != null) { RenderObject(viewport, shield, showInvisible); } } else if (type.IsEquipment() && mShadowType == ShadowType.Geometry) { mAasRenderer.RenderGeometryShadow( viewport.Camera, animatedModel, animParams, globalLight, alpha / 255.0f); } RenderMirrorImages( viewport, obj, animParams, animatedModel, lights); if (mGrappleController.IsGiantFrog(obj)) { mGrappleController.AdvanceAndRender( viewport, obj, animParams, animatedModel, lights, alpha / 255.0f); } }
// This is dangerous - retrieves all cached objects from the database - use with care ! private static IEnumerable<INakedObject> GetAndTidyCachedNakedObjects(this HttpSessionStateBase session, ObjectFlag flag) { session.ClearDestroyedObjects(flag); return session.GetCache(flag).OrderBy(kvp => kvp.Value.Added).Select(kvp => FrameworkHelper.GetNakedObjectFromId(kvp.Key)); }
public static object LastObject(this HttpSessionStateBase session, IFrameworkFacade facade, ObjectFlag flag = ObjectFlag.None) { KeyValuePair <string, CacheMemento> lastEntry = session.GetCache(flag).OrderBy(kvp => kvp.Value.Added).LastOrDefault(); if (lastEntry.Equals(default(KeyValuePair <string, CacheMemento>))) { return(null); } var lastObject = SafeGetNakedObjectFromId(lastEntry.Key, facade); if (lastObject == null) { session.GetCache(flag).Remove(lastEntry.Key); return(session.LastObject(facade, flag)); } return(lastObject.GetDomainObject()); }
public static IEnumerable<object> CachedObjectsOfType(this HttpSessionStateBase session, INakedObjectSpecification spec, ObjectFlag flag = ObjectFlag.None) { return session.GetAndTidyCachedNakedObjectsOfType(spec, flag).Select(no => no.Object); }
private static void RemoveOldest(Dictionary<string, CacheMemento> cache, ObjectFlag flag) { DateTime oldestEntry = cache.Values.Select(t => t.Added).Min(); string oldestId = cache.Where(kvp => kvp.Value.Added == oldestEntry).Select(kvp => kvp.Key).First(); cache.Remove(oldestId); }
public static void ClearCachedObjects(this HttpSessionStateBase session, ObjectFlag flag = ObjectFlag.None) { Dictionary<string, CacheMemento> cache = session.GetCache(flag); List<string> toRemove = cache.Select(kvp => kvp.Key).ToList(); toRemove.ForEach(k => cache.Remove(k)); }
public static void AddToCache(this HttpSessionStateBase session, INakedObject nakedObject, ObjectFlag flag = ObjectFlag.None) { session.AddToCache(nakedObject, null, flag); }
private static void AddToCache(this Dictionary<string, CacheMemento> cache, INakedObject nakedObject, string url, ObjectFlag flag) { string objectId = FrameworkHelper.GetObjectId(nakedObject); cache[objectId] = new CacheMemento {Added = DateTime.Now, Spec = nakedObject.Specification, Url = url}; while (cache.Count > CacheSize) { RemoveOldest(cache, flag); } }
public static void ClearDestroyedObjectsOfType(this HttpSessionStateBase session, IFrameworkFacade facade, ITypeFacade spec, ObjectFlag flag = ObjectFlag.None) { Dictionary <string, CacheMemento> cache = session.GetCache(flag); List <string> toRemove = cache.Where(cm => SameSpec(cm.Value.Spec, spec, facade)).Select(kvp => new { kvp.Key, no = SafeGetNakedObjectFromId(kvp.Key, facade) }).Where(ao => ao.no == null).Select(ao => ao.Key).ToList(); toRemove.ForEach(k => cache.Remove(k)); }
public static void AddOrUpdateInCache(this HttpSessionStateBase session, object domainObject, string url, ObjectFlag flag = ObjectFlag.None) { INakedObject nakedObject = FrameworkHelper.GetNakedObject(domainObject); session.AddOrUpdateInCache(nakedObject, url, flag); }
public static void RemoveOthersFromCache(this HttpSessionStateBase session, IFrameworkFacade facade, IObjectFacade nakedObject, ObjectFlag flag = ObjectFlag.None) { session.GetCache(flag).RemoveOthersFromCache(facade, nakedObject); }
public static void RemoveFromCache(this HttpSessionStateBase session, string objectId, ObjectFlag flag = ObjectFlag.None) { session.GetCache(flag).RemoveFromCache(objectId); }
public UnityEngine.Material[] GetMaterials(ObjectFlag flags) { return GetMaterials(flags, x => {}); }
internal static void TestAddToCache(this HttpSessionStateBase session, INakedObject nakedObject, ObjectFlag flag = ObjectFlag.None) { session.GetCache(flag).AddToCache(nakedObject, null, flag); }
public UnityEngine.Material[] GetMaterials(ObjectFlag flags, Action<UnityEngine.Material> setupMaterial) { var matFlags = MaterialFlags.Default | MaterialFlags.OverrideAlpha; if ((flags & ObjectFlag.NoBackCull) == ObjectFlag.NoBackCull) { matFlags |= MaterialFlags.NoBackCull; } if ((flags & (ObjectFlag.Alpha1 | ObjectFlag.Alpha2)) != 0 && (flags & ObjectFlag.DisableShadowMesh) == ObjectFlag.DisableShadowMesh) { matFlags |= MaterialFlags.Alpha; } return GetMaterials(matFlags, setupMaterial); }
public static void RemoveOthersFromCache(this HttpSessionStateBase session, string objectId, ObjectFlag flag = ObjectFlag.None) { session.GetCache(flag).RemoveOthersFromCache(objectId); }
// This is dangerous - retrieves all cached objects from the database - use with care ! private static IEnumerable <IObjectFacade> GetAndTidyCachedNakedObjects(this HttpSessionStateBase session, IFrameworkFacade facade, ObjectFlag flag) { session.ClearDestroyedObjects(facade, flag); return(session.GetCache(flag).OrderBy(kvp => kvp.Value.Added).Select(kvp => GetNakedObjectFromId(facade, kvp.Key))); }