From 9abe4b2ebf537d32b0b01d404497f290a4f4f806 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Wed, 12 Dec 2007 00:38:57 +0000 Subject: [PATCH] * Start listening for client connections immediately after a region initializes during initial instance startup. (as opposed to waiting for 'all of the regions' to initialize first) * Removed hackish timer based client notification about regions up (no longer needed) * Added a comment about an inventory based login failure that causes me lots of greif testing and debugging. Comment includes *why* it's failing. --- OpenSim/Region/Application/OpenSimMain.cs | 13 +++++----- .../OGS1/OGS1InventoryService.cs | 1 + .../Modules/AvatarFactoryModule.cs | 9 ++++++- OpenSim/Region/Environment/Scenes/Scene.cs | 26 +++++++++++++------ 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index 88a7bc2e5f..1471f89fec 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -338,10 +338,10 @@ namespace OpenSim } // Start UDP servers - for (int i = 0; i < m_udpServers.Count; i++) - { - m_udpServers[i].ServerListener(); - } + //for (int i = 0; i < m_udpServers.Count; i++) + //{ + // m_udpServers[i].ServerListener(); + // } //Run Startup Commands if (m_startupCommandsFile != "") @@ -385,6 +385,7 @@ namespace OpenSim m_udpServers.Add(udpServer); m_regionData.Add(regionInfo); + udpServer.ServerListener(); return udpServer; } @@ -484,7 +485,7 @@ namespace OpenSim m_regionData.RemoveAt(RegionHandleElement); } UDPServer restartingRegion = CreateRegion(whichRegion); - restartingRegion.ServerListener(); + //restartingRegion.ServerListener(); //m_sceneManager.SendSimOnlineNotification(restartingRegion.RegionHandle); } @@ -757,7 +758,7 @@ namespace OpenSim break; case "create-region": - CreateRegion(new RegionInfo(cmdparams[0], "Regions/" + cmdparams[1])).ServerListener(); + CreateRegion(new RegionInfo(cmdparams[0], "Regions/" + cmdparams[1])); break; case "remove-region": diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs index 99d1b0f5fb..6edb149fa6 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs @@ -65,6 +65,7 @@ namespace OpenSim.Region.Communications.OGS1 { RestObjectPosterResponse requester = new RestObjectPosterResponse(); requester.ResponseCallback = InventoryResponse; + // THIS SHOULD BE A Guid, NOT A LLUUID! No longer Serializable! This will fail EVERY TIME. requester.BeginPostObject(_inventoryServerUrl + "/GetInventory/", userID); } catch (Exception) diff --git a/OpenSim/Region/Environment/Modules/AvatarFactoryModule.cs b/OpenSim/Region/Environment/Modules/AvatarFactoryModule.cs index 979df59d28..86ddfaf97f 100644 --- a/OpenSim/Region/Environment/Modules/AvatarFactoryModule.cs +++ b/OpenSim/Region/Environment/Modules/AvatarFactoryModule.cs @@ -55,7 +55,14 @@ namespace OpenSim.Region.Environment.Modules byte[] visualParams; GetDefaultAvatarAppearance(out wearables, out visualParams); appearance = new AvatarAppearance(avatarId, wearables, visualParams); - m_avatarsAppearance[avatarId] = appearance; + try + { + m_avatarsAppearance[avatarId] = appearance; + } + catch (System.NullReferenceException) + { + OpenSim.Framework.Console.MainLog.Instance.Error("AVATAR", "Unable to load appearance for uninitialized avatar"); + } return true; } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index fef02f058b..f2b5643225 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -313,17 +313,27 @@ namespace OpenSim.Region.Environment.Scenes } if ((Math.Abs(otherRegion.RegionLocX - RegionInfo.RegionLocX) <= 1) && (Math.Abs(otherRegion.RegionLocY - RegionInfo.RegionLocY) <= 1)) { - lock (m_regionRestartNotifyList) + try { - if (!(m_regionRestartNotifyList.Contains(otherRegion))) - { - m_regionRestartNotifyList.Add(otherRegion); - m_restartWaitTimer.Interval = 50000; - m_restartWaitTimer.AutoReset = false; - m_restartWaitTimer.Elapsed += new ElapsedEventHandler(RestartNotifyWaitElapsed); - m_restartWaitTimer.Start(); + ForEachScenePresence(delegate(ScenePresence agent) + { + // If agent is a root agent. + if (!agent.IsChildAgent) + { + //agent.ControllingClient.new + //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); + InformClientOfNeighbor(agent, otherRegion); + } } + + ); + } + catch (System.NullReferenceException) + { + // This means that we're not booted up completely yet. + // This shouldn't happen too often anymore. + MainLog.Instance.Error("SCENE", "Couldn't inform client of regionup because we got a null reference exception"); } } else