void MapStruct <T>(out Func <T, Key> getKey, out Action <T, Key> setKey, out Func <T, Entity, T> From, out Func <Entity, T, Entity> To) { var objType = typeof(T); var sset = new Func <string, VAction <T, int>, VAction <T, Entity> >(StructSet).Method.GetGenericMethodDefinition(); var sget = new Func <string, VFunc <T, int>, VAction <T, Entity> >(StructGet).Method.GetGenericMethodDefinition(); var members = objType.GetProperties(); var from = new VAction <T, Entity> [members.Length]; var to = new VAction <T, Entity> [members.Length]; // value types can't have keys getKey = null; setKey = null; int propCount = 0; for (int i = 0; i < members.Length; ++i) { // this is a reference type, so accumulate a list of getters/setters for the type's members //FIXME: add support for overridable field members via attributes var member = members[i]; if (member.GetCustomAttribute <NotMappedAttribute>() == null) { var tset = typeof(VAction <,>).MakeGenericType(objType, member.PropertyType); from[propCount] = (VAction <T, Entity>)sset .MakeGenericMethod(objType, member.PropertyType) .Invoke(null, new object[] { member.Name, member.GetSetMethod().CreateDelegate(tset) }); var tget = typeof(VFunc <,>).MakeGenericType(objType, member.PropertyType); to[propCount++] = (VAction <T, Entity>)sget .MakeGenericMethod(objType, member.PropertyType) .Invoke(null, new object[] { member.Name, member.GetGetMethod().CreateDelegate(tget) }); } } From = (obj, e) => { if (e == null) { return(default(T)); } for (var i = 0; i < propCount; ++i) { from[i](ref obj, e); } return(obj); }; To = (e, obj) => { if (e == null) { throw new ArgumentNullException("entity"); } for (var i = 0; i < propCount; ++i) { to[i](ref obj, e); } return(e); }; }
private void SaveActionToDB(int roomID, VAction act) { SaveActionToDB(roomID, new List <VAction>() { act }); }
protected override void process(Entity entity) { VAction action = (VAction)_ActionMapper.get(entity); action.doAction(); ecs_instance.delete_entity(entity); }
internal void UpdateRoomActionLive(string roomID, VAction act) { if (act != null) { ActionMsg jsonAction = new ActionMsg(act.ID, act.UserID, act.TimeStamp, act.ToStringWithoutUser(), -1); context.Clients.Group(roomID).updateRoomActionLive(roomID, act.TabID, jsonAction); } }
//currently actions dont have any tags internal static ICollection <CriticalActionPoints> Analyze(VAction action) { List <CriticalActionPoints> cps = new List <CriticalActionPoints>(); CriticalActionPoints cp = new CriticalActionPoints(); cp.TabID = action.TabID; cp.Priority = priority[i++ % priority.Length]; cp.Type = CriticalPointTypes.None; cps.Add(cp); return(cps); }
internal void UpdateRoomActionLiveControl(string roomID, VAction act) { UpdateRoomActionLive(roomID, act); UpdateRoomUser(roomID, act.UserID, true); if (act.CriticalPoints == null) { return; } foreach (CriticalActionPoints cp in act.CriticalPoints) { UpdateNewCP(roomID, cp); } }
public static Entity createAction(ActionDef aDef, Entity owner, Entity Target) { Entity e = ActionFactory.ECSInstance.create(); VAction action = new VAction(); action.ActionDef = aDef; action.Owner = owner; action.Target = Target; ActionFactory.ECSInstance.add_component(e, action); ActionFactory.ECSInstance.resolve(e); return(e); }
internal static ICollection <CriticalActionPoints> Analyze(VAction action) { //TODO replace with eran's code List <CriticalActionPoints> cps = new List <CriticalActionPoints>(); CriticalActionPoints cp = new CriticalActionPoints(); cp.TabID = action.TabID; cp.Priority = priority[i++ % priority.Length]; cp.Type = CriticalPointTypes.I; cps.Add(cp); return(null); //return cps; }
private void AddAction(VAction action, bool clearAll) { if (clearAll) { for (int i = actionList.Count - 1; i > 0; i--) { actionList.RemoveAt(i); } if (actionList.Count > 0) { actionList[0].CancelAction(); //Just cancel the last one } actionList.Add(action); } else { actionList.Add(action); } }
private List <VAction> GetActionHistory(int tabID, int startIndex) { List <VAction> actions = new List <VAction>(); string json = VmtDevAPI.GetActionHistory(tabID, startIndex); if (json == null) { throw new TimeoutException(String.Format("TabID: {0} | TimeOut Exception | waiting time for actions from client API acceeded the timeout!", tabID)); } var results = JsonConvert.DeserializeObject <dynamic>(json); foreach (var item in results) { VAction action = VAction.ConvertHistoryActionJson(tabID, item); if (action != null) { actions.Add(action); } } return(actions); }
public void HandleLiveAction(string actID, string xmlstr, string log, string eventName, int roomID) { //temporary solution for "if(url.xml == null)" always pass var logRes = JsonConvert.DeserializeObject <dynamic>(log); string user = logRes.userName.Value.ToString().Trim(); if (isSagletUserInRoom(roomID.ToString(), user)) { return; } criticalPointAlerts.user_action(roomID, user); UpdateRoomLastUpdate(roomID); //end temporary solution // TODO handle log and eventName var url = JsonConvert.DeserializeObject <dynamic>(xmlstr); if (url.xml == null) { return; } //var logRes= JsonConvert.DeserializeObject<dynamic>(log); VAction action = VAction.ConvertLiveActionJson(actID, url.xml.ToString(), logRes, eventName); if (action != null) { action.CriticalPoints = CriticalPointAnalyzer.Analyze(action); //int roomID = db.Tabs.Find(action.TabID).GroupID; //action.CriticalPoints.Add(criticalPointAlerts.user_action(roomID, action.UserID, (List<CriticalActionPoints>)action.CriticalPoints)); //temporary canceled SaveActionToDB(roomID, action); hubDetails.UpdateRoomActionLiveControl(roomID.ToString(), action); //hubIndex.UpdateRoomIndex(roomID.ToString()); } }
static VAction <T, Entity> StructSet <T, TField>(string name, VAction <T, TField> setter) => (ref T obj, Entity e) => setter(ref obj, Value <TField> .From(e[name]));