Merge branch 'master' of git://opensimulator.org/git/opensim
						commit
						9d214d4903
					
				| 
						 | 
				
			
			@ -1,170 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * 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 OpenSimulator Project 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 THE DEVELOPERS ``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 THE CONTRIBUTORS 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 System.Reflection;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using log4net;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Framework.Console;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.TestSuite
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Thread/Bot manager for the application
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class BotManager
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        protected CommandConsole m_console;
 | 
			
		||||
        protected List<PhysicsBot> m_lBot;
 | 
			
		||||
        protected Thread[] m_td;
 | 
			
		||||
        protected bool m_verbose = true;
 | 
			
		||||
        protected Random somthing = new Random(Environment.TickCount);
 | 
			
		||||
        protected int numbots = 0;
 | 
			
		||||
        protected IConfig Previous_config;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Constructor Creates MainConsole.Instance to take commands and provide the place to write data
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public BotManager()
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Info("In bot manager");
 | 
			
		||||
            m_lBot = new List<PhysicsBot>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Startup number of bots specified in the starting arguments
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="botcount">How many bots to start up</param>
 | 
			
		||||
        /// <param name="cs">The configuration for the bots to use</param>
 | 
			
		||||
        public void dobotStartup(int botcount, IConfig cs)
 | 
			
		||||
        {
 | 
			
		||||
            Previous_config = cs;
 | 
			
		||||
            m_td = new Thread[botcount];
 | 
			
		||||
            for (int i = 0; i < botcount; i++)
 | 
			
		||||
            {
 | 
			
		||||
                startupBot(i, cs);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add additional bots (and threads) to our bot pool
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="botcount">How Many of them to add</param>
 | 
			
		||||
        public void addbots(int botcount)
 | 
			
		||||
        {
 | 
			
		||||
            int len = m_td.Length;
 | 
			
		||||
            Thread[] m_td2 = new Thread[len + botcount];
 | 
			
		||||
            for (int i = 0; i < len; i++)
 | 
			
		||||
            {
 | 
			
		||||
                m_td2[i] = m_td[i];
 | 
			
		||||
            }
 | 
			
		||||
            m_td = m_td2;
 | 
			
		||||
            int newlen = len + botcount;
 | 
			
		||||
            for (int i = len; i < newlen; i++)
 | 
			
		||||
            {
 | 
			
		||||
                startupBot(i, Previous_config);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This starts up the bot and stores the thread for the bot in the thread array
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pos">The position in the thread array to stick the bot's thread</param>
 | 
			
		||||
        /// <param name="cs">Configuration of the bot</param>
 | 
			
		||||
        public void startupBot(int pos, IConfig cs)
 | 
			
		||||
        {
 | 
			
		||||
            PhysicsBot pb = new PhysicsBot(cs);
 | 
			
		||||
 | 
			
		||||
            pb.OnConnected += handlebotEvent;
 | 
			
		||||
            pb.OnDisconnected += handlebotEvent;
 | 
			
		||||
            if (cs.GetString("firstname", "random") == "random") pb.firstname = CreateRandomName();
 | 
			
		||||
            if (cs.GetString("lastname", "random") == "random") pb.lastname = CreateRandomName();
 | 
			
		||||
 | 
			
		||||
            m_td[pos] = new Thread(pb.startup);
 | 
			
		||||
            m_td[pos].Name = "CampBot_" + pos;
 | 
			
		||||
            m_td[pos].IsBackground = true;
 | 
			
		||||
            m_td[pos].Start();
 | 
			
		||||
            m_lBot.Add(pb);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a random name for the bot
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        private string CreateRandomName()
 | 
			
		||||
        {
 | 
			
		||||
            string returnstring = "";
 | 
			
		||||
            string chars = "abcdefghijklmnopqrstuvwxyz0123456789";
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < 7; i++)
 | 
			
		||||
            {
 | 
			
		||||
                returnstring += chars.Substring(somthing.Next(chars.Length),1);
 | 
			
		||||
            }
 | 
			
		||||
            return returnstring;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// High level connnected/disconnected events so we can keep track of our threads by proxy
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="callbot"></param>
 | 
			
		||||
        /// <param name="eventt"></param>
 | 
			
		||||
        public void handlebotEvent(PhysicsBot callbot, EventType eventt)
 | 
			
		||||
        {
 | 
			
		||||
            switch (eventt)
 | 
			
		||||
            {
 | 
			
		||||
                case EventType.CONNECTED:
 | 
			
		||||
                    m_log.Info("[ " + callbot.firstname + " " + callbot.lastname + "]: Connected");
 | 
			
		||||
                    numbots++;
 | 
			
		||||
                    break;
 | 
			
		||||
                case EventType.DISCONNECTED:
 | 
			
		||||
                    m_log.Info("[ " + callbot.firstname + " " + callbot.lastname + "]: Disconnected");
 | 
			
		||||
                    m_td[m_lBot.IndexOf(callbot)].Abort();
 | 
			
		||||
                    numbots--;
 | 
			
		||||
                    if (numbots > 1)
 | 
			
		||||
                        Environment.Exit(0);
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Shutting down all bots
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void doBotShutdown()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (PhysicsBot pb in m_lBot)
 | 
			
		||||
            {
 | 
			
		||||
                pb.shutdown();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,98 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * 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 OpenSimulator Project 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 THE DEVELOPERS ``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 THE CONTRIBUTORS 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 Nini.Config;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.TestSuite
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Event Types from the BOT.  Add new events here
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public enum EventType : int
 | 
			
		||||
    {
 | 
			
		||||
        NONE = 0,
 | 
			
		||||
        CONNECTED = 1,
 | 
			
		||||
        DISCONNECTED = 2
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class TestSuite
 | 
			
		||||
    {
 | 
			
		||||
        public static void Main(string[] args)
 | 
			
		||||
        {
 | 
			
		||||
            // TODO: config parser
 | 
			
		||||
 | 
			
		||||
            // TODO: load tests from addings
 | 
			
		||||
 | 
			
		||||
            // TODO: create base bot cloud for use in tests
 | 
			
		||||
 | 
			
		||||
            IConfig config = ParseConfig(args);
 | 
			
		||||
            if (config.Get("help") != null || config.Get("loginuri") == null)
 | 
			
		||||
            {
 | 
			
		||||
                Help();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // TODO: unused: int botcount = config.GetInt("botcount", 1);
 | 
			
		||||
 | 
			
		||||
                // BotManager bm = new BotManager();
 | 
			
		||||
 | 
			
		||||
                Utils.TestPass("Completed Startup");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static IConfig ParseConfig(String[] args)
 | 
			
		||||
        {
 | 
			
		||||
            //Set up our nifty config..  thanks to nini
 | 
			
		||||
            ArgvConfigSource cs = new ArgvConfigSource(args);
 | 
			
		||||
 | 
			
		||||
            // TODO: unused: cs.AddSwitch("Startup", "botcount","n");
 | 
			
		||||
            cs.AddSwitch("Startup", "loginuri","l");
 | 
			
		||||
            cs.AddSwitch("Startup", "firstname");
 | 
			
		||||
            cs.AddSwitch("Startup", "lastname");
 | 
			
		||||
            cs.AddSwitch("Startup", "password");
 | 
			
		||||
            cs.AddSwitch("Startup", "help","h");
 | 
			
		||||
 | 
			
		||||
            IConfig ol = cs.Configs["Startup"];
 | 
			
		||||
            return ol;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static void Help()
 | 
			
		||||
        {
 | 
			
		||||
            Console.WriteLine(
 | 
			
		||||
                "usage: pCampBot <-loginuri loginuri> [OPTIONS]\n" +
 | 
			
		||||
                "Spawns a set of bots to test an OpenSim region\n\n" +
 | 
			
		||||
                "  -l, -loginuri      loginuri for sim to log into (required)\n" +
 | 
			
		||||
                // TODO: unused: "  -n, -botcount      number of bots to start (default: 1)\n" +
 | 
			
		||||
                "  -firstname         first name for the bot(s) (default: random string)\n" +
 | 
			
		||||
                "  -lastname          lastname for the bot(s) (default: random string)\n" +
 | 
			
		||||
                "  -password          password for the bots(s) (default: random string)\n" +
 | 
			
		||||
                "  -h, -help          show this message"
 | 
			
		||||
                );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,196 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * 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 OpenSimulator Project 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 THE DEVELOPERS ``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 THE CONTRIBUTORS 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.IO;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Timers;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Framework.Console;
 | 
			
		||||
using Timer=System.Timers.Timer;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.TestSuite
 | 
			
		||||
{
 | 
			
		||||
    public class PhysicsBot
 | 
			
		||||
    {
 | 
			
		||||
        public delegate void AnEvent(PhysicsBot callbot, EventType someevent); // event delegate for bot events
 | 
			
		||||
        public IConfig startupConfig; // bot config, passed from BotManager
 | 
			
		||||
 | 
			
		||||
        public string firstname;
 | 
			
		||||
        public string lastname;
 | 
			
		||||
        public string password;
 | 
			
		||||
        public string loginURI;
 | 
			
		||||
 | 
			
		||||
        public event AnEvent OnConnected;
 | 
			
		||||
        public event AnEvent OnDisconnected;
 | 
			
		||||
 | 
			
		||||
        protected Timer m_action; // Action Timer
 | 
			
		||||
 | 
			
		||||
        protected Random somthing = new Random(Environment.TickCount);// We do stuff randomly here
 | 
			
		||||
 | 
			
		||||
        //New instance of a SecondLife client
 | 
			
		||||
        public GridClient client = new GridClient();
 | 
			
		||||
 | 
			
		||||
        protected string[] talkarray;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="bsconfig">nini config for the bot</param>
 | 
			
		||||
        public PhysicsBot(IConfig bsconfig)
 | 
			
		||||
        {
 | 
			
		||||
            startupConfig = bsconfig;
 | 
			
		||||
            readconfig();
 | 
			
		||||
            talkarray = readexcuses();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //We do our actions here.  This is where one would
 | 
			
		||||
        //add additional steps and/or things the bot should do
 | 
			
		||||
 | 
			
		||||
        void m_action_Elapsed(object sender, ElapsedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            //client.Throttle.Task = 500000f;
 | 
			
		||||
            //client.Throttle.Set();
 | 
			
		||||
            int walkorrun = somthing.Next(4); // Randomize between walking and running. The greater this number,
 | 
			
		||||
                                              // the greater the bot's chances to walk instead of run.
 | 
			
		||||
            if (walkorrun == 0)
 | 
			
		||||
            {
 | 
			
		||||
                client.Self.Movement.AlwaysRun = true;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                client.Self.Movement.AlwaysRun = false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // TODO: unused: Vector3 pos = client.Self.SimPosition;
 | 
			
		||||
            Vector3 newpos = new Vector3(somthing.Next(255), somthing.Next(255), somthing.Next(255));
 | 
			
		||||
            client.Self.Movement.TurnToward(newpos);
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < 2000; i++)
 | 
			
		||||
            {
 | 
			
		||||
                client.Self.Movement.AtPos = true;
 | 
			
		||||
                Thread.Sleep(somthing.Next(25, 75)); // Makes sure the bots keep walking for this time.
 | 
			
		||||
            }
 | 
			
		||||
            client.Self.Jump(true);
 | 
			
		||||
 | 
			
		||||
            string randomf = talkarray[somthing.Next(talkarray.Length)];
 | 
			
		||||
            if (talkarray.Length > 1 && randomf.Length > 1)
 | 
			
		||||
                client.Self.Chat(randomf, 0, ChatType.Normal);
 | 
			
		||||
 | 
			
		||||
            //Thread.Sleep(somthing.Next(1, 10)); // Apparently its better without it right now.
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Read the Nini config and initialize
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void readconfig()
 | 
			
		||||
        {
 | 
			
		||||
            firstname = startupConfig.GetString("firstname", "random");
 | 
			
		||||
            lastname = startupConfig.GetString("lastname", "random");
 | 
			
		||||
            password = startupConfig.GetString("password", "12345");
 | 
			
		||||
            loginURI = startupConfig.GetString("loginuri");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tells LibSecondLife to logout and disconnect.  Raises the disconnect events once it finishes.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void shutdown()
 | 
			
		||||
        {
 | 
			
		||||
            client.Network.Logout();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This is the bot startup loop.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void startup()
 | 
			
		||||
        {
 | 
			
		||||
            client.Settings.LOGIN_SERVER = loginURI;
 | 
			
		||||
            client.Network.LoginProgress += this.Network_LoginProgress;
 | 
			
		||||
            client.Network.SimConnected += this.Network_SimConnected;
 | 
			
		||||
            client.Network.Disconnected += this.Network_OnDisconnected;
 | 
			
		||||
            if (client.Network.Login(firstname, lastname, password, "pCampBot", "Your name"))
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                if (OnConnected != null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_action = new Timer(somthing.Next(1000, 10000));
 | 
			
		||||
                    m_action.Elapsed += new ElapsedEventHandler(m_action_Elapsed);
 | 
			
		||||
                    m_action.Start();
 | 
			
		||||
                    OnConnected(this, EventType.CONNECTED);
 | 
			
		||||
                    client.Self.Jump(true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                MainConsole.Instance.Output(firstname + " " + lastname + "Can't login: " + client.Network.LoginMessage);
 | 
			
		||||
                if (OnDisconnected != null)
 | 
			
		||||
                {
 | 
			
		||||
                    OnDisconnected(this, EventType.DISCONNECTED);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Network_LoginProgress(object sender, LoginProgressEventArgs args)
 | 
			
		||||
        {
 | 
			
		||||
            if (args.Status == LoginStatus.Success)
 | 
			
		||||
            {
 | 
			
		||||
                if (OnConnected != null)
 | 
			
		||||
                {
 | 
			
		||||
                    OnConnected(this, EventType.CONNECTED);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Network_SimConnected(object sender, SimConnectedEventArgs args)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Network_OnDisconnected(object sender, DisconnectedEventArgs args)
 | 
			
		||||
        {
 | 
			
		||||
            if (OnDisconnected != null)
 | 
			
		||||
            {
 | 
			
		||||
                OnDisconnected(this, EventType.DISCONNECTED);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string[] readexcuses()
 | 
			
		||||
        {
 | 
			
		||||
            string allexcuses = "";
 | 
			
		||||
 | 
			
		||||
            string file = Path.Combine(Util.configDir(), "pCampBotSentences.txt");
 | 
			
		||||
            if (File.Exists(file))
 | 
			
		||||
            {
 | 
			
		||||
                StreamReader csr = File.OpenText(file);
 | 
			
		||||
                allexcuses = csr.ReadToEnd();
 | 
			
		||||
                csr.Close();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return allexcuses.Split(Environment.NewLine.ToCharArray());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +0,0 @@
 | 
			
		|||
OpenSim Test Suite
 | 
			
		||||
------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
The eventual goal of the OpenSim Test Suite is to provide a framework
 | 
			
		||||
and a set of tests to do system level regression testing of OpenSim.
 | 
			
		||||
In short:
 | 
			
		||||
 | 
			
		||||
OpenSim Test Suite will have Test Modules (Mono Addins?) that will
 | 
			
		||||
verify certain paths in the code.  Some early modules may be (subject
 | 
			
		||||
to change):
 | 
			
		||||
 | 
			
		||||
 * Login Tests
 | 
			
		||||
    - Attempt to Log in 1, 5, 20 bots.  
 | 
			
		||||
 * Basic Walk Tests
 | 
			
		||||
    - Attempt to Log in and move about in well known tracks
 | 
			
		||||
    - Repeat with 5, 20 bots
 | 
			
		||||
 * Basic Construct Tests
 | 
			
		||||
    - Construct Simple Objects in World
 | 
			
		||||
    - Ensure bots can see other objects constructed
 | 
			
		||||
 * Basic Asset Tests
 | 
			
		||||
    - Construct Simple Objects in World with Textures
 | 
			
		||||
    - Pull Objects and Textures
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -1,81 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * 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 OpenSimulator Project 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 THE DEVELOPERS ``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 THE CONTRIBUTORS 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;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.TestSuite
 | 
			
		||||
{
 | 
			
		||||
    public class Utils
 | 
			
		||||
    {
 | 
			
		||||
        enum Result
 | 
			
		||||
        {
 | 
			
		||||
            Fail = 0,
 | 
			
		||||
            Pass = 1,
 | 
			
		||||
            Skip = 3
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static String ResultToString(Result r)
 | 
			
		||||
        {
 | 
			
		||||
            if (r == Result.Pass)
 | 
			
		||||
            {
 | 
			
		||||
                return "PASS";
 | 
			
		||||
            }
 | 
			
		||||
            else if (r == Result.Fail)
 | 
			
		||||
            {
 | 
			
		||||
                return "FAIL";
 | 
			
		||||
            }
 | 
			
		||||
            else if (r == Result.Skip)
 | 
			
		||||
            {
 | 
			
		||||
                return "SKIP";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return "UNKNOWN";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static void TestResult(Result r, String msg)
 | 
			
		||||
        {
 | 
			
		||||
            Console.WriteLine("[{0}]: {1}", ResultToString(r), msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void TestFail(String msg)
 | 
			
		||||
        {
 | 
			
		||||
            TestResult(Result.Fail, msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void TestPass(String msg)
 | 
			
		||||
        {
 | 
			
		||||
            TestResult(Result.Pass, msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void TestSkip(String msg)
 | 
			
		||||
        {
 | 
			
		||||
            TestResult(Result.Skip, msg);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -53,13 +53,20 @@ namespace pCampBot
 | 
			
		|||
        protected bool m_verbose = true;
 | 
			
		||||
        protected Random somthing = new Random(Environment.TickCount);
 | 
			
		||||
        protected int numbots = 0;
 | 
			
		||||
        private IConfig Config;
 | 
			
		||||
        public IConfig Config { get; private set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Track the assets we have and have not received so we don't endlessly repeat requests.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Dictionary<UUID, bool> AssetsReceived { get; private set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Constructor Creates MainConsole.Instance to take commands and provide the place to write data
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public BotManager()
 | 
			
		||||
        {
 | 
			
		||||
            AssetsReceived = new Dictionary<UUID, bool>();
 | 
			
		||||
 | 
			
		||||
            m_console = CreateConsole();
 | 
			
		||||
            MainConsole.Instance = m_console;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -113,7 +120,7 @@ namespace pCampBot
 | 
			
		|||
            for (int i = 0; i < botcount; i++)
 | 
			
		||||
            {
 | 
			
		||||
                string lastName = string.Format("{0}_{1}", lastNameStem, i);
 | 
			
		||||
                startupBot(i, cs, firstName, lastName, password, loginUri);
 | 
			
		||||
                startupBot(i, this, firstName, lastName, password, loginUri);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,9 +153,9 @@ namespace pCampBot
 | 
			
		|||
        /// <param name="lastName">Last name</param>
 | 
			
		||||
        /// <param name="password">Password</param>
 | 
			
		||||
        /// <param name="loginUri">Login URI</param>
 | 
			
		||||
        public void startupBot(int pos, IConfig cs, string firstName, string lastName, string password, string loginUri)
 | 
			
		||||
        public void startupBot(int pos, BotManager bm, string firstName, string lastName, string password, string loginUri)
 | 
			
		||||
        {
 | 
			
		||||
            PhysicsBot pb = new PhysicsBot(cs, firstName, lastName, password, loginUri);
 | 
			
		||||
            PhysicsBot pb = new PhysicsBot(bm, firstName, lastName, password, loginUri);
 | 
			
		||||
 | 
			
		||||
            pb.OnConnected += handlebotEvent;
 | 
			
		||||
            pb.OnDisconnected += handlebotEvent;
 | 
			
		||||
| 
						 | 
				
			
			@ -165,18 +172,20 @@ namespace pCampBot
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <param name="callbot"></param>
 | 
			
		||||
        /// <param name="eventt"></param>
 | 
			
		||||
        public void handlebotEvent(PhysicsBot callbot, EventType eventt)
 | 
			
		||||
        private void handlebotEvent(PhysicsBot callbot, EventType eventt)
 | 
			
		||||
        {
 | 
			
		||||
            switch (eventt)
 | 
			
		||||
            {
 | 
			
		||||
                case EventType.CONNECTED:
 | 
			
		||||
                    m_log.Info("[" + callbot.FirstName + " " + callbot.LastName + "]: Connected");
 | 
			
		||||
                    numbots++;
 | 
			
		||||
//                m_log.InfoFormat("NUMBOTS {0}", numbots);
 | 
			
		||||
                    break;
 | 
			
		||||
                case EventType.DISCONNECTED:
 | 
			
		||||
                    m_log.Info("[" + callbot.FirstName + " " + callbot.LastName + "]: Disconnected");
 | 
			
		||||
                    m_td[m_lBot.IndexOf(callbot)].Abort();
 | 
			
		||||
                    numbots--;
 | 
			
		||||
//                m_log.InfoFormat("NUMBOTS {0}", numbots);
 | 
			
		||||
                    if (numbots <= 0)
 | 
			
		||||
                        Environment.Exit(0);
 | 
			
		||||
                    break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,21 +29,27 @@ using System;
 | 
			
		|||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Timers;
 | 
			
		||||
using log4net;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenMetaverse.Assets;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Framework.Console;
 | 
			
		||||
using Timer=System.Timers.Timer;
 | 
			
		||||
using Timer = System.Timers.Timer;
 | 
			
		||||
 | 
			
		||||
namespace pCampBot
 | 
			
		||||
{
 | 
			
		||||
    public class PhysicsBot
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        public delegate void AnEvent(PhysicsBot callbot, EventType someevent); // event delegate for bot events
 | 
			
		||||
        public IConfig startupConfig; // bot config, passed from BotManager
 | 
			
		||||
 | 
			
		||||
        public BotManager BotManager { get; private set; }
 | 
			
		||||
        private IConfig startupConfig; // bot config, passed from BotManager
 | 
			
		||||
 | 
			
		||||
        public string FirstName { get; private set; }
 | 
			
		||||
        public string LastName { get; private set; }
 | 
			
		||||
| 
						 | 
				
			
			@ -71,19 +77,21 @@ namespace pCampBot
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// Constructor
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="bsconfig"></param>
 | 
			
		||||
        /// <param name="bm"></param>
 | 
			
		||||
        /// <param name="firstName"></param>
 | 
			
		||||
        /// <param name="lastName"></param>
 | 
			
		||||
        /// <param name="password"></param>
 | 
			
		||||
        /// <param name="loginUri"></param>
 | 
			
		||||
        public PhysicsBot(IConfig bsconfig, string firstName, string lastName, string password, string loginUri)
 | 
			
		||||
        public PhysicsBot(BotManager bm, string firstName, string lastName, string password, string loginUri)
 | 
			
		||||
        {
 | 
			
		||||
            FirstName = firstName;
 | 
			
		||||
            LastName = lastName;
 | 
			
		||||
            Name = string.Format("{0} {1}", FirstName, LastName);
 | 
			
		||||
            Password = password;
 | 
			
		||||
            LoginUri = loginUri;
 | 
			
		||||
            startupConfig = bsconfig;
 | 
			
		||||
 | 
			
		||||
            BotManager = bm;
 | 
			
		||||
            startupConfig = bm.Config;
 | 
			
		||||
            readconfig();
 | 
			
		||||
            talkarray = readexcuses();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -162,9 +170,9 @@ namespace pCampBot
 | 
			
		|||
            client.Throttle.Total = 400000;
 | 
			
		||||
            client.Network.LoginProgress += this.Network_LoginProgress;
 | 
			
		||||
            client.Network.SimConnected += this.Network_SimConnected;
 | 
			
		||||
//            client.Network.Disconnected += this.Network_OnDisconnected;
 | 
			
		||||
            client.Network.Disconnected += this.Network_OnDisconnected;
 | 
			
		||||
            client.Objects.ObjectUpdate += Objects_NewPrim;
 | 
			
		||||
            //client.Assets.OnAssetReceived += Asset_ReceivedCallback;
 | 
			
		||||
 | 
			
		||||
            if (client.Network.Login(FirstName, LastName, Password, "pCampBot", "Your name"))
 | 
			
		||||
            {
 | 
			
		||||
                if (OnConnected != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -227,7 +235,7 @@ namespace pCampBot
 | 
			
		|||
                {
 | 
			
		||||
                    if (asset.Decode())
 | 
			
		||||
                    {
 | 
			
		||||
                       File.WriteAllBytes(Path.Combine(saveDir, String.Format("{1}.{0}",
 | 
			
		||||
                        File.WriteAllBytes(Path.Combine(saveDir, String.Format("{1}.{0}",
 | 
			
		||||
                        asset.AssetType.ToString().ToLower(),
 | 
			
		||||
                        asset.WearableType)), asset.AssetData);
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -377,6 +385,7 @@ namespace pCampBot
 | 
			
		|||
 | 
			
		||||
        public void Network_OnDisconnected(object sender, DisconnectedEventArgs args)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.ErrorFormat("Fired Network_OnDisconnected");
 | 
			
		||||
            if (OnDisconnected != null)
 | 
			
		||||
            {
 | 
			
		||||
                OnDisconnected(this, EventType.DISCONNECTED);
 | 
			
		||||
| 
						 | 
				
			
			@ -393,40 +402,55 @@ namespace pCampBot
 | 
			
		|||
                {
 | 
			
		||||
                    if (prim.Textures.DefaultTexture.TextureID != UUID.Zero)
 | 
			
		||||
                    {
 | 
			
		||||
                        client.Assets.RequestImage(prim.Textures.DefaultTexture.TextureID, ImageType.Normal, Asset_TextureCallback_Texture);
 | 
			
		||||
                        GetTexture(prim.Textures.DefaultTexture.TextureID);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < prim.Textures.FaceTextures.Length; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (prim.Textures.FaceTextures[i] != null)
 | 
			
		||||
                        UUID textureID = prim.Textures.FaceTextures[i].TextureID;
 | 
			
		||||
 | 
			
		||||
                        if (textureID != null && textureID != UUID.Zero)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (prim.Textures.FaceTextures[i].TextureID != UUID.Zero)
 | 
			
		||||
                            {
 | 
			
		||||
                                client.Assets.RequestImage(prim.Textures.FaceTextures[i].TextureID, ImageType.Normal, Asset_TextureCallback_Texture);
 | 
			
		||||
                            }
 | 
			
		||||
                            GetTexture(textureID);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (prim.Sculpt.SculptTexture != UUID.Zero)
 | 
			
		||||
                {
 | 
			
		||||
                    client.Assets.RequestImage(prim.Sculpt.SculptTexture, ImageType.Normal, Asset_TextureCallback_Texture);
 | 
			
		||||
                    GetTexture(prim.Sculpt.SculptTexture);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GetTexture(UUID textureID)
 | 
			
		||||
        {
 | 
			
		||||
            lock (BotManager.AssetsReceived)
 | 
			
		||||
            {
 | 
			
		||||
                // Don't request assets more than once.
 | 
			
		||||
                if (BotManager.AssetsReceived.ContainsKey(textureID))
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                BotManager.AssetsReceived[textureID] = false;
 | 
			
		||||
                client.Assets.RequestImage(textureID, ImageType.Normal, Asset_TextureCallback_Texture);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        public void Asset_TextureCallback_Texture(TextureRequestState state, AssetTexture assetTexture)
 | 
			
		||||
        {
 | 
			
		||||
            //TODO: Implement texture saving and applying
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public void Asset_ReceivedCallback(AssetDownload transfer,Asset asset)
 | 
			
		||||
        public void Asset_ReceivedCallback(AssetDownload transfer, Asset asset)
 | 
			
		||||
        {
 | 
			
		||||
            if (wear == "save")
 | 
			
		||||
            {
 | 
			
		||||
                SaveAsset((AssetWearable) asset);
 | 
			
		||||
            }
 | 
			
		||||
            lock (BotManager.AssetsReceived)
 | 
			
		||||
                BotManager.AssetsReceived[asset.AssetID] = true;
 | 
			
		||||
 | 
			
		||||
//            if (wear == "save")
 | 
			
		||||
//            {
 | 
			
		||||
//                SaveAsset((AssetWearable) asset);
 | 
			
		||||
//            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string[] readexcuses()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										28
									
								
								prebuild.xml
								
								
								
								
							
							
						
						
									
										28
									
								
								prebuild.xml
								
								
								
								
							| 
						 | 
				
			
			@ -2549,34 +2549,6 @@
 | 
			
		|||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <!-- Test Suite -->
 | 
			
		||||
    <Project frameworkVersion="v3_5" name="OpenSim.TestSuite" path="OpenSim/TestSuite" type="Exe">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../bin/</ReferencePath>
 | 
			
		||||
      <Reference name="System"/>
 | 
			
		||||
      <Reference name="OpenMetaverseTypes" path="../../bin/"/>
 | 
			
		||||
      <Reference name="OpenMetaverse" path="../../bin/"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Servers.HttpServer"/>
 | 
			
		||||
      <Reference name="Nini" path="../../bin/"/>
 | 
			
		||||
      <Reference name="log4net" path="../../bin/"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <!-- Test Clients -->
 | 
			
		||||
    <Project frameworkVersion="v3_5" name="OpenSim.Tests.Clients.GridClient" path="OpenSim/Tests/Clients/Grid" type="Exe">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue