/* Copyright (c) OpenSim project, http://sim.opensecondlife.org/ * Copyright (c) , * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Collections.Generic; using libsecondlife; using System.Collections; using libsecondlife.Packets; using libsecondlife.AssetSystem; using System.IO; namespace OpenSim { /// /// Description of Texture_manager. /// public class TextureManager { public Dictionary textures; public ArrayList requests=new ArrayList(); //should change to a generic public ArrayList uploads=new ArrayList(); private Server server; public TextureManager(Server serve) { server=serve; textures=new Dictionary (); this.initialise(); } public void AddRequest(User_Agent_info user, LLUUID image_id) { if(!this.textures.ContainsKey(image_id)) { //not found image so send back image not in data base message ImageNotInDatabasePacket im_not=new ImageNotInDatabasePacket(); im_not.ImageID.ID=image_id; server.SendPacket(im_not,true,user); return; } TextureImage imag=this.textures[image_id]; TextureRequest req=new TextureRequest(); req.RequestUser=user; req.RequestImage=image_id; req.image_info=imag; if(imag.data.LongLength>1000) //should be bigger or smaller? { //over 1000 bytes so split up file req.num_packets=(int)imag.data.LongLength/1000; req.num_packets++; } else { req.num_packets=1; } this.requests.Add(req); } public void AddTexture(LLUUID image_id, string name, byte[] data) { } public void DoWork(ulong time) { if(this.requests.Count==0) { //no requests waiting return; } int num; //should be running in its own thread but for now is called by timer if(this.requests.Count<5) { //lower than 5 so do all of them num=this.requests.Count; } else { num=5; } TextureRequest req; for(int i=0; i