public void Close() { if (regionCommsHost != null) { regionCommsHost.OnLogOffUser -= GridLogOffUser; regionCommsHost.OnChildAgentUpdate -= ChildAgentUpdate; regionCommsHost.OnRegionUp -= newRegionUp; regionCommsHost.OnExpectUser -= NewUserConnection; regionCommsHost.OnExpectPrim -= IncomingPrimCrossing; regionCommsHost.OnAvatarCrossingIntoRegion -= AgentCrossing; regionCommsHost.OnCloseAgentConnection -= CloseConnection; regionCommsHost.OnGetLandData -= FetchLandData; regionCommsHost.OnGetLandDataByID -= FetchLandDataByID; try { m_commsProvider.GridService.DeregisterRegion(m_regionInfo); } catch (Exception e) { m_log.ErrorFormat( "[GRID]: Deregistration of region {0} from the grid failed - {1}. Continuing", m_regionInfo.RegionName, e); } regionCommsHost = null; } }
/// <summary> /// Register a region with the grid /// </summary> /// <param name="regionInfos"></param> /// <exception cref="System.Exception">Thrown if region registration fails.</exception> public void RegisterRegion(IInterregionCommsOut comms_out, RegionInfo regionInfos) { m_interregionCommsOut = comms_out; m_regionInfo = regionInfos; m_commsProvider.GridService.gdebugRegionName = regionInfos.RegionName; regionCommsHost = m_commsProvider.GridService.RegisterRegion(m_regionInfo); if (regionCommsHost != null) { //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: registered with gridservice and got" + regionCommsHost.ToString()); regionCommsHost.debugRegionName = regionInfos.RegionName; regionCommsHost.OnExpectPrim += IncomingPrimCrossing; regionCommsHost.OnExpectUser += NewUserConnection; regionCommsHost.OnAvatarCrossingIntoRegion += AgentCrossing; regionCommsHost.OnCloseAgentConnection += CloseConnection; regionCommsHost.OnRegionUp += newRegionUp; regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate; regionCommsHost.OnLogOffUser += GridLogOffUser; regionCommsHost.OnGetLandData += FetchLandData; regionCommsHost.OnGetLandDataByID += FetchLandDataByID; } else { //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: registered with gridservice and got null"); } }
/// <summary> /// Register a region method with the BackEnd Services. /// </summary> /// <param name="regionInfo"></param> /// <returns></returns> public RegionCommsListener RegisterRegion(RegionInfo regionInfo) { //m_log.Debug("CommsManager - Region " + regionInfo.RegionHandle + " , " + regionInfo.RegionLocX + " , "+ regionInfo.RegionLocY +" is registering"); if (!m_regions.ContainsKey(regionInfo.RegionHandle)) { //m_log.Debug("CommsManager - Adding Region " + regionInfo.RegionHandle); m_regions.Add(regionInfo.RegionHandle, regionInfo); RegionCommsListener regionHost = new RegionCommsListener(); if (m_regionListeners.ContainsKey(regionInfo.RegionHandle)) { m_log.Error("[INTERREGION STANDALONE]: " + "Error:Region registered twice as an Events listener for Interregion Communications but not as a listed region. " + "In Standalone mode this will cause BIG issues. In grid mode, it means a region went down and came back up."); m_regionListeners.Remove(regionInfo.RegionHandle); } m_regionListeners.Add(regionInfo.RegionHandle, regionHost); return(regionHost); } else { // Already in our list, so the region went dead and restarted. // don't replace the old regioninfo.. this might be a locking issue.. however we need to // remove it and let it add normally below or we get extremely strange and intermittant // connectivity errors. // Don't change this line below to 'm_regions[regionInfo.RegionHandle] = regionInfo' unless you // *REALLY* know what you are doing here. m_regions[regionInfo.RegionHandle] = regionInfo; m_log.Warn("[INTERREGION STANDALONE]: Region registered twice. Region went down and came back up."); RegionCommsListener regionHost = new RegionCommsListener(); if (m_regionListeners.ContainsKey(regionInfo.RegionHandle)) { m_regionListeners.Remove(regionInfo.RegionHandle); } m_regionListeners.Add(regionInfo.RegionHandle, regionHost); return(regionHost); } }