public ViewerConnection(SceneList scenes, UUID agentID, UUID sceneID, UUID partID, UUID itemID) { m_Scenes = scenes; AgentID = agentID; m_SceneID = sceneID; m_PartID = partID; m_ItemID = itemID; ClientUDP = new UDPCircuitsManager(new System.Net.IPAddress(0), 0, null, null, null, new List <IPortControlServiceInterface>()); ClientUDP.Start(); }
public ViewerCircuit( UDPCircuitsManager server, UInt32 circuitcode, UUID sessionID, UUID agentID, EndPoint remoteEndPoint) : base(server, circuitcode) { RegionData = new RegionHandshakeData(); RemoteEndPoint = remoteEndPoint; SessionID = sessionID; AgentID = agentID; MessageRouting.Add(MessageType.UpdateCreateInventoryItem, (m) => OnUpdateCreateInventoryItem?.Invoke(m)); MessageRouting.Add(MessageType.BulkUpdateInventory, (m) => OnBulkUpdateInventory?.Invoke(m)); }
protected void RemoveScene(SceneInterface s) { ScriptThreadPool.Shutdown(); m_ParcelAccessManager.Stop(); Environment.OnEnvironmentControllerChangeParams -= StoreEnvironmentControllerData; Environment.Stop(); PathfindingService?.Stop(); int serializedcount = 0; foreach (ObjectPart part in Primitives) { foreach (ObjectPartInventoryItem item in part.Inventory.Values) { IScriptState state = item.ScriptState; if (state != null) { try { m_SimulationDataStorage.ScriptStates[ID, part.ID, item.ID] = state.ToDbSerializedState(); if (++serializedcount % 50 == 0) { m_Log.InfoFormat("Serialized {0} script states", serializedcount); } } catch (Exception e) { m_Log.ErrorFormat("Script state serialization failed for {0} ({1}): prim {2} ({3}): item {4} ({5}): {6}: {7}\n{8}", Name, ID, part.Name, part.ID, item.Name, item.ID, e.GetType().FullName, e.Message, e.StackTrace); } } } } if (serializedcount == 1) { m_Log.InfoFormat("Serialized {0} script state", serializedcount); } else if (serializedcount % 50 != 0) { m_Log.InfoFormat("Serialized {0} script states", serializedcount); } m_RestartObject = null; if (m_NeighborService != null) { RegionInfo rInfo = s.GetRegionInfo(); rInfo.Flags &= ~RegionFlags.RegionOnline; m_NeighborService.NotifyNeighborStatus(rInfo); } if (m_SceneListener != null) { m_SceneListener.StopStorageThread(); SceneListeners.Remove(m_SceneListener); } if (m_TerrainListener != null) { m_TerrainListener.StopStorageThread(); Terrain.TerrainListeners.Remove(m_TerrainListener); } if (m_IMRouter != null) { m_IMRouter.SceneIM.Remove(IMSend); } UDPCircuitsManager udpServer = m_UDPServer; udpServer?.Shutdown(); m_UDPServer = null; }
protected SceneImplementation( SceneImplementationFactory sceneParams, RegionInfo ri) : base(ri.Size.X, ri.Size.Y) { SceneCapabilities.Add("ProductInfoRequest", new ProductInfoRequestCapability(this)); m_Scenes = sceneParams.Scenes; m_HttpServer = sceneParams.HttpServer; if (sceneParams.AssetService == null) { throw new ArgumentNullException("persistentAssetService"); } if (sceneParams.GridService == null) { throw new ArgumentNullException("gridService"); } if (ri == null) { throw new ArgumentNullException(nameof(ri)); } if (sceneParams.AvatarNameServices == null) { throw new ArgumentNullException("avatarNameServices"); } if (sceneParams.SimulationDataStorage == null) { throw new ArgumentNullException("simulationDataStorage"); } if (sceneParams.EstateService == null) { throw new ArgumentNullException("estateService"); } if (sceneParams.m_CapabilitiesConfig == null) { throw new ArgumentNullException("capabilitiesConfig"); } if (sceneParams.RegionStorage == null) { throw new ArgumentNullException("regionStorage"); } #region Setup services m_ChatService = sceneParams.ChatFactory.Instantiate(ri.ID); RegionStorage = sceneParams.RegionStorage; GroupsNameService = sceneParams.GroupsNameService; GroupsService = sceneParams.GroupsService; m_NeighborService = sceneParams.NeighborService; m_SimulationDataStorage = sceneParams.SimulationDataStorage; PersistentAssetService = sceneParams.AssetService; TemporaryAssetService = sceneParams.AssetCacheService; GridService = sceneParams.GridService; ExperienceService = sceneParams.ExperienceService; ExperienceNameService = sceneParams.ExperienceNameService; EstateService = sceneParams.EstateService; /* next line is there to break the circular dependencies */ TryGetScene = m_Scenes.TryGetValue; UserAgentServicePlugins.AddRange(sceneParams.UserAgentServicePlugins); AssetServicePlugins.AddRange(sceneParams.AssetServicePlugins); InventoryServicePlugins.AddRange(sceneParams.InventoryServicePlugins); #endregion #region Setup Region Data ID = ri.ID; GatekeeperURI = ri.GridURI; Access = ri.Access; ID = ri.ID; Name = ri.Name; Owner = ri.Owner; GridPosition = ri.Location; ProductName = ri.ProductName; RegionPort = ri.ServerPort; m_ExternalHostNameService = sceneParams.ExternalHostNameService; #endregion /* load estate flags cache */ uint estateID; EstateInfo estate; if (EstateService.RegionMap.TryGetValue(ID, out estateID) && EstateService.TryGetValue(estateID, out estate)) { m_EstateData = estate; } else { throw new ArgumentException("Could not load estate data"); } m_RestartObject = new RestartObject(m_Scenes, this, sceneParams, sceneParams.RegionStorage); m_IMService = sceneParams.IMService; m_UDPServer = new UDPCircuitsManager(new IPAddress(0), (int)ri.ServerPort, sceneParams.IMService, m_ChatService, this, sceneParams.PortControlServices); CapabilitiesConfig = sceneParams.m_CapabilitiesConfig; foreach (AvatarNameServiceInterface avNameService in sceneParams.AvatarNameServices) { AvatarNameServices.Add(avNameService); } Terrain = new TerrainController(this); Environment = new EnvironmentController(this, sceneParams.WindModelFactory); if (sceneParams.PathfindingServiceFactory != null) { PathfindingService = sceneParams.PathfindingServiceFactory.Instantiate(this); } m_IMRouter = sceneParams.IMRouter; m_IMRouter.SceneIM.Add(IMSend); OnRemove += RemoveScene; m_UDPServer.Start(); ScriptThreadPool = sceneParams.ScriptWorkerThreadPoolFactory.InstantiateThreadPool(ID); }