/// <summary> /// Default constructor /// </summary> public GridClient() { // These are order-dependant Network = new NetworkManager(this); Settings = new Settings(this); Parcels = new ParcelManager(this); Self = new AgentManager(this); Avatars = new AvatarManager(this); Friends = new FriendsManager(this); Grid = new GridManager(this); Objects = new ObjectManager(this); Groups = new GroupManager(this); Assets = new AssetManager(this); Appearance = new AppearanceManager(this, Assets); Inventory = new InventoryManager(this); Directory = new DirectoryManager(this); Terrain = new TerrainManager(this); Sound = new SoundManager(this); Throttle = new AgentThrottle(this); //if (Settings.ENABLE_INVENTORY_STORE) // InventoryStore = new Inventory(Inventory); //if (Settings.ENABLE_LIBRARY_STORE) // LibraryStore = new Inventory(Inventory); //Inventory.OnSkeletonsReceived += // delegate(InventoryManager manager) // { // if (Settings.ENABLE_INVENTORY_STORE) // InventoryStore.InitializeFromSkeleton(Inventory.InventorySkeleton); // if (Settings.ENABLE_LIBRARY_STORE) // LibraryStore.InitializeFromSkeleton(Inventory.LibrarySkeleton); // }; }
public static void SaveSimAssets(AssetManager assetManager, AssetType assetType, UUID assetID, UUID itemID, UUID primID, string assetsPath) { int count = 0; AutoResetEvent AllPropertiesReceived = new AutoResetEvent(false); assetManager.RequestAsset(assetID, itemID, primID, assetType, false, SourceType.SimInventoryItem, UUID.Random(), (transfer, asset) => { string extension = string.Empty; if (ArchiveConstants.ASSET_TYPE_TO_EXTENSION.ContainsKey(assetType)) extension = ArchiveConstants.ASSET_TYPE_TO_EXTENSION[assetType]; if (asset == null) { AllPropertiesReceived.Set(); return; } File.WriteAllBytes(Path.Combine(assetsPath, assetID.ToString() + extension), asset.AssetData); ++count; AllPropertiesReceived.Set(); }); AllPropertiesReceived.WaitOne(5000); Logger.Log("Copied " + count + " textures to the asset archive folder", Helpers.LogLevel.Info); }
// FIXME: Create a class-level appearance thread so multiple threads can't be launched /// <summary> /// Default constructor /// </summary> /// <param name="client">This agents <seealso cref="OpenMetaverse.GridClient"/> Object</param> /// <param name="assets">Reference to an AssetManager object</param> public AppearanceManager(LoggerInstance log, NetworkManager network, InventoryManager inventory, AssetManager assets, ObjectManager objects, AgentManager self) { Log = log; Network = network; Inventory = inventory; Assets = assets; Self = self; Objects = objects; // Initialize AgentTextures to zero UUIDs for (int i = 0; i < AgentTextures.Length; i++) AgentTextures[i] = UUID.Zero; Network.RegisterCallback(PacketType.AgentWearablesUpdate, new NetworkManager.PacketCallback(AgentWearablesUpdateHandler)); Network.RegisterCallback(PacketType.AgentCachedTextureResponse, new NetworkManager.PacketCallback(AgentCachedTextureResponseHandler)); Network.RegisterCallback(PacketType.RebakeAvatarTextures,new NetworkManager.PacketCallback(RebakeAvatarTexturesHandler)); Network.OnDisconnected += new NetworkManager.DisconnectedCallback(Network_OnDisconnected); }
public static void SavePrims(AssetManager manager, IList<AssetPrim> prims, string primsPath, string assetsPath) { Dictionary<UUID, UUID> textureList = new Dictionary<UUID, UUID>(); // Delete all of the old linkset files try { Directory.Delete(primsPath, true); } catch (Exception) { } Thread.Sleep(100); // Create a new folder for the linkset files try { Directory.CreateDirectory(primsPath); } catch (Exception ex) { Logger.Log("Failed saving prims: " + ex.Message, Helpers.LogLevel.Error); return; } Thread.Sleep(100); try { foreach (AssetPrim assetPrim in prims) { SavePrim(assetPrim, Path.Combine(primsPath, "Primitive_" + assetPrim.Parent.ID + ".xml")); CollectTextures(assetPrim.Parent, textureList); if (assetPrim.Children != null) { foreach (PrimObject child in assetPrim.Children) CollectTextures(child, textureList); } } SaveAssets(manager, AssetType.Texture, new List<UUID>(textureList.Keys), assetsPath); } catch { } }
public static void SaveAssets(AssetManager assetManager, AssetType assetType, IList<UUID> assets, string assetsPath) { int count = 0; List<UUID> remainingTextures = new List<UUID>(assets); AutoResetEvent AllPropertiesReceived = new AutoResetEvent(false); for (int i = 0; i < assets.Count; i++) { UUID texture = assets[i]; if(assetType == AssetType.Texture) { assetManager.RequestImage(texture, (state, assetTexture) => { string extension = string.Empty; if (assetTexture == null) { Console.WriteLine("Missing asset " + texture); return; } if (ArchiveConstants.ASSET_TYPE_TO_EXTENSION.ContainsKey(assetType)) extension = ArchiveConstants.ASSET_TYPE_TO_EXTENSION[assetType]; File.WriteAllBytes(Path.Combine(assetsPath, texture.ToString() + extension), assetTexture.AssetData); remainingTextures.Remove(assetTexture.AssetID); if (remainingTextures.Count == 0) AllPropertiesReceived.Set(); ++count; }); } else { assetManager.RequestAsset(texture, assetType, false, (transfer, asset) => { string extension = string.Empty; if (asset == null) { Console.WriteLine("Missing asset " + texture); return; } if (ArchiveConstants.ASSET_TYPE_TO_EXTENSION.ContainsKey(assetType)) extension = ArchiveConstants.ASSET_TYPE_TO_EXTENSION[assetType]; File.WriteAllBytes(Path.Combine(assetsPath, texture.ToString() + extension), asset.AssetData); remainingTextures.Remove(asset.AssetID); if (remainingTextures.Count == 0) AllPropertiesReceived.Set(); ++count; }); } Thread.Sleep(200); if (i % 5 == 0) Thread.Sleep(250); } AllPropertiesReceived.WaitOne(5000 + 350 * assets.Count); Logger.Log("Copied " + count + " textures to the asset archive folder", Helpers.LogLevel.Info); }
// FIXME: Create a class-level appearance thread so multiple threads can't be launched /// <summary> /// Default constructor /// </summary> /// <param name="client">This agents <seealso cref="OpenMetaverse.GridClient"/> Object</param> /// <param name="assets">Reference to an AssetManager object</param> public AppearanceManager(GridClient client, AssetManager assets) { Client = client; Assets = assets; // Initialize AgentTextures to zero UUIDs for (int i = 0; i < AgentTextures.Length; i++) AgentTextures[i] = UUID.Zero; Client.Network.RegisterCallback(PacketType.AgentWearablesUpdate, new NetworkManager.PacketCallback(AgentWearablesUpdateHandler)); Client.Network.RegisterCallback(PacketType.AgentCachedTextureResponse, new NetworkManager.PacketCallback(AgentCachedTextureResponseHandler)); Client.Network.RegisterCallback(PacketType.RebakeAvatarTextures,new NetworkManager.PacketCallback(RebakeAvatarTexturesHandler)); Client.Network.OnDisconnected += new NetworkManager.DisconnectedCallback(Network_OnDisconnected); }
/// <summary> /// Default constructor /// </summary> public GridClient() { // Initialise SmartThreadPool when using mono if (Type.GetType("Mono.Runtime") != null) { WorkPool.Init(true); } // These are order-dependant Network = new NetworkManager(this); Settings = new Settings(this); Parcels = new ParcelManager(this); Self = new AgentManager(this); Avatars = new AvatarManager(this); Estate = new EstateTools(this); Friends = new FriendsManager(this); Grid = new GridManager(this); Objects = new ObjectManager(this); Groups = new GroupManager(this); Assets = new AssetManager(this); Appearance = new AppearanceManager(this); Inventory = new InventoryManager(this); Directory = new DirectoryManager(this); Terrain = new TerrainManager(this); Sound = new SoundManager(this); Throttle = new AgentThrottle(this); Stats = new OpenMetaverse.Stats.UtilizationStatistics(); }
/// <summary> /// Default constructor, Instantiates a new copy of the TexturePipeline class /// </summary> /// <param name="client">Reference to the instantiated <see cref="GridClient"/> object</param> public TexturePipeline(LoggerInstance log, NetworkManager network, AssetManager assets) { _Log = log; _Network = network; _Assets = assets; maxTextureRequests = _Assets.MaxConcurrentTextureDownloads; resetEvents = new AutoResetEvent[maxTextureRequests]; threadpoolSlots = new int[maxTextureRequests]; _Transfers = new Dictionary<UUID, TaskInfo>(); // Pre-configure autoreset events and threadpool slots for (int i = 0; i < maxTextureRequests; i++) { resetEvents[i] = new AutoResetEvent(true); threadpoolSlots[i] = -1; } // Handle client connected and disconnected events _Network.OnConnected += delegate { Startup(); }; _Network.OnDisconnected += delegate { Shutdown(); }; // Instantiate master thread that manages the request pool downloadMaster = new Thread(DownloadThread); downloadMaster.Name = "TexturePipeline"; downloadMaster.IsBackground = true; RefreshDownloadsTimer.Elapsed += RefreshDownloadsTimer_Elapsed; }
/// <summary> /// Constructor for EstateTools class /// </summary> /// <param name="client"></param> public EstateTools(LoggerInstance log, NetworkManager network, AssetManager assets) { GroundTextures = new GroundTextureSettings(); GroundTextureLimits = new GroundTextureHeightSettings(); Log = log; Network = network; Assets = assets; Network.RegisterCallback(PacketType.LandStatReply, new NetworkManager.PacketCallback(LandStatReplyHandler)); Network.RegisterCallback(PacketType.EstateOwnerMessage, new NetworkManager.PacketCallback(EstateOwnerMessageHandler)); Network.RegisterCallback(PacketType.EstateCovenantReply, new NetworkManager.PacketCallback(EstateCovenantReplyHandler)); }
/// <summary> /// Default constructor /// </summary> /// <param name="client">Reference to the GridClient object</param> public InventoryManager(LoggerInstance log, NetworkManager network, AgentManager self, AssetManager assets) { _Log = log; _Network = network; _Assets = assets; _Self = self; _Network.RegisterCallback(PacketType.UpdateCreateInventoryItem, new NetworkManager.PacketCallback(UpdateCreateInventoryItemHandler)); _Network.RegisterCallback(PacketType.SaveAssetIntoInventory, new NetworkManager.PacketCallback(SaveAssetIntoInventoryHandler)); _Network.RegisterCallback(PacketType.BulkUpdateInventory, new NetworkManager.PacketCallback(BulkUpdateInventoryHandler)); _Network.RegisterCallback(PacketType.MoveInventoryItem, new NetworkManager.PacketCallback(MoveInventoryItemHandler)); _Network.RegisterCallback(PacketType.InventoryDescendents, new NetworkManager.PacketCallback(InventoryDescendentsHandler)); _Network.RegisterCallback(PacketType.FetchInventoryReply, new NetworkManager.PacketCallback(FetchInventoryReplyHandler)); _Network.RegisterCallback(PacketType.ReplyTaskInventory, new NetworkManager.PacketCallback(ReplyTaskInventoryHandler)); _Network.RegisterEventCallback("ScriptRunningReply", new Caps.EventQueueCallback(ScriptRunningReplyMessageHandler)); // Watch for inventory given to us through instant message _Self.OnInstantMessage += new AgentManager.InstantMessageCallback(Self_OnInstantMessage); // Register extra parameters with login and parse the inventory data that comes back _Network.RegisterLoginResponseCallback( new NetworkManager.LoginResponseCallback(Network_OnLoginResponse), new string[] { "inventory-root", "inventory-skeleton", "inventory-lib-root", "inventory-lib-owner", "inventory-skel-lib"}); }
/// <summary> /// Default constructor /// </summary> public GridClient() { // These are order-dependant Log = new LoggerInstance(); Network = new NetworkManager(Log); Terrain = new TerrainManager(Log, Network); Parcels = new ParcelManager(Log, Network, Terrain); Self = new AgentManager(Log, Network, Grid); Avatars = new AvatarManager(Log, Network); Friends = new FriendsManager(Log, Network, Inventory, Self, Avatars); Grid = new GridManager(Log, Network); Objects = new ObjectManager(Log, Network, Self); Groups = new GroupManager(Log, Network, Self); Assets = new AssetManager(Log, Network); Estate = new EstateTools(Log, Network, Assets); Appearance = new AppearanceManager(Log, Network, Inventory, Assets, Objects, Self); Inventory = new InventoryManager(Log, Network, Self, Assets); Directory = new DirectoryManager(Log, Network); Sound = new SoundManager(Log, Network, Self); Throttle = new AgentThrottle(Network); Settings = new Settings(this); //if (Settings.ENABLE_INVENTORY_STORE) // InventoryStore = new Inventory(Inventory); //if (Settings.ENABLE_LIBRARY_STORE) // LibraryStore = new Inventory(Inventory); //Inventory.OnSkeletonsReceived += // delegate(InventoryManager manager) // { // if (Settings.ENABLE_INVENTORY_STORE) // InventoryStore.InitializeFromSkeleton(Inventory.InventorySkeleton); // if (Settings.ENABLE_LIBRARY_STORE) // LibraryStore.InitializeFromSkeleton(Inventory.LibrarySkeleton); // }; Network.RegisterLoginResponseCallback( delegate(bool loginSuccess, bool redirect, string message, string reason, LoginResponseData replyData) { if (loginSuccess) Log.BotName = replyData.FirstName + " " + replyData.LastName; }); }
/// <summary> /// Default constructor /// </summary> public GridClient() { // These are order-dependant Network = new NetworkManager(this); Settings = new Settings(this); Parcels = new ParcelManager(this); Self = new AgentManager(this); Avatars = new AvatarManager(this); Estate = new EstateTools(this); Friends = new FriendsManager(this); Grid = new GridManager(this); Objects = new ObjectManager(this); Groups = new GroupManager(this); Assets = new AssetManager(this); Appearance = new AppearanceManager(this); Inventory = new InventoryManager(this); Directory = new DirectoryManager(this); Terrain = new TerrainManager(this); Sound = new SoundManager(this); Throttle = new AgentThrottle(this); Stats = new OpenMetaverse.Stats.UtilizationStatistics(); }
public void Dispose() { if (Assets != null) { Assets.Dispose(); Assets = null; } }
/// <summary> /// Default constructor /// </summary> public GridClient() { #if USE_SMART_THREAD_POOL ThreadPool = new SmartThreadPool(-1, 25); #endif // These are order-dependant #if USE_SMART_THREAD_POOL Network = new NetworkManager(this, ThreadPool); #else Network = new NetworkManager(this); #endif Settings = new Settings(this); #if USE_SMART_THREAD_POOL Parcels = new ParcelManager(this, ThreadPool); #else Parcels = new ParcelManager(this); #endif Self = new AgentManager(this); Avatars = new AvatarManager(this); Friends = new FriendsManager(this); Grid = new GridManager(this); Objects = new ObjectManager(this); Groups = new GroupManager(this); #if USE_SMART_THREAD_POOL Assets = new AssetManager(this, ThreadPool); #else Assets = new AssetManager(this); #endif Appearance = new AppearanceManager(this, Assets); Inventory = new InventoryManager(this); Directory = new DirectoryManager(this); Terrain = new TerrainManager(this); Sound = new SoundManager(this); Throttle = new AgentThrottle(this); //if (Settings.ENABLE_INVENTORY_STORE) // InventoryStore = new Inventory(Inventory); //if (Settings.ENABLE_LIBRARY_STORE) // LibraryStore = new Inventory(Inventory); //Inventory.OnSkeletonsReceived += // delegate(InventoryManager manager) // { // if (Settings.ENABLE_INVENTORY_STORE) // InventoryStore.InitializeFromSkeleton(Inventory.InventorySkeleton); // if (Settings.ENABLE_LIBRARY_STORE) // LibraryStore.InitializeFromSkeleton(Inventory.LibrarySkeleton); // }; }