public static ActionHolder UpdateActionsHolder(string roomKey, string userGuid, SceneAction action) { foreach (var item in ActionsDict.Where(kvp => kvp.Value.TimeStamp < DateTime.Now.AddMinutes(-5)).ToList()) { ActionsDict.Remove(item.Key); } ActionHolder aHolder = null; if (!ActionsDict.TryGetValue(roomKey, out aHolder)) { aHolder = new ActionHolder(); aHolder.ActionsOwnerId = userGuid; } if (action != null) { if (action.GoName == "slam_start_recording") { if (aHolder.Actions.Find(x => x.GoName == "slam_end_recording") != null) { aHolder.Actions.Clear(); aHolder.ActionsOwnerId = userGuid; } } if (aHolder.ActionsOwnerId != userGuid) { return(null); } //if (action.GoName == "slam_end_recording") //{ // ActionsDict.Remove(roomKey); // return null; //} var ac = aHolder.Actions.Find(x => x.GoName == action.GoName && x.SceneTime == action.SceneTime); if (ac == null) { aHolder.Actions.Add(action); } aHolder.TimeStamp = DateTime.Now; //update time ActionsDict[roomKey] = aHolder; } return(aHolder); }
public static string UpdateTransFormHolder(string roomKey, string userGuid, TransFormHolder transformHolder, SceneAction action, string userPosStr, PostI post, int Timezone_Offset, List <ServerObjectTransform> sot) { lock (thisLock) { Dictionary <string, TransFormHolder> tList = null; if (!TransFormDict.TryGetValue(roomKey, out tList)) { tList = new Dictionary <string, TransFormHolder>(); } foreach (var item in tList.Where(kvp => kvp.Value.TimeStamp < DateTime.Now.AddSeconds(-4)).ToList()) { tList.Remove(item.Key); } //check idlecount if (tList.ContainsKey(userGuid)) { var lastTransform = tList[userGuid]; if (lastTransform != null && lastTransform.Rotation == transformHolder.Rotation) { transformHolder.IdleCount = lastTransform.IdleCount + 1; } } tList[userGuid] = transformHolder; TransFormDict[roomKey] = tList; ActionHolder ah = null; ah = UpdateActionsHolder(roomKey, userGuid, action); List <ServerObjectTransform> sotRes = HandleServerObjects(roomKey, userGuid, sot); SlmControls.Vector3 userPos = SlmControls.Vector3.FromString(userPosStr); return(MakeXml(tList, ah, userPos, post, Timezone_Offset, sotRes)); } }