aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionCache.cs
blob: ea205a24c1d5e3db4398f62d4097be137b03395f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Reflection;

using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;

using log4net;

namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
{
    public class RegionCache
    {
        private static readonly ILog m_log =
                LogManager.GetLogger(
                MethodBase.GetCurrentMethod().DeclaringType);

        private Scene m_scene;
        private Dictionary<ulong, GridRegion> m_neighbours = new Dictionary<ulong, GridRegion>();

        public string RegionName
        {
            get { return m_scene.RegionInfo.RegionName; }
        }

        public RegionCache(Scene s)
        {
            m_scene = s;
            m_scene.EventManager.OnRegionUp += OnRegionUp;
        }

        private void OnRegionUp(GridRegion otherRegion)
        {
            m_log.DebugFormat("[REGION CACHE]: (on region {0}) Region {1} is up @ {2}-{3}",
                m_scene.RegionInfo.RegionName, otherRegion.RegionName, otherRegion.RegionLocX, otherRegion.RegionLocY);

            m_neighbours[otherRegion.RegionHandle] = otherRegion;
        }

        public void Clear()
        {
            m_scene.EventManager.OnRegionUp -= OnRegionUp;
            m_neighbours.Clear();
        }

        public List<GridRegion> GetNeighbours()
        {
            return new List<GridRegion>(m_neighbours.Values);
        }
    }
}