public void SetAgentActiveGroup(string AgentID, GroupMembershipDelegate d) { GroupMembershipData activeGroup = d(); string cacheKey = "active-" + AgentID.ToString(); m_Cache.AddOrUpdate(cacheKey, activeGroup, GROUPS_CACHE_TIMEOUT); }
public ExtendedGroupMembershipData GetAgentActiveMembership(string AgentID, GroupMembershipDelegate d) { object membership = null; bool firstCall = false; string cacheKey = "active-" + AgentID.ToString(); //m_log.DebugFormat("[XXX]: GetAgentActiveMembership {0}", cacheKey); while (true) { lock (m_Cache) { if (m_Cache.TryGetValue(cacheKey, out membership)) { //m_log.DebugFormat("[XXX]: GetAgentActiveMembership {0} cached!", cacheKey); return((ExtendedGroupMembershipData)membership); } // not cached if (!m_ActiveRequests.ContainsKey(cacheKey)) { m_ActiveRequests.Add(cacheKey, true); firstCall = true; } } if (firstCall) { try { membership = d(); lock (m_Cache) { m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); return((ExtendedGroupMembershipData)membership); } } finally { lock (m_Cache) { m_ActiveRequests.Remove(cacheKey); } } } else { Thread.Sleep(50); } } }
public ExtendedGroupMembershipData GetAgentGroupMembership(string AgentID, UUID GroupID, GroupMembershipDelegate d) { object membership = null; bool firstCall = false; string cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); //m_log.DebugFormat("[XXX]: GetAgentGroupMembership {0}", cacheKey); while (true) { lock (m_Cache) { if (m_Cache.TryGetValue(cacheKey, out membership)) { //m_log.DebugFormat("[XXX]: GetAgentGroupMembership {0}", cacheKey); return (ExtendedGroupMembershipData)membership; } // not cached if (!m_ActiveRequests.ContainsKey(cacheKey)) { m_ActiveRequests.Add(cacheKey, true); firstCall = true; } } if (firstCall) { try { membership = d(); lock (m_Cache) { m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); return (ExtendedGroupMembershipData)membership; } } finally { m_ActiveRequests.Remove(cacheKey); } } else Thread.Sleep(50); } }
public void SetAgentActiveGroup(string AgentID, GroupMembershipDelegate d) { GroupMembershipData activeGroup = d(); string cacheKey = "active-" + AgentID.ToString(); lock (m_Cache) if (m_Cache.Contains(cacheKey)) m_Cache.AddOrUpdate(cacheKey, activeGroup, GROUPS_CACHE_TIMEOUT); }
public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, GroupMembershipDelegate d) { GroupMembershipData membership = d(); if (membership == null) return false; lock (m_Cache) { // first, remove everything! add a user is a heavy-duty op m_Cache.Clear(); m_Cache.AddOrUpdate("active-" + AgentID.ToString(), membership, GROUPS_CACHE_TIMEOUT); m_Cache.AddOrUpdate("membership-" + AgentID.ToString() + "-" + GroupID.ToString(), membership, GROUPS_CACHE_TIMEOUT); } return true; }
public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, GroupMembershipDelegate d) { GroupMembershipData membership = d(); if (membership == null) { return(false); } lock (m_Cache) { // first, remove everything! add a user is a heavy-duty op m_Cache.Clear(); m_Cache.AddOrUpdate("active-" + AgentID.ToString(), membership, GROUPS_CACHE_TIMEOUT); m_Cache.AddOrUpdate("membership-" + AgentID.ToString() + "-" + GroupID.ToString(), membership, GROUPS_CACHE_TIMEOUT); } return(true); }