root / trunk / Pithos.Core / Agents / AgentLocator.cs @ c99473ae
History | View | Annotate | Download (1003 Bytes)
1 | c28a075a | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | c28a075a | Panagiotis Kanavos | using System.Collections.Concurrent; |
3 | c28a075a | Panagiotis Kanavos | using System.Collections.Generic; |
4 | c28a075a | Panagiotis Kanavos | using System.Linq; |
5 | c28a075a | Panagiotis Kanavos | using System.Text; |
6 | c28a075a | Panagiotis Kanavos | |
7 | c28a075a | Panagiotis Kanavos | namespace Pithos.Core.Agents |
8 | c28a075a | Panagiotis Kanavos | { |
9 | c28a075a | Panagiotis Kanavos | static class AgentLocator<T> where T:class |
10 | c28a075a | Panagiotis Kanavos | { |
11 | c28a075a | Panagiotis Kanavos | static ConcurrentDictionary<string, WeakReference> _agents = new ConcurrentDictionary<string, WeakReference>(); |
12 | c28a075a | Panagiotis Kanavos | public static void Register(T agent,string key) |
13 | c28a075a | Panagiotis Kanavos | { |
14 | c28a075a | Panagiotis Kanavos | _agents[key] = new WeakReference(agent); |
15 | c28a075a | Panagiotis Kanavos | } |
16 | c28a075a | Panagiotis Kanavos | |
17 | c28a075a | Panagiotis Kanavos | public static T Get(string key) |
18 | c28a075a | Panagiotis Kanavos | { |
19 | c28a075a | Panagiotis Kanavos | return _agents[key].Target as T; |
20 | c28a075a | Panagiotis Kanavos | } |
21 | c28a075a | Panagiotis Kanavos | |
22 | c28a075a | Panagiotis Kanavos | public static bool TryGet(string key, out T value) |
23 | c28a075a | Panagiotis Kanavos | { |
24 | c28a075a | Panagiotis Kanavos | WeakReference target; |
25 | c28a075a | Panagiotis Kanavos | var exists = _agents.TryGetValue(key, out target); |
26 | c28a075a | Panagiotis Kanavos | value = target.Target as T; |
27 | c28a075a | Panagiotis Kanavos | return exists; |
28 | c28a075a | Panagiotis Kanavos | } |
29 | c28a075a | Panagiotis Kanavos | |
30 | c28a075a | Panagiotis Kanavos | public static void Remove(string key) |
31 | c28a075a | Panagiotis Kanavos | { |
32 | c28a075a | Panagiotis Kanavos | WeakReference target; |
33 | c28a075a | Panagiotis Kanavos | _agents.TryRemove(key, out target); |
34 | c28a075a | Panagiotis Kanavos | } |
35 | c28a075a | Panagiotis Kanavos | } |
36 | c28a075a | Panagiotis Kanavos | } |