Statistics
| Branch: | Revision:

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
}