Refactored to put common classes in lbdsa71's Framework library (OpenSim.FrameWork), this is used by both OpenSim and the OGS servers
parent
56679d0f89
commit
d98ab16120
|
@ -0,0 +1,22 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Assets
|
||||||
|
{
|
||||||
|
public class AssetBase
|
||||||
|
{
|
||||||
|
public byte[] Data;
|
||||||
|
public LLUUID FullID;
|
||||||
|
public sbyte Type;
|
||||||
|
public sbyte InvType;
|
||||||
|
public string Name;
|
||||||
|
public string Description;
|
||||||
|
|
||||||
|
public AssetBase()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Utilities
|
||||||
|
{
|
||||||
|
public class BlockingQueue<T>
|
||||||
|
{
|
||||||
|
private Queue<T> _queue = new Queue<T>();
|
||||||
|
private object _queueSync = new object();
|
||||||
|
|
||||||
|
public void Enqueue(T value)
|
||||||
|
{
|
||||||
|
lock (_queueSync)
|
||||||
|
{
|
||||||
|
_queue.Enqueue(value);
|
||||||
|
Monitor.Pulse(_queueSync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Dequeue()
|
||||||
|
{
|
||||||
|
lock (_queueSync)
|
||||||
|
{
|
||||||
|
if (_queue.Count < 1)
|
||||||
|
Monitor.Wait(_queueSync);
|
||||||
|
|
||||||
|
return _queue.Dequeue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Interfaces
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of IAssetServer.
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
public interface IAssetServer
|
||||||
|
{
|
||||||
|
void SetReceiver(IAssetReceiver receiver);
|
||||||
|
void RequestAsset(LLUUID assetID, bool isTexture);
|
||||||
|
void UpdateAsset(AssetBase asset);
|
||||||
|
void UploadNewAsset(AssetBase asset);
|
||||||
|
void SetServerInfo(string ServerUrl, string ServerKey);
|
||||||
|
void Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// could change to delegate?
|
||||||
|
public interface IAssetReceiver
|
||||||
|
{
|
||||||
|
void AssetReceived(AssetBase asset, bool IsTexture);
|
||||||
|
void AssetNotFound(AssetBase asset);
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct ARequest
|
||||||
|
{
|
||||||
|
public LLUUID AssetID;
|
||||||
|
public bool IsTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public class AssetBase
|
||||||
|
{
|
||||||
|
public byte[] Data;
|
||||||
|
public LLUUID FullID;
|
||||||
|
public sbyte Type;
|
||||||
|
public sbyte InvType;
|
||||||
|
public string Name;
|
||||||
|
public string Description;
|
||||||
|
|
||||||
|
public AssetBase()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public interface IAssetPlugin
|
||||||
|
{
|
||||||
|
IAssetServer GetAssetServer();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,136 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.IO;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Interfaces
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Handles connection to Grid Servers.
|
||||||
|
/// also Sim to Sim connections?
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
public interface IGridServer
|
||||||
|
{
|
||||||
|
UUIDBlock RequestUUIDBlock();
|
||||||
|
void RequestNeighbours(); //should return a array of neighbouring regions
|
||||||
|
AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode);
|
||||||
|
bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode);
|
||||||
|
string GetName();
|
||||||
|
bool RequestConnection();
|
||||||
|
void SetServerInfo(string ServerUrl, string ServerKey);
|
||||||
|
void Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class RemoteGridBase : IGridServer
|
||||||
|
{
|
||||||
|
public abstract Dictionary<uint, agentcircuitdata> agentcircuits
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract UUIDBlock RequestUUIDBlock();
|
||||||
|
public abstract void RequestNeighbours();
|
||||||
|
public abstract AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode);
|
||||||
|
public abstract bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode);
|
||||||
|
public abstract string GetName();
|
||||||
|
public abstract bool RequestConnection();
|
||||||
|
public abstract void SetServerInfo(string ServerUrl, string ServerKey);
|
||||||
|
public abstract void Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class LocalGridBase : IGridServer
|
||||||
|
{
|
||||||
|
public abstract UUIDBlock RequestUUIDBlock();
|
||||||
|
public abstract void RequestNeighbours();
|
||||||
|
public abstract AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode);
|
||||||
|
public abstract bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode);
|
||||||
|
public abstract string GetName();
|
||||||
|
public abstract bool RequestConnection();
|
||||||
|
public abstract void SetServerInfo(string ServerUrl, string ServerKey);
|
||||||
|
public abstract void AddNewSession(Login session);
|
||||||
|
public abstract void Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct UUIDBlock
|
||||||
|
{
|
||||||
|
public LLUUID BlockStart;
|
||||||
|
public LLUUID BlockEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AuthenticateResponse
|
||||||
|
{
|
||||||
|
public bool Authorised;
|
||||||
|
public Login LoginInfo;
|
||||||
|
|
||||||
|
public AuthenticateResponse()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Login
|
||||||
|
{
|
||||||
|
public string First = "Test";
|
||||||
|
public string Last = "User";
|
||||||
|
public LLUUID Agent;
|
||||||
|
public LLUUID Session;
|
||||||
|
public LLUUID InventoryFolder;
|
||||||
|
public LLUUID BaseFolder;
|
||||||
|
public Login()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IGridPlugin
|
||||||
|
{
|
||||||
|
IGridServer GetGridServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class agentcircuitdata
|
||||||
|
{
|
||||||
|
public agentcircuitdata() { }
|
||||||
|
public LLUUID AgentID;
|
||||||
|
public LLUUID SessionID;
|
||||||
|
public LLUUID SecureSessionID;
|
||||||
|
public string firstname;
|
||||||
|
public string lastname;
|
||||||
|
public uint circuitcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 libsecondlife;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Interfaces
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ILocalStorage. Really hacked together right now needs cleaning up
|
||||||
|
/// </summary>
|
||||||
|
public interface ILocalStorage
|
||||||
|
{
|
||||||
|
void StorePrim(PrimData prim);
|
||||||
|
void RemovePrim(LLUUID primID);
|
||||||
|
void LoadPrimitives(ILocalStorageReceiver receiver);
|
||||||
|
void ShutDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ILocalStorageReceiver
|
||||||
|
{
|
||||||
|
void PrimFromStorage(PrimData prim);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Inventory
|
||||||
|
{
|
||||||
|
public class AgentInventory
|
||||||
|
{
|
||||||
|
//Holds the local copy of Inventory info for a agent
|
||||||
|
public Dictionary<LLUUID, InventoryFolder> InventoryFolders;
|
||||||
|
public Dictionary<LLUUID, InventoryItem> InventoryItems;
|
||||||
|
public InventoryFolder InventoryRoot;
|
||||||
|
public int LastCached; //maybe used by opensim app, time this was last stored/compared to user server
|
||||||
|
public LLUUID AgentID;
|
||||||
|
public AvatarWearable[] Wearables;
|
||||||
|
|
||||||
|
public AgentInventory()
|
||||||
|
{
|
||||||
|
InventoryFolders = new Dictionary<LLUUID, InventoryFolder>();
|
||||||
|
InventoryItems = new Dictionary<LLUUID, InventoryItem>();
|
||||||
|
this.Initialise();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Initialise()
|
||||||
|
{
|
||||||
|
Wearables = new AvatarWearable[2]; //should be 12 of these
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
Wearables[i] = new AvatarWearable();
|
||||||
|
}
|
||||||
|
|
||||||
|
InventoryRoot = new InventoryFolder();
|
||||||
|
InventoryRoot.FolderID = LLUUID.Random();
|
||||||
|
InventoryRoot.ParentID = new LLUUID();
|
||||||
|
InventoryRoot.Version = 1;
|
||||||
|
InventoryRoot.DefaultType = 8;
|
||||||
|
InventoryRoot.FolderName = "My Inventory";
|
||||||
|
InventoryFolders.Add(InventoryRoot.FolderID, InventoryRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CreateNewFolder(LLUUID folderID)
|
||||||
|
{
|
||||||
|
InventoryFolder Folder = new InventoryFolder();
|
||||||
|
Folder.FolderID = folderID;
|
||||||
|
Folder.OwnerID = this.AgentID;
|
||||||
|
this.InventoryFolders.Add(Folder.FolderID, Folder);
|
||||||
|
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LLUUID AddToInventory(LLUUID folderID, AssetBase asset)
|
||||||
|
{
|
||||||
|
if (this.InventoryFolders.ContainsKey(folderID))
|
||||||
|
{
|
||||||
|
LLUUID NewItemID = LLUUID.Random();
|
||||||
|
|
||||||
|
InventoryItem Item = new InventoryItem();
|
||||||
|
Item.FolderID = folderID;
|
||||||
|
Item.OwnerID = AgentID;
|
||||||
|
Item.AssetID = asset.FullID;
|
||||||
|
Item.ItemID = NewItemID;
|
||||||
|
Item.Type = asset.Type;
|
||||||
|
Item.Name = asset.Name;
|
||||||
|
Item.Description = asset.Description;
|
||||||
|
Item.InvType = asset.InvType;
|
||||||
|
this.InventoryItems.Add(Item.ItemID, Item);
|
||||||
|
InventoryFolder Folder = InventoryFolders[Item.FolderID];
|
||||||
|
Folder.Items.Add(Item);
|
||||||
|
return (Item.ItemID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InventoryFolder
|
||||||
|
{
|
||||||
|
public List<InventoryItem> Items;
|
||||||
|
//public List<InventoryFolder> Subfolders;
|
||||||
|
public LLUUID FolderID;
|
||||||
|
public LLUUID OwnerID;
|
||||||
|
public LLUUID ParentID;
|
||||||
|
public string FolderName;
|
||||||
|
public ushort DefaultType;
|
||||||
|
public ushort Version;
|
||||||
|
|
||||||
|
public InventoryFolder()
|
||||||
|
{
|
||||||
|
Items = new List<InventoryItem>();
|
||||||
|
//Subfolders = new List<InventoryFolder>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InventoryItem
|
||||||
|
{
|
||||||
|
public LLUUID FolderID;
|
||||||
|
public LLUUID OwnerID;
|
||||||
|
public LLUUID ItemID;
|
||||||
|
public LLUUID AssetID;
|
||||||
|
public LLUUID CreatorID;
|
||||||
|
public sbyte InvType;
|
||||||
|
public sbyte Type;
|
||||||
|
public string Name;
|
||||||
|
public string Description;
|
||||||
|
|
||||||
|
public InventoryItem()
|
||||||
|
{
|
||||||
|
this.CreatorID = LLUUID.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AvatarWearable
|
||||||
|
{
|
||||||
|
public LLUUID AssetID = new LLUUID("00000000-0000-0000-0000-000000000000");
|
||||||
|
public LLUUID ItemID = new LLUUID("00000000-0000-0000-0000-000000000000");
|
||||||
|
|
||||||
|
public AvatarWearable()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using libsecondlife;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Grid
|
||||||
|
{
|
||||||
|
public abstract class LoginService
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProductVersion>8.0.50727</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{2E46A825-3168-492F-93BC-637126B5B72B}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>OpenSim.Framework</RootNamespace>
|
||||||
|
<AssemblyName>OpenSim.Framework</AssemblyName>
|
||||||
|
<StartupObject>
|
||||||
|
</StartupObject>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="libsecondlife, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\bin\libsecondlife.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="AssetBase.cs" />
|
||||||
|
<Compile Include="BlockingQueue.cs" />
|
||||||
|
<Compile Include="IAssetServer.cs" />
|
||||||
|
<Compile Include="IGridServer.cs" />
|
||||||
|
<Compile Include="ILocalStorage.cs" />
|
||||||
|
<Compile Include="Inventory.cs" />
|
||||||
|
<Compile Include="LoginService.cs" />
|
||||||
|
<Compile Include="PrimData.cs" />
|
||||||
|
<Compile Include="SimProfile.cs" />
|
||||||
|
<Compile Include="SimProfileBase.cs" />
|
||||||
|
<Compile Include="UserProfile.cs" />
|
||||||
|
<Compile Include="UserProfileManager.cs" />
|
||||||
|
<Compile Include="UserProfileManagerBase.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Util.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Assets
|
||||||
|
{
|
||||||
|
public class PrimData
|
||||||
|
{
|
||||||
|
public LLUUID OwnerID;
|
||||||
|
public byte PCode;
|
||||||
|
public byte PathBegin;
|
||||||
|
public byte PathEnd;
|
||||||
|
public byte PathScaleX;
|
||||||
|
public byte PathScaleY;
|
||||||
|
public byte PathShearX;
|
||||||
|
public byte PathShearY;
|
||||||
|
public sbyte PathSkew;
|
||||||
|
public byte ProfileBegin;
|
||||||
|
public byte ProfileEnd;
|
||||||
|
public LLVector3 Scale;
|
||||||
|
public byte PathCurve;
|
||||||
|
public byte ProfileCurve;
|
||||||
|
public uint ParentID = 0;
|
||||||
|
public byte ProfileHollow;
|
||||||
|
public sbyte PathRadiusOffset;
|
||||||
|
public byte PathRevolutions;
|
||||||
|
public sbyte PathTaperX;
|
||||||
|
public sbyte PathTaperY;
|
||||||
|
public sbyte PathTwist;
|
||||||
|
public sbyte PathTwistBegin;
|
||||||
|
public byte[] Texture;
|
||||||
|
|
||||||
|
//following only used during prim storage
|
||||||
|
public LLVector3 Position;
|
||||||
|
public LLQuaternion Rotation;
|
||||||
|
public uint LocalID;
|
||||||
|
public LLUUID FullID;
|
||||||
|
|
||||||
|
public PrimData()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("OpenSim.FrameWork")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("OpenSim.FrameWork")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2007")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("a08e20c7-f191-4137-b1f0-9291408fa521")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,51 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Sims
|
||||||
|
{
|
||||||
|
public class SimProfile : SimProfileBase
|
||||||
|
{
|
||||||
|
public SimProfile LoadFromGrid(ulong region_handle, string GridURL, string SendKey, string RecvKey)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Hashtable GridReqParams = new Hashtable();
|
||||||
|
GridReqParams["region_handle"] = region_handle.ToString();
|
||||||
|
GridReqParams["caller"] = "userserver";
|
||||||
|
GridReqParams["authkey"] = SendKey;
|
||||||
|
ArrayList SendParams = new ArrayList();
|
||||||
|
SendParams.Add(GridReqParams);
|
||||||
|
XmlRpcRequest GridReq = new XmlRpcRequest("get_sim_info", SendParams);
|
||||||
|
|
||||||
|
XmlRpcResponse GridResp = GridReq.Send(GridURL, 3000);
|
||||||
|
|
||||||
|
Hashtable RespData = (Hashtable)GridResp.Value;
|
||||||
|
this.UUID = new LLUUID((string)RespData["UUID"]);
|
||||||
|
this.regionhandle = (ulong)Convert.ToUInt64(RespData["regionhandle"]);
|
||||||
|
this.regionname = (string)RespData["regionname"];
|
||||||
|
this.sim_ip = (string)RespData["sim_ip"];
|
||||||
|
this.sim_port = (uint)Convert.ToUInt16(RespData["sim_port"]);
|
||||||
|
this.caps_url = (string)RespData["caps_url"];
|
||||||
|
this.RegionLocX = (uint)Convert.ToUInt32(RespData["RegionLocX"]);
|
||||||
|
this.RegionLocY = (uint)Convert.ToUInt32(RespData["RegionLocY"]);
|
||||||
|
this.sendkey = (string)RespData["sendkey"];
|
||||||
|
this.recvkey = (string)RespData["recvkey"];
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimProfile()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Sims
|
||||||
|
{
|
||||||
|
public class SimProfileBase
|
||||||
|
{
|
||||||
|
public LLUUID UUID;
|
||||||
|
public ulong regionhandle;
|
||||||
|
public string regionname;
|
||||||
|
public string sim_ip;
|
||||||
|
public uint sim_port;
|
||||||
|
public string caps_url;
|
||||||
|
public uint RegionLocX;
|
||||||
|
public uint RegionLocY;
|
||||||
|
public string sendkey;
|
||||||
|
public string recvkey;
|
||||||
|
|
||||||
|
public SimProfileBase()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.User
|
||||||
|
{
|
||||||
|
public class UserProfile
|
||||||
|
{
|
||||||
|
|
||||||
|
public string firstname;
|
||||||
|
public string lastname;
|
||||||
|
public ulong homeregionhandle;
|
||||||
|
public LLVector3 homepos;
|
||||||
|
public LLVector3 homelookat;
|
||||||
|
|
||||||
|
public bool IsGridGod = false;
|
||||||
|
public bool IsLocal = true; // will be used in future for visitors from foreign grids
|
||||||
|
public string AssetURL;
|
||||||
|
public string MD5passwd;
|
||||||
|
|
||||||
|
public LLUUID CurrentSessionID;
|
||||||
|
public LLUUID CurrentSecureSessionID;
|
||||||
|
public LLUUID UUID;
|
||||||
|
public Dictionary<LLUUID, uint> Circuits = new Dictionary<LLUUID, uint>(); // tracks circuit codes
|
||||||
|
|
||||||
|
public AgentInventory Inventory;
|
||||||
|
|
||||||
|
public UserProfile()
|
||||||
|
{
|
||||||
|
Circuits = new Dictionary<LLUUID, uint>();
|
||||||
|
Inventory = new AgentInventory();
|
||||||
|
homeregionhandle = Helpers.UIntsToLong((997 * 256), (996 * 256)); ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitSessionData()
|
||||||
|
{
|
||||||
|
CurrentSessionID = LLUUID.Random();
|
||||||
|
CurrentSecureSessionID = LLUUID.Random();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddSimCircuit(uint circuitCode, LLUUID regionUUID)
|
||||||
|
{
|
||||||
|
if (this.Circuits.ContainsKey(regionUUID) == false)
|
||||||
|
this.Circuits.Add(regionUUID, circuitCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,222 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Xml;
|
||||||
|
using libsecondlife;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using OpenSim.Framework.Sims;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.User
|
||||||
|
{
|
||||||
|
public class UserProfileManager : UserProfileManagerBase
|
||||||
|
{
|
||||||
|
public string GridURL;
|
||||||
|
public string GridSendKey;
|
||||||
|
public string GridRecvKey;
|
||||||
|
public string DefaultStartupMsg;
|
||||||
|
|
||||||
|
public UserProfileManager()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetKeys(string sendKey, string recvKey, string url, string message)
|
||||||
|
{
|
||||||
|
GridRecvKey = recvKey;
|
||||||
|
GridSendKey = sendKey;
|
||||||
|
GridURL = url;
|
||||||
|
DefaultStartupMsg = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual string ParseXMLRPC(string requestBody)
|
||||||
|
{
|
||||||
|
XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
|
||||||
|
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
switch (request.MethodName)
|
||||||
|
{
|
||||||
|
case "login_to_simulator":
|
||||||
|
bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd"));
|
||||||
|
bool GoodLogin = false;
|
||||||
|
string firstname = "";
|
||||||
|
string lastname = "";
|
||||||
|
string passwd = "";
|
||||||
|
|
||||||
|
if (GoodXML)
|
||||||
|
{
|
||||||
|
firstname = (string)requestData["first"];
|
||||||
|
lastname = (string)requestData["last"];
|
||||||
|
passwd = (string)requestData["passwd"];
|
||||||
|
GoodLogin = AuthenticateUser(firstname, lastname, passwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!(GoodXML && GoodLogin))
|
||||||
|
{
|
||||||
|
XmlRpcResponse LoginErrorResp = new XmlRpcResponse();
|
||||||
|
Hashtable ErrorRespData = new Hashtable();
|
||||||
|
ErrorRespData["reason"] = "key";
|
||||||
|
ErrorRespData["message"] = "Error connecting to grid. Please double check your login details and check with the grid owner if you are sure these are correct";
|
||||||
|
ErrorRespData["login"] = "false";
|
||||||
|
LoginErrorResp.Value = ErrorRespData;
|
||||||
|
return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(LoginErrorResp), " encoding=\"utf-16\"", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
UserProfile TheUser = GetProfileByName(firstname, lastname);
|
||||||
|
|
||||||
|
if (!((TheUser.CurrentSessionID == null) && (TheUser.CurrentSecureSessionID == null)))
|
||||||
|
{
|
||||||
|
XmlRpcResponse PresenceErrorResp = new XmlRpcResponse();
|
||||||
|
Hashtable PresenceErrorRespData = new Hashtable();
|
||||||
|
PresenceErrorRespData["reason"] = "presence";
|
||||||
|
PresenceErrorRespData["message"] = "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner";
|
||||||
|
PresenceErrorRespData["login"] = "false";
|
||||||
|
PresenceErrorResp.Value = PresenceErrorRespData;
|
||||||
|
return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", ""));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LLUUID AgentID = TheUser.UUID;
|
||||||
|
TheUser.InitSessionData();
|
||||||
|
// SimProfile SimInfo = new SimProfile();
|
||||||
|
// SimInfo = SimInfo.LoadFromGrid(TheUser.homeregionhandle, GridURL, GridSendKey, GridRecvKey);
|
||||||
|
|
||||||
|
XmlRpcResponse LoginGoodResp = new XmlRpcResponse();
|
||||||
|
Hashtable LoginGoodData = new Hashtable();
|
||||||
|
|
||||||
|
Hashtable GlobalT = new Hashtable();
|
||||||
|
GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271";
|
||||||
|
GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621";
|
||||||
|
GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621";
|
||||||
|
ArrayList GlobalTextures = new ArrayList();
|
||||||
|
GlobalTextures.Add(GlobalT);
|
||||||
|
|
||||||
|
Hashtable LoginFlagsHash = new Hashtable();
|
||||||
|
LoginFlagsHash["daylight_savings"] = "N";
|
||||||
|
LoginFlagsHash["stipend_since_login"] = "N";
|
||||||
|
LoginFlagsHash["gendered"] = "Y";
|
||||||
|
LoginFlagsHash["ever_logged_in"] = "Y";
|
||||||
|
ArrayList LoginFlags = new ArrayList();
|
||||||
|
LoginFlags.Add(LoginFlagsHash);
|
||||||
|
|
||||||
|
Hashtable uiconfig = new Hashtable();
|
||||||
|
uiconfig["allow_first_life"] = "Y";
|
||||||
|
ArrayList ui_config = new ArrayList();
|
||||||
|
ui_config.Add(uiconfig);
|
||||||
|
|
||||||
|
Hashtable ClassifiedCategoriesHash = new Hashtable();
|
||||||
|
ClassifiedCategoriesHash["category_name"] = "bla bla";
|
||||||
|
ClassifiedCategoriesHash["category_id"] = (Int32)1;
|
||||||
|
ArrayList ClassifiedCategories = new ArrayList();
|
||||||
|
ClassifiedCategories.Add(ClassifiedCategoriesHash);
|
||||||
|
|
||||||
|
ArrayList AgentInventory = new ArrayList();
|
||||||
|
foreach (InventoryFolder InvFolder in TheUser.Inventory.InventoryFolders.Values)
|
||||||
|
{
|
||||||
|
Hashtable TempHash = new Hashtable();
|
||||||
|
TempHash["name"] = InvFolder.FolderName;
|
||||||
|
TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated();
|
||||||
|
TempHash["version"] = (Int32)InvFolder.Version;
|
||||||
|
TempHash["type_default"] = (Int32)InvFolder.DefaultType;
|
||||||
|
TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated();
|
||||||
|
AgentInventory.Add(TempHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
Hashtable InventoryRootHash = new Hashtable();
|
||||||
|
InventoryRootHash["folder_id"] = TheUser.Inventory.InventoryRoot.FolderID.ToStringHyphenated();
|
||||||
|
ArrayList InventoryRoot = new ArrayList();
|
||||||
|
InventoryRoot.Add(InventoryRootHash);
|
||||||
|
|
||||||
|
Hashtable InitialOutfitHash = new Hashtable();
|
||||||
|
InitialOutfitHash["folder_name"] = "Nightclub Female";
|
||||||
|
InitialOutfitHash["gender"] = "female";
|
||||||
|
ArrayList InitialOutfit = new ArrayList();
|
||||||
|
InitialOutfit.Add(InitialOutfitHash);
|
||||||
|
|
||||||
|
uint circode = (uint)(new Random()).Next();
|
||||||
|
//TheUser.AddSimCircuit(circode, SimInfo.UUID);
|
||||||
|
|
||||||
|
LoginGoodData["last_name"] = "\"" + TheUser.firstname + "\"";
|
||||||
|
LoginGoodData["ui-config"] = ui_config;
|
||||||
|
LoginGoodData["sim_ip"] = "127.0.0.1"; //SimInfo.sim_ip.ToString();
|
||||||
|
LoginGoodData["login-flags"] = LoginFlags;
|
||||||
|
LoginGoodData["global-textures"] = GlobalTextures;
|
||||||
|
LoginGoodData["classified_categories"] = ClassifiedCategories;
|
||||||
|
LoginGoodData["event_categories"] = new ArrayList();
|
||||||
|
LoginGoodData["inventory-skeleton"] = AgentInventory;
|
||||||
|
LoginGoodData["inventory-skel-lib"] = new ArrayList();
|
||||||
|
LoginGoodData["inventory-root"] = InventoryRoot;
|
||||||
|
LoginGoodData["event_notifications"] = new ArrayList();
|
||||||
|
LoginGoodData["gestures"] = new ArrayList();
|
||||||
|
LoginGoodData["inventory-lib-owner"] = new ArrayList();
|
||||||
|
LoginGoodData["initial-outfit"] = InitialOutfit;
|
||||||
|
LoginGoodData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
|
||||||
|
LoginGoodData["start_location"] = "last";
|
||||||
|
LoginGoodData["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + TheUser.homepos.X.ToString() + ",r" + TheUser.homepos.Y.ToString() + ",r" + TheUser.homepos.Z.ToString() + "], 'look_at':[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]}";
|
||||||
|
LoginGoodData["message"] = DefaultStartupMsg;
|
||||||
|
LoginGoodData["first_name"] = "\"" + firstname + "\"";
|
||||||
|
LoginGoodData["circuit_code"] = (Int32)circode;
|
||||||
|
LoginGoodData["sim_port"] = 9000; //(Int32)SimInfo.sim_port;
|
||||||
|
LoginGoodData["secure_session_id"] = TheUser.CurrentSecureSessionID.ToStringHyphenated();
|
||||||
|
LoginGoodData["look_at"] = "\n[r" + TheUser.homelookat.X.ToString() + ",r" + TheUser.homelookat.Y.ToString() + ",r" + TheUser.homelookat.Z.ToString() + "]\n";
|
||||||
|
LoginGoodData["agent_id"] = AgentID.ToStringHyphenated();
|
||||||
|
LoginGoodData["region_y"] = (Int32) 996 * 256; // (Int32)SimInfo.RegionLocY * 256;
|
||||||
|
LoginGoodData["region_x"] = (Int32) 997 * 256; //SimInfo.RegionLocX * 256;
|
||||||
|
LoginGoodData["seed_capability"] = null;
|
||||||
|
LoginGoodData["agent_access"] = "M";
|
||||||
|
LoginGoodData["session_id"] = TheUser.CurrentSessionID.ToStringHyphenated();
|
||||||
|
LoginGoodData["login"] = "true";
|
||||||
|
|
||||||
|
this.CustomiseResponse(ref LoginGoodData, TheUser);
|
||||||
|
LoginGoodResp.Value = LoginGoodData;
|
||||||
|
//TheUser.SendDataToSim(SimInfo);
|
||||||
|
return (Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(LoginGoodResp), "utf-16", "utf-8"));
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception E)
|
||||||
|
{
|
||||||
|
Console.WriteLine(E.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void CustomiseResponse(ref Hashtable response, UserProfile theUser)
|
||||||
|
{
|
||||||
|
//default method set up to act as ogs user server
|
||||||
|
SimProfile SimInfo = new SimProfile();
|
||||||
|
//get siminfo from grid server
|
||||||
|
SimInfo = SimInfo.LoadFromGrid(theUser.homeregionhandle, GridURL, GridSendKey, GridRecvKey);
|
||||||
|
uint circode = (uint)response["circuit_code"];
|
||||||
|
theUser.AddSimCircuit(circode, SimInfo.UUID);
|
||||||
|
response["home"] = "{'region_handle':[r" + (SimInfo.RegionLocX * 256).ToString() + ",r" + (SimInfo.RegionLocY * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}";
|
||||||
|
response["sim_ip"] = SimInfo.sim_ip.ToString();
|
||||||
|
response["sim_port"] = (Int32)SimInfo.sim_port;
|
||||||
|
response["region_y"] = (Int32) SimInfo.RegionLocY * 256;
|
||||||
|
response["region_x"] = (Int32) SimInfo.RegionLocX * 256;
|
||||||
|
|
||||||
|
//default is ogs user server, so let the sim know about the user via a XmlRpcRequest
|
||||||
|
Console.WriteLine(SimInfo.caps_url);
|
||||||
|
Hashtable SimParams = new Hashtable();
|
||||||
|
SimParams["session_id"] = theUser.CurrentSessionID.ToString();
|
||||||
|
SimParams["secure_session_id"] = theUser.CurrentSecureSessionID.ToString();
|
||||||
|
SimParams["firstname"] = theUser.firstname;
|
||||||
|
SimParams["lastname"] = theUser.lastname;
|
||||||
|
SimParams["agent_id"] = theUser.UUID.ToString();
|
||||||
|
SimParams["circuit_code"] = (Int32)theUser.Circuits[SimInfo.UUID];
|
||||||
|
ArrayList SendParams = new ArrayList();
|
||||||
|
SendParams.Add(SimParams);
|
||||||
|
|
||||||
|
XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
|
||||||
|
XmlRpcResponse GridResp = GridReq.Send(SimInfo.caps_url, 3000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.Framework.Utilities;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.User
|
||||||
|
{
|
||||||
|
public class UserProfileManagerBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public Dictionary<LLUUID, UserProfile> UserProfiles = new Dictionary<LLUUID, UserProfile>();
|
||||||
|
|
||||||
|
public UserProfileManagerBase()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void InitUserProfiles()
|
||||||
|
{
|
||||||
|
// TODO: need to load from database
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserProfile GetProfileByName(string firstname, string lastname)
|
||||||
|
{
|
||||||
|
foreach (libsecondlife.LLUUID UUID in UserProfiles.Keys)
|
||||||
|
{
|
||||||
|
if ((UserProfiles[UUID].firstname == firstname) && (UserProfiles[UUID].lastname == lastname))
|
||||||
|
{
|
||||||
|
return UserProfiles[UUID];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserProfile GetProfileByLLUUID(LLUUID ProfileLLUUID)
|
||||||
|
{
|
||||||
|
return UserProfiles[ProfileLLUUID];
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool AuthenticateUser(string firstname, string lastname, string passwd)
|
||||||
|
{
|
||||||
|
UserProfile TheUser = GetProfileByName(firstname, lastname);
|
||||||
|
if (TheUser != null)
|
||||||
|
{
|
||||||
|
if (TheUser.MD5passwd == passwd)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetGod(LLUUID GodID)
|
||||||
|
{
|
||||||
|
this.UserProfiles[GodID].IsGridGod = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual UserProfile CreateNewProfile(string firstname, string lastname, string MD5passwd)
|
||||||
|
{
|
||||||
|
UserProfile newprofile = new UserProfile();
|
||||||
|
newprofile.homeregionhandle = Helpers.UIntsToLong((997 * 256), (996 * 256));
|
||||||
|
newprofile.firstname = firstname;
|
||||||
|
newprofile.lastname = lastname;
|
||||||
|
newprofile.MD5passwd = MD5passwd;
|
||||||
|
newprofile.UUID = LLUUID.Random();
|
||||||
|
this.UserProfiles.Add(newprofile.UUID, newprofile);
|
||||||
|
return newprofile;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Utilities
|
||||||
|
{
|
||||||
|
public class Util
|
||||||
|
{
|
||||||
|
public static ulong UIntsToLong(uint X, uint Y)
|
||||||
|
{
|
||||||
|
return Helpers.UIntsToLong(X, Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Util()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class QueItem
|
||||||
|
{
|
||||||
|
public QueItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Packet Packet;
|
||||||
|
public bool Incoming;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,105 @@
|
||||||
|
LLWearable version 22
|
||||||
|
Female Shape and Outfit 3 Shape
|
||||||
|
Created by system from avatar's appearance.
|
||||||
|
permissions 0
|
||||||
|
{
|
||||||
|
base_mask 00082000
|
||||||
|
owner_mask 00082000
|
||||||
|
group_mask 00082000
|
||||||
|
everyone_mask 00082000
|
||||||
|
next_owner_mask 00082000
|
||||||
|
creator_id 3d924400-038e-6ad9-920b-cfbb9b40585c
|
||||||
|
owner_id 542ffb8e-8932-49b9-8664-58f53e442797
|
||||||
|
last_owner_id 3d924400-038e-6ad9-920b-cfbb9b40585c
|
||||||
|
group_id 00000000-0000-0000-0000-000000000000
|
||||||
|
}
|
||||||
|
sale_info 0
|
||||||
|
{
|
||||||
|
sale_type not
|
||||||
|
sale_price 0
|
||||||
|
}
|
||||||
|
type 0
|
||||||
|
parameters 82
|
||||||
|
1 .21
|
||||||
|
2 -.5
|
||||||
|
4 -.11
|
||||||
|
5 -.1
|
||||||
|
6 -.3
|
||||||
|
7 -.4
|
||||||
|
8 -.5
|
||||||
|
10 .7
|
||||||
|
11 .34
|
||||||
|
12 -.5
|
||||||
|
13 0
|
||||||
|
14 .04
|
||||||
|
15 .58
|
||||||
|
17 .56
|
||||||
|
18 -.26
|
||||||
|
19 -.73
|
||||||
|
20 -.34
|
||||||
|
21 -.01
|
||||||
|
22 1
|
||||||
|
23 -.5
|
||||||
|
24 -.63
|
||||||
|
25 .44
|
||||||
|
27 .05
|
||||||
|
33 -.24
|
||||||
|
34 -.7
|
||||||
|
35 -.16
|
||||||
|
36 -.2
|
||||||
|
37 -.98
|
||||||
|
38 -.5
|
||||||
|
80 0
|
||||||
|
105 .07
|
||||||
|
155 -.22
|
||||||
|
157 0
|
||||||
|
185 -1
|
||||||
|
193 .86
|
||||||
|
196 -.74
|
||||||
|
505 .65
|
||||||
|
506 .12
|
||||||
|
507 -1.5
|
||||||
|
515 0
|
||||||
|
517 .16
|
||||||
|
518 .8
|
||||||
|
629 0
|
||||||
|
637 0
|
||||||
|
646 .4
|
||||||
|
647 1
|
||||||
|
649 .36
|
||||||
|
650 .85
|
||||||
|
652 .49
|
||||||
|
653 -1
|
||||||
|
656 0
|
||||||
|
659 .65
|
||||||
|
662 .5
|
||||||
|
663 0
|
||||||
|
664 0
|
||||||
|
665 0
|
||||||
|
675 -.15
|
||||||
|
676 .26
|
||||||
|
678 .28
|
||||||
|
682 .27
|
||||||
|
683 -.19
|
||||||
|
684 -.09
|
||||||
|
685 0
|
||||||
|
690 .45
|
||||||
|
692 .4
|
||||||
|
693 -0
|
||||||
|
753 -.5
|
||||||
|
756 -.08
|
||||||
|
758 .24
|
||||||
|
759 .6
|
||||||
|
760 .11
|
||||||
|
764 -.38
|
||||||
|
765 -.3
|
||||||
|
769 .42
|
||||||
|
773 .51
|
||||||
|
795 .16
|
||||||
|
796 .11
|
||||||
|
799 .36
|
||||||
|
841 0
|
||||||
|
842 -.82
|
||||||
|
879 0
|
||||||
|
880 0
|
||||||
|
textures 0
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,38 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual C# Express 2005
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OGS-UserServer", "userserver\src\OGS-UserServer.csproj", "{D45B6E48-5668-478D-B9CB-6D46E665FACF}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OGS-GridServer", "gridserver\src\OGS-GridServer.csproj", "{FE50A574-C8ED-433B-95F0-213A5EED2AB2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerConsole", "ServerConsole\ServerConsole.csproj", "{7667E6E2-F227-41A2-B1B2-315613E1BAFC}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "..\OpenSim.FrameWork\OpenSim.Framework.csproj", "{2E46A825-3168-492F-93BC-637126B5B72B}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{D45B6E48-5668-478D-B9CB-6D46E665FACF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D45B6E48-5668-478D-B9CB-6D46E665FACF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D45B6E48-5668-478D-B9CB-6D46E665FACF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D45B6E48-5668-478D-B9CB-6D46E665FACF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{FE50A574-C8ED-433B-95F0-213A5EED2AB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FE50A574-C8ED-433B-95F0-213A5EED2AB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FE50A574-C8ED-433B-95F0-213A5EED2AB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FE50A574-C8ED-433B-95F0-213A5EED2AB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{7667E6E2-F227-41A2-B1B2-315613E1BAFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7667E6E2-F227-41A2-B1B2-315613E1BAFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7667E6E2-F227-41A2-B1B2-315613E1BAFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{7667E6E2-F227-41A2-B1B2-315613E1BAFC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
Binary file not shown.
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("ServerConsole")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("ServerConsole")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2007")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("c4d85def-4c2e-449d-bf4a-449b8cf03736")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 ServerConsole
|
||||||
|
{
|
||||||
|
public class MainConsole {
|
||||||
|
|
||||||
|
private static ConsoleBase instance;
|
||||||
|
|
||||||
|
public static ConsoleBase Instance
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
instance = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainConsole()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class conscmd_callback {
|
||||||
|
public abstract void RunCmd(string cmd, string[] cmdparams);
|
||||||
|
public abstract void Show(string ShowWhat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class ConsoleBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public enum ConsoleType {
|
||||||
|
Local, // Use stdio
|
||||||
|
TCP, // Use TCP/telnet
|
||||||
|
SimChat // Use in-world chat (for gods)
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void Close();
|
||||||
|
|
||||||
|
// You know what ReadLine() and WriteLine() do, right? And Read() and Write()? Right, you do actually know C#, right? Are you actually a programmer? Do you know english? Do you find my sense of humour in comments irritating? Good, glad you're still here
|
||||||
|
public abstract void WriteLine(string Line) ;
|
||||||
|
|
||||||
|
public abstract string ReadLine();
|
||||||
|
|
||||||
|
public abstract int Read() ;
|
||||||
|
|
||||||
|
public abstract void Write(string Line) ;
|
||||||
|
|
||||||
|
public abstract string PasswdPrompt(string prompt);
|
||||||
|
|
||||||
|
// Displays a command prompt and waits for the user to enter a string, then returns that string
|
||||||
|
public abstract string CmdPrompt(string prompt) ;
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value if the user simply presses enter
|
||||||
|
public abstract string CmdPrompt(string prompt, string defaultresponse);
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value, user may only enter 1 of 2 options
|
||||||
|
public abstract string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) ;
|
||||||
|
|
||||||
|
// Runs a command with a number of parameters
|
||||||
|
public abstract Object RunCmd(string Cmd, string[] cmdparams) ;
|
||||||
|
|
||||||
|
// Shows data about something
|
||||||
|
public abstract void ShowCommands(string ShowWhat) ;
|
||||||
|
|
||||||
|
// Displays a prompt to the user and then runs the command they entered
|
||||||
|
public abstract void MainConsolePrompt() ;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProductVersion>8.0.50727</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{7667E6E2-F227-41A2-B1B2-315613E1BAFC}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>ServerConsole</RootNamespace>
|
||||||
|
<AssemblyName>ServerConsole</AssemblyName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>..\common\bin\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="ServerConsole.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<project name="ServerConsole" default="build" basedir=".">
|
||||||
|
<property name="debug" value="true" overwrite="false" />
|
||||||
|
<target name="clean" description="remove all generated files">
|
||||||
|
<delete file="../common/bin/ServerConsole.dll" failonerror="false" />
|
||||||
|
<delete file="../common/bin/ServerConsole.dll.mdb" failonerror="false" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="svnupdate" description="updates to latest SVN">
|
||||||
|
<exec program="svn">
|
||||||
|
<arg value="update" />
|
||||||
|
</exec>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="upgrade" description="updates from SVN and then builds" depends="clean,svnupdate,build">
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="build" description="compiles the source code">
|
||||||
|
|
||||||
|
<loadfile file="../VERSION" property="svnver"/>
|
||||||
|
<asminfo output="AssemblyInfo.cs" language="CSharp">
|
||||||
|
<imports>
|
||||||
|
<import namespace="System" />
|
||||||
|
<import namespace="System.Reflection" />
|
||||||
|
<import namespace="System.Runtime.InteropServices" />
|
||||||
|
</imports>
|
||||||
|
<attributes>
|
||||||
|
<attribute type="ComVisibleAttribute" value="false" />
|
||||||
|
<attribute type="CLSCompliantAttribute" value="false" />
|
||||||
|
<attribute type="AssemblyVersionAttribute" value="${svnver}" />
|
||||||
|
<attribute type="AssemblyTitleAttribute" value="ogs-serverconsole" />
|
||||||
|
<attribute type="AssemblyDescriptionAttribute" value="The default server console" />
|
||||||
|
<attribute type="AssemblyCopyrightAttribute" value="Copyright © OGS development team 2007"/>
|
||||||
|
</attributes>
|
||||||
|
</asminfo>
|
||||||
|
|
||||||
|
<csc target="library" output="../common/bin/ServerConsole.dll" debug="${debug}" verbose="true" warninglevel="4">
|
||||||
|
<references>
|
||||||
|
<include name="System" />
|
||||||
|
<include name="System.Xml" />
|
||||||
|
</references>
|
||||||
|
<sources>
|
||||||
|
<include name="*.cs" />
|
||||||
|
</sources>
|
||||||
|
</csc>
|
||||||
|
</target>
|
||||||
|
</project>
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 OpenGridServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class VersionInfo
|
||||||
|
{
|
||||||
|
public static string Version = "0.1, Build 1173843165, Revision 193:206M";
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,181 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using ServerConsole;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of ServerConsole.
|
||||||
|
/// </summary>
|
||||||
|
public class MServerConsole : ConsoleBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private ConsoleType ConsType;
|
||||||
|
StreamWriter Log;
|
||||||
|
public conscmd_callback cmdparser;
|
||||||
|
public string componentname;
|
||||||
|
|
||||||
|
// STUPID HACK ALERT!!!! STUPID HACK ALERT!!!!!
|
||||||
|
// constype - the type of console to use (see enum ConsoleType)
|
||||||
|
// sparam - depending on the console type:
|
||||||
|
// TCP - the IP to bind to (127.0.0.1 if blank)
|
||||||
|
// Local - param ignored
|
||||||
|
// and for the iparam:
|
||||||
|
// TCP - the port to bind to
|
||||||
|
// Local - param ignored
|
||||||
|
// LogFile - duh
|
||||||
|
// componentname - which component of the OGS system? (user, asset etc)
|
||||||
|
// cmdparser - a reference to a conscmd_callback object
|
||||||
|
|
||||||
|
public MServerConsole(ConsoleType constype, string sparam, int iparam, string LogFile, string componentname, conscmd_callback cmdparser) {
|
||||||
|
ConsType = constype;
|
||||||
|
this.componentname = componentname;
|
||||||
|
this.cmdparser = cmdparser;
|
||||||
|
switch(constype) {
|
||||||
|
case ConsoleType.Local:
|
||||||
|
Console.WriteLine("ServerConsole.cs - creating new local console");
|
||||||
|
Console.WriteLine("Logs will be saved to current directory in " + LogFile);
|
||||||
|
Log=File.AppendText(LogFile);
|
||||||
|
Log.WriteLine("========================================================================");
|
||||||
|
Log.WriteLine(componentname + " " + VersionInfo.Version + " Started at " + DateTime.Now.ToString());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ConsoleType.TCP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Console.WriteLine("ServerConsole.cs - what are you smoking? that isn't a valid console type!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Close() {
|
||||||
|
Log.WriteLine("Shutdown at " + DateTime.Now.ToString());
|
||||||
|
Log.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// You know what ReadLine() and WriteLine() do, right? And Read() and Write()? Right, you do actually know C#, right? Are you actually a programmer? Do you know english? Do you find my sense of humour in comments irritating? Good, glad you're still here
|
||||||
|
public override void WriteLine(string Line) {
|
||||||
|
Log.WriteLine(Line);
|
||||||
|
Console.WriteLine(Line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ReadLine() {
|
||||||
|
string TempStr=Console.ReadLine();
|
||||||
|
Log.WriteLine(TempStr);
|
||||||
|
return TempStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Read() {
|
||||||
|
int TempInt= Console.Read();
|
||||||
|
Log.Write((char)TempInt);
|
||||||
|
return TempInt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Write(string Line) {
|
||||||
|
Console.Write(Line);
|
||||||
|
Log.Write(Line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Displays a prompt and waits for the user to enter a string, then returns that string
|
||||||
|
// Done with no echo and suitable for passwords
|
||||||
|
public override string PasswdPrompt(string prompt) {
|
||||||
|
// FIXME: Needs to be better abstracted
|
||||||
|
Log.WriteLine(prompt);
|
||||||
|
this.Write(prompt);
|
||||||
|
ConsoleColor oldfg=Console.ForegroundColor;
|
||||||
|
Console.ForegroundColor=Console.BackgroundColor;
|
||||||
|
string temp=Console.ReadLine();
|
||||||
|
Console.ForegroundColor=oldfg;
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a command prompt and waits for the user to enter a string, then returns that string
|
||||||
|
public override string CmdPrompt(string prompt) {
|
||||||
|
this.Write(prompt);
|
||||||
|
return this.ReadLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value if the user simply presses enter
|
||||||
|
public override string CmdPrompt(string prompt, string defaultresponse) {
|
||||||
|
string temp=CmdPrompt(prompt);
|
||||||
|
if(temp=="") {
|
||||||
|
return defaultresponse;
|
||||||
|
} else {
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value, user may only enter 1 of 2 options
|
||||||
|
public override string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) {
|
||||||
|
bool itisdone=false;
|
||||||
|
string temp=CmdPrompt(prompt,defaultresponse);
|
||||||
|
while(itisdone==false) {
|
||||||
|
if((temp==OptionA) || (temp==OptionB)) {
|
||||||
|
itisdone=true;
|
||||||
|
} else {
|
||||||
|
this.WriteLine("Valid options are " + OptionA + " or " + OptionB);
|
||||||
|
temp=CmdPrompt(prompt,defaultresponse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runs a command with a number of parameters
|
||||||
|
public override Object RunCmd(string Cmd, string[] cmdparams) {
|
||||||
|
cmdparser.RunCmd(Cmd, cmdparams);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shows data about something
|
||||||
|
public override void ShowCommands(string ShowWhat) {
|
||||||
|
cmdparser.Show(ShowWhat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void MainConsolePrompt() {
|
||||||
|
string[] tempstrarray;
|
||||||
|
string tempstr = this.CmdPrompt(this.componentname + "# ");
|
||||||
|
tempstrarray = tempstr.Split(' ');
|
||||||
|
string cmd=tempstrarray[0];
|
||||||
|
Array.Reverse(tempstrarray);
|
||||||
|
Array.Resize<string>(ref tempstrarray,tempstrarray.Length-1);
|
||||||
|
Array.Reverse(tempstrarray);
|
||||||
|
string[] cmdparams=(string[])tempstrarray;
|
||||||
|
RunCmd(cmd,cmdparams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 OpenGridServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class VersionInfo
|
||||||
|
{
|
||||||
|
public static string Version = "@@VERSION";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<project name="GridServer" default="build" basedir="./">
|
||||||
|
<property name="debug" value="true" overwrite="false" />
|
||||||
|
<target name="clean" description="remove all generated files">
|
||||||
|
<delete>
|
||||||
|
<fileset failonempty="false">
|
||||||
|
<include name="bin/*.dll" />
|
||||||
|
<include name="bin/*.exe" />
|
||||||
|
<include name="bin/*.mdb" />
|
||||||
|
</fileset>
|
||||||
|
</delete>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="svnupdate" description="updates to latest SVN">
|
||||||
|
<exec program="svn">
|
||||||
|
<arg value="update" />
|
||||||
|
</exec>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="upgrade" description="updates from SVN and then builds" depends="clean,svnupdate,build">
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="build" description="compiles the source code">
|
||||||
|
|
||||||
|
<loadfile file="../VERSION" property="svnver"/>
|
||||||
|
<asminfo output="src/AssemblyInfo.cs" language="CSharp">
|
||||||
|
<imports>
|
||||||
|
<import namespace="System" />
|
||||||
|
<import namespace="System.Reflection" />
|
||||||
|
<import namespace="System.Runtime.InteropServices" />
|
||||||
|
</imports>
|
||||||
|
<attributes>
|
||||||
|
<attribute type="ComVisibleAttribute" value="false" />
|
||||||
|
<attribute type="CLSCompliantAttribute" value="false" />
|
||||||
|
<attribute type="AssemblyVersionAttribute" value="${svnver}" />
|
||||||
|
<attribute type="AssemblyTitleAttribute" value="ogs-GridServer" />
|
||||||
|
<attribute type="AssemblyDescriptionAttribute" value="The core OGS Grid Server" />
|
||||||
|
<attribute type="AssemblyCopyrightAttribute" value="Copyright © OGS development team 2007"/>
|
||||||
|
</attributes>
|
||||||
|
</asminfo>
|
||||||
|
|
||||||
|
<csc target="exe" output="bin/GridServer.exe" debug="${debug}" verbose="true" warninglevel="4">
|
||||||
|
<references failonempty="true">
|
||||||
|
<include name="System" />
|
||||||
|
<include name="System.Xml" />
|
||||||
|
<include name="../common/bin/ServerConsole.dll" />
|
||||||
|
<include name="../common/bin/libsecondlife.dll" />
|
||||||
|
</references>
|
||||||
|
<sources>
|
||||||
|
<include name="../common/src/VersionInfo.cs" />
|
||||||
|
<include name="../common/src/OGS-Console.cs" />
|
||||||
|
<include name="../common/src/Util.cs" />
|
||||||
|
<include name="src/*.cs" />
|
||||||
|
</sources>
|
||||||
|
</csc>
|
||||||
|
|
||||||
|
<copy todir="bin/">
|
||||||
|
<fileset basedir="../common/bin">
|
||||||
|
<include name="*.*" />
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
</target>
|
||||||
|
</project>
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using ServerConsole;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
|
||||||
|
public class GridConsole : conscmd_callback {
|
||||||
|
public GridConsole() { }
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams) {
|
||||||
|
switch(cmd) {
|
||||||
|
case "help":
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("shutdown - shutdown the grid (USE CAUTION!)"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
ServerConsole.MainConsole.Instance.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Show(string ShowWhat) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,166 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenGrid project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Net;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using libsecondlife;
|
||||||
|
using ServerConsole;
|
||||||
|
using OpenSim.Framework.Sims;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
public class GridHTTPServer {
|
||||||
|
public Thread HTTPD;
|
||||||
|
public HttpListener Listener;
|
||||||
|
|
||||||
|
public GridHTTPServer() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Starting up HTTP Server");
|
||||||
|
HTTPD = new Thread(new ThreadStart(StartHTTP));
|
||||||
|
HTTPD.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartHTTP() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("GridHttp.cs:StartHTTP() - Spawned main thread OK");
|
||||||
|
Listener = new HttpListener();
|
||||||
|
|
||||||
|
Listener.Prefixes.Add("http://+:8001/gridserver/");
|
||||||
|
Listener.Start();
|
||||||
|
|
||||||
|
HttpListenerContext context;
|
||||||
|
while(true) {
|
||||||
|
context = Listener.GetContext();
|
||||||
|
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseXMLRPC(string requestBody) {
|
||||||
|
try{
|
||||||
|
XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
|
||||||
|
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
switch(request.MethodName) {
|
||||||
|
case "get_sim_info":
|
||||||
|
ulong req_handle=(ulong)Convert.ToInt64(requestData["region_handle"]);
|
||||||
|
SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle(req_handle);
|
||||||
|
string RecvKey="";
|
||||||
|
string caller=(string)requestData["caller"];
|
||||||
|
switch(caller) {
|
||||||
|
case "userserver":
|
||||||
|
RecvKey=OpenGrid_Main.thegrid.UserRecvKey;
|
||||||
|
break;
|
||||||
|
case "assetserver":
|
||||||
|
RecvKey=OpenGrid_Main.thegrid.AssetRecvKey;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if((TheSim!=null) && (string)requestData["authkey"]==RecvKey) {
|
||||||
|
XmlRpcResponse SimInfoResp = new XmlRpcResponse();
|
||||||
|
Hashtable SimInfoData = new Hashtable();
|
||||||
|
SimInfoData["UUID"]=TheSim.UUID.ToString();
|
||||||
|
SimInfoData["regionhandle"]=TheSim.regionhandle.ToString();
|
||||||
|
SimInfoData["regionname"]=TheSim.regionname;
|
||||||
|
SimInfoData["sim_ip"]=TheSim.sim_ip;
|
||||||
|
SimInfoData["sim_port"]=TheSim.sim_port.ToString();
|
||||||
|
SimInfoData["caps_url"]=TheSim.caps_url;
|
||||||
|
SimInfoData["RegionLocX"]=TheSim.RegionLocX.ToString();
|
||||||
|
SimInfoData["RegionLocY"]=TheSim.RegionLocY.ToString();
|
||||||
|
SimInfoData["sendkey"]=TheSim.sendkey;
|
||||||
|
SimInfoData["recvkey"]=TheSim.recvkey;
|
||||||
|
SimInfoResp.Value=SimInfoData;
|
||||||
|
return(Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(SimInfoResp),"utf-16","utf-8"));
|
||||||
|
} else {
|
||||||
|
XmlRpcResponse SimErrorResp = new XmlRpcResponse();
|
||||||
|
Hashtable SimErrorData = new Hashtable();
|
||||||
|
SimErrorData["error"]="sim not found";
|
||||||
|
SimErrorResp.Value=SimErrorData;
|
||||||
|
return(XmlRpcResponseSerializer.Singleton.Serialize(SimErrorResp));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch(Exception e) {
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseREST(string requestBody, string requestURL) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void HandleRequest(Object stateinfo) {
|
||||||
|
HttpListenerContext context=(HttpListenerContext)stateinfo;
|
||||||
|
|
||||||
|
HttpListenerRequest request = context.Request;
|
||||||
|
HttpListenerResponse response = context.Response;
|
||||||
|
|
||||||
|
response.KeepAlive=false;
|
||||||
|
response.SendChunked=false;
|
||||||
|
|
||||||
|
System.IO.Stream body = request.InputStream;
|
||||||
|
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
|
||||||
|
System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
|
||||||
|
|
||||||
|
string requestBody = reader.ReadToEnd();
|
||||||
|
body.Close();
|
||||||
|
reader.Close();
|
||||||
|
|
||||||
|
string responseString="";
|
||||||
|
switch(request.ContentType) {
|
||||||
|
case "text/xml":
|
||||||
|
// must be XML-RPC, so pass to the XML-RPC parser
|
||||||
|
|
||||||
|
responseString=ParseXMLRPC(requestBody);
|
||||||
|
response.AddHeader("Content-type","text/xml");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case null:
|
||||||
|
// must be REST or invalid crap, so pass to the REST parser
|
||||||
|
responseString=ParseREST(request.Url.OriginalString,requestBody);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
|
||||||
|
System.IO.Stream output = response.OutputStream;
|
||||||
|
response.SendChunked=false;
|
||||||
|
response.ContentLength64=buffer.Length;
|
||||||
|
output.Write(buffer,0,buffer.Length);
|
||||||
|
output.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using ServerConsole;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class OpenGrid_Main
|
||||||
|
{
|
||||||
|
|
||||||
|
public static OpenGrid_Main thegrid;
|
||||||
|
public string GridOwner;
|
||||||
|
public string DefaultStartupMsg;
|
||||||
|
public string DefaultAssetServer;
|
||||||
|
public string AssetSendKey;
|
||||||
|
public string AssetRecvKey;
|
||||||
|
public string DefaultUserServer;
|
||||||
|
public string UserSendKey;
|
||||||
|
public string UserRecvKey;
|
||||||
|
|
||||||
|
public GridHTTPServer _httpd;
|
||||||
|
public SimProfileManager _regionmanager;
|
||||||
|
|
||||||
|
[STAThread]
|
||||||
|
public static void Main( string[] args )
|
||||||
|
{
|
||||||
|
Console.WriteLine("OpenGrid " + VersionInfo.Version + "\n");
|
||||||
|
Console.WriteLine("Starting...\n");
|
||||||
|
ServerConsole.MainConsole.Instance = new MServerConsole(ServerConsole.ConsoleBase.ConsoleType.Local, "", 0, "opengrid-console.log", "OpenGrid", new GridConsole());
|
||||||
|
|
||||||
|
thegrid = new OpenGrid_Main();
|
||||||
|
thegrid.Startup();
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("\nEnter help for a list of commands\n");
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
ServerConsole.MainConsole.Instance.MainConsolePrompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Startup() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Please press enter to retain default settings");
|
||||||
|
|
||||||
|
this.GridOwner=ServerConsole.MainConsole.Instance.CmdPrompt("Grid owner [OGS development team]: ","OGS development team");
|
||||||
|
this.DefaultStartupMsg=ServerConsole.MainConsole.Instance.CmdPrompt("Default startup message for clients [Welcome to OGS!]: ","Welcome to OGS!");
|
||||||
|
|
||||||
|
this.DefaultAssetServer=ServerConsole.MainConsole.Instance.CmdPrompt("Default asset server [no default]: ");
|
||||||
|
this.AssetSendKey=ServerConsole.MainConsole.Instance.CmdPrompt("Key to send to asset server: ");
|
||||||
|
this.AssetRecvKey=ServerConsole.MainConsole.Instance.CmdPrompt("Key to expect from asset server: ");
|
||||||
|
|
||||||
|
this.DefaultUserServer=ServerConsole.MainConsole.Instance.CmdPrompt("Default user server [no default]: ");
|
||||||
|
this.UserSendKey=ServerConsole.MainConsole.Instance.CmdPrompt("Key to send to user server: ");
|
||||||
|
this.UserRecvKey=ServerConsole.MainConsole.Instance.CmdPrompt("Key to expect from user server: ");
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting HTTP process");
|
||||||
|
_httpd = new GridHTTPServer();
|
||||||
|
|
||||||
|
this._regionmanager=new SimProfileManager();
|
||||||
|
_regionmanager.CreateNewProfile("OpenSim Test", "http://there-is-no-caps.com", "4.78.190.75", 9000, 997, 996, this.UserSendKey, this.UserRecvKey);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProductVersion>8.0.50727</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{FE50A574-C8ED-433B-95F0-213A5EED2AB2}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>OGS_GridServer</RootNamespace>
|
||||||
|
<AssemblyName>OGS-GridServer</AssemblyName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="libsecondlife, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\common\bin\libsecondlife.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\common\src\OGS-Console.cs">
|
||||||
|
<Link>OGS-Console.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\..\common\VersionInfo\VersionInfo.cs">
|
||||||
|
<Link>VersionInfo.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ConsoleCmds.cs" />
|
||||||
|
<Compile Include="GridHttp.cs" />
|
||||||
|
<Compile Include="Main.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="SimProfiles.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{7667E6E2-F227-41A2-B1B2-315613E1BAFC}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("OGS-GridServer")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("OGS-GridServer")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2007")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,114 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenGrid project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using libsecondlife;
|
||||||
|
using ServerConsole;
|
||||||
|
using OpenSim.Framework.Utilities;
|
||||||
|
using OpenSim.Framework.Sims;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class SimProfileManager {
|
||||||
|
|
||||||
|
public Dictionary<LLUUID, SimProfileBase> SimProfiles = new Dictionary<LLUUID, SimProfileBase>();
|
||||||
|
|
||||||
|
public SimProfileManager() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitSimProfiles() {
|
||||||
|
// TODO: need to load from database
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimProfileBase GetProfileByHandle(ulong reqhandle) {
|
||||||
|
foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys) {
|
||||||
|
if(SimProfiles[UUID].regionhandle==reqhandle) return SimProfiles[UUID];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimProfileBase GetProfileByLLUUID(LLUUID ProfileLLUUID) {
|
||||||
|
return SimProfiles[ProfileLLUUID];
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AuthenticateSim(LLUUID RegionUUID, uint regionhandle, string simrecvkey) {
|
||||||
|
SimProfileBase TheSim=GetProfileByHandle(regionhandle);
|
||||||
|
if(TheSim != null)
|
||||||
|
if(TheSim.recvkey==simrecvkey) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
} else return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimProfileBase CreateNewProfile(string regionname, string caps_url, string sim_ip, uint sim_port, uint RegionLocX, uint RegionLocY, string sendkey, string recvkey) {
|
||||||
|
SimProfileBase newprofile = new SimProfileBase();
|
||||||
|
newprofile.regionname=regionname;
|
||||||
|
newprofile.sim_ip=sim_ip;
|
||||||
|
newprofile.sim_port=sim_port;
|
||||||
|
newprofile.RegionLocX=RegionLocX;
|
||||||
|
newprofile.RegionLocY=RegionLocY;
|
||||||
|
newprofile.caps_url="http://" + sim_ip + ":9000/";
|
||||||
|
newprofile.sendkey=sendkey;
|
||||||
|
newprofile.recvkey=recvkey;
|
||||||
|
newprofile.regionhandle=Util.UIntsToLong((RegionLocX*256), (RegionLocY*256));
|
||||||
|
newprofile.UUID=LLUUID.Random();
|
||||||
|
this.SimProfiles.Add(newprofile.UUID,newprofile);
|
||||||
|
return newprofile;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* is in OpenSim.Framework
|
||||||
|
public class SimProfileBase {
|
||||||
|
public LLUUID UUID;
|
||||||
|
public ulong regionhandle;
|
||||||
|
public string regionname;
|
||||||
|
public string sim_ip;
|
||||||
|
public uint sim_port;
|
||||||
|
public string caps_url;
|
||||||
|
public uint RegionLocX;
|
||||||
|
public uint RegionLocY;
|
||||||
|
public string sendkey;
|
||||||
|
public string recvkey;
|
||||||
|
|
||||||
|
|
||||||
|
public SimProfileBase() {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using ServerConsole;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
|
||||||
|
public class UserConsole : conscmd_callback {
|
||||||
|
public UserConsole() { }
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams) {
|
||||||
|
switch(cmd) {
|
||||||
|
case "help":
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("shutdown - shutdown the user server (USE CAUTION!)"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
ServerConsole.MainConsole.Instance.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Show(string ShowWhat) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,118 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using libsecondlife;
|
||||||
|
using ServerConsole;
|
||||||
|
using OpenSim.Framework.User;
|
||||||
|
using OpenSim.Framework.Sims;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class OpenUser_Main
|
||||||
|
{
|
||||||
|
|
||||||
|
public static OpenUser_Main userserver;
|
||||||
|
|
||||||
|
public UserHTTPServer _httpd;
|
||||||
|
public UserProfileManager _profilemanager;
|
||||||
|
public UserProfile GridGod;
|
||||||
|
public string DefaultStartupMsg;
|
||||||
|
public string GridURL;
|
||||||
|
public string GridSendKey;
|
||||||
|
public string GridRecvKey;
|
||||||
|
|
||||||
|
public Dictionary<LLUUID, UserProfile> UserSessions = new Dictionary<LLUUID, UserProfile>();
|
||||||
|
|
||||||
|
[STAThread]
|
||||||
|
public static void Main( string[] args )
|
||||||
|
{
|
||||||
|
Console.WriteLine("OpenUser " + VersionInfo.Version + "\n");
|
||||||
|
Console.WriteLine("Starting...\n");
|
||||||
|
ServerConsole.MainConsole.Instance = new MServerConsole(ServerConsole.ConsoleBase.ConsoleType.Local, "", 0, "opengrid-console.log", "OpenUser", new UserConsole());
|
||||||
|
|
||||||
|
userserver = new OpenUser_Main();
|
||||||
|
userserver.Startup();
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("\nEnter help for a list of commands\n");
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
ServerConsole.MainConsole.Instance.MainConsolePrompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Startup() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Please press enter to retain default settings");
|
||||||
|
|
||||||
|
this.GridURL=ServerConsole.MainConsole.Instance.CmdPrompt("Grid URL: ");
|
||||||
|
this.GridSendKey=ServerConsole.MainConsole.Instance.CmdPrompt("Key to send to grid: ");
|
||||||
|
this.GridRecvKey=ServerConsole.MainConsole.Instance.CmdPrompt("Key to expect from grid: ");
|
||||||
|
|
||||||
|
this.DefaultStartupMsg=ServerConsole.MainConsole.Instance.CmdPrompt("Default startup message for clients [Welcome to OGS!] :","Welcome to OGS!");
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Creating user profile manager");
|
||||||
|
_profilemanager = new UserProfileManager();
|
||||||
|
_profilemanager.InitUserProfiles();
|
||||||
|
_profilemanager.SetKeys(GridSendKey, GridRecvKey, GridURL, DefaultStartupMsg);
|
||||||
|
|
||||||
|
|
||||||
|
string tempfirstname;
|
||||||
|
string templastname;
|
||||||
|
string tempMD5Passwd;
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Please configure the grid god user:");
|
||||||
|
tempfirstname=ServerConsole.MainConsole.Instance.CmdPrompt("First name: ");
|
||||||
|
templastname=ServerConsole.MainConsole.Instance.CmdPrompt("Last name: ");
|
||||||
|
tempMD5Passwd=ServerConsole.MainConsole.Instance.PasswdPrompt("Password: ");
|
||||||
|
|
||||||
|
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
|
||||||
|
byte[] bs = System.Text.Encoding.UTF8.GetBytes(tempMD5Passwd);
|
||||||
|
bs = x.ComputeHash(bs);
|
||||||
|
System.Text.StringBuilder s = new System.Text.StringBuilder();
|
||||||
|
foreach (byte b in bs)
|
||||||
|
{
|
||||||
|
s.Append(b.ToString("x2").ToLower());
|
||||||
|
}
|
||||||
|
tempMD5Passwd = "$1$" + s.ToString();
|
||||||
|
|
||||||
|
GridGod=_profilemanager.CreateNewProfile(tempfirstname,templastname,tempMD5Passwd);
|
||||||
|
_profilemanager.SetGod(GridGod.UUID);
|
||||||
|
GridGod.homelookat = new LLVector3(-0.57343f, -0.819255f, 0f);
|
||||||
|
GridGod.homepos = new LLVector3(128f,128f,23f);
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting HTTP process");
|
||||||
|
_httpd = new UserHTTPServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProductVersion>8.0.50727</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{D45B6E48-5668-478D-B9CB-6D46E665FACF}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>OGS_UserServer</RootNamespace>
|
||||||
|
<AssemblyName>OGS-UserServer</AssemblyName>
|
||||||
|
<StartupObject>OpenGridServices.OpenUser_Main</StartupObject>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="libsecondlife, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\common\bin\libsecondlife.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\common\src\OGS-Console.cs">
|
||||||
|
<Link>OGS-Console.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\..\common\VersionInfo\VersionInfo.cs">
|
||||||
|
<Link>VersionInfo.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ConsoleCmds.cs" />
|
||||||
|
<Compile Include="Main.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="UserHttp.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{7667E6E2-F227-41A2-B1B2-315613E1BAFC}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<PublishUrlHistory>publish\</PublishUrlHistory>
|
||||||
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
|
<FallbackCulture>en-US</FallbackCulture>
|
||||||
|
<VerifyUploadedFiles>false</VerifyUploadedFiles>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("OGS-UserServer")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("OGS-UserServer")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2007")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("e266513a-090b-4d38-80f6-8599eef68c8c")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenGrid project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Net;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using libsecondlife;
|
||||||
|
using ServerConsole;
|
||||||
|
using OpenSim.Framework.User;
|
||||||
|
using OpenSim.Framework.Sims;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
|
||||||
|
namespace OpenGridServices
|
||||||
|
{
|
||||||
|
public class UserHTTPServer {
|
||||||
|
public Thread HTTPD;
|
||||||
|
public HttpListener Listener;
|
||||||
|
|
||||||
|
public UserHTTPServer() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Starting up HTTP Server");
|
||||||
|
HTTPD = new Thread(new ThreadStart(StartHTTP));
|
||||||
|
HTTPD.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartHTTP() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("UserHttp.cs:StartHTTP() - Spawned main thread OK");
|
||||||
|
Listener = new HttpListener();
|
||||||
|
|
||||||
|
Listener.Prefixes.Add("http://+:8002/userserver/");
|
||||||
|
Listener.Prefixes.Add("http://+:8002/usersessions/");
|
||||||
|
Listener.Start();
|
||||||
|
|
||||||
|
HttpListenerContext context;
|
||||||
|
while(true) {
|
||||||
|
context = Listener.GetContext();
|
||||||
|
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseXMLRPC(string requestBody) {
|
||||||
|
return OpenGridServices.OpenUser_Main.userserver._profilemanager.ParseXMLRPC(requestBody);
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseREST(HttpListenerRequest www_req) {
|
||||||
|
Console.WriteLine("INCOMING REST - " + www_req.RawUrl);
|
||||||
|
|
||||||
|
char[] splitter = {'/'};
|
||||||
|
string[] rest_params = www_req.RawUrl.Split(splitter);
|
||||||
|
string req_type = rest_params[1]; // First part of the URL is the type of request - usersessions/userprofiles/inventory/blabla
|
||||||
|
switch(req_type) {
|
||||||
|
case "usersessions":
|
||||||
|
LLUUID sessionid = new LLUUID(rest_params[2]); // get usersessions/sessionid
|
||||||
|
if(www_req.HttpMethod=="DELETE") {
|
||||||
|
foreach (libsecondlife.LLUUID UUID in OpenUser_Main.userserver._profilemanager.UserProfiles.Keys) {
|
||||||
|
if(OpenUser_Main.userserver._profilemanager.UserProfiles[UUID].CurrentSessionID==sessionid) {
|
||||||
|
OpenUser_Main.userserver._profilemanager.UserProfiles[UUID].CurrentSessionID=null;
|
||||||
|
OpenUser_Main.userserver._profilemanager.UserProfiles[UUID].CurrentSecureSessionID=null;
|
||||||
|
OpenUser_Main.userserver._profilemanager.UserProfiles[UUID].Circuits.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return "OK";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void HandleRequest(Object stateinfo) {
|
||||||
|
HttpListenerContext context=(HttpListenerContext)stateinfo;
|
||||||
|
|
||||||
|
HttpListenerRequest request = context.Request;
|
||||||
|
HttpListenerResponse response = context.Response;
|
||||||
|
|
||||||
|
response.KeepAlive=false;
|
||||||
|
response.SendChunked=false;
|
||||||
|
|
||||||
|
System.IO.Stream body = request.InputStream;
|
||||||
|
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
|
||||||
|
System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
|
||||||
|
|
||||||
|
string requestBody = reader.ReadToEnd();
|
||||||
|
body.Close();
|
||||||
|
reader.Close();
|
||||||
|
|
||||||
|
string responseString="";
|
||||||
|
switch(request.ContentType) {
|
||||||
|
case "text/xml":
|
||||||
|
// must be XML-RPC, so pass to the XML-RPC parser
|
||||||
|
|
||||||
|
responseString=ParseXMLRPC(requestBody);
|
||||||
|
response.AddHeader("Content-type","text/xml");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "text/plaintext":
|
||||||
|
responseString=ParseREST(request);
|
||||||
|
response.AddHeader("Content-type","text/plaintext");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
|
||||||
|
System.IO.Stream output = response.OutputStream;
|
||||||
|
response.SendChunked=false;
|
||||||
|
response.ContentLength64=buffer.Length;
|
||||||
|
output.Write(buffer,0,buffer.Length);
|
||||||
|
output.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,560 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Threading;
|
||||||
|
using libsecondlife;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
using OpenSim;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace OpenSim.Assets
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Manages local cache of assets and their sending to viewers.
|
||||||
|
/// </summary>
|
||||||
|
public class AssetCache : IAssetReceiver
|
||||||
|
{
|
||||||
|
public Dictionary<libsecondlife.LLUUID, AssetInfo> Assets;
|
||||||
|
public Dictionary<libsecondlife.LLUUID, TextureImage> Textures;
|
||||||
|
|
||||||
|
public List<AssetRequest> AssetRequests = new List<AssetRequest>(); //assets ready to be sent to viewers
|
||||||
|
public List<AssetRequest> TextureRequests = new List<AssetRequest>(); //textures ready to be sent
|
||||||
|
|
||||||
|
public Dictionary<LLUUID, AssetRequest> RequestedAssets = new Dictionary<LLUUID, AssetRequest>(); //Assets requested from the asset server
|
||||||
|
public Dictionary<LLUUID, AssetRequest> RequestedTextures = new Dictionary<LLUUID, AssetRequest>(); //Textures requested from the asset server
|
||||||
|
|
||||||
|
private Dictionary<libsecondlife.LLUUID, AssetBase> IncomingAssets;
|
||||||
|
|
||||||
|
private IAssetServer _assetServer;
|
||||||
|
private Thread _assetCacheThread;
|
||||||
|
private LLUUID[] textureList = new LLUUID[2];
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public AssetCache(IAssetServer assetServer)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Creating Asset cache");
|
||||||
|
_assetServer = assetServer;
|
||||||
|
_assetServer.SetReceiver(this);
|
||||||
|
Assets = new Dictionary<libsecondlife.LLUUID, AssetInfo>();
|
||||||
|
Textures = new Dictionary<libsecondlife.LLUUID, TextureImage>();
|
||||||
|
IncomingAssets = new Dictionary<libsecondlife.LLUUID, AssetBase>();
|
||||||
|
this._assetCacheThread = new Thread(new ThreadStart(RunAssetManager));
|
||||||
|
this._assetCacheThread.IsBackground = true;
|
||||||
|
this._assetCacheThread.Start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public void RunAssetManager()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.ProcessAssetQueue();
|
||||||
|
this.ProcessTextureQueue();
|
||||||
|
Thread.Sleep(100);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadDefaultTextureSet()
|
||||||
|
{
|
||||||
|
//hack: so we can give each user a set of textures
|
||||||
|
textureList[0] = new LLUUID("00000000-0000-0000-9999-000000000001");
|
||||||
|
textureList[1] = new LLUUID("00000000-0000-0000-9999-000000000002");
|
||||||
|
for (int i = 0; i < textureList.Length; i++)
|
||||||
|
{
|
||||||
|
this._assetServer.RequestAsset(textureList[i], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public AssetBase[] CreateNewInventorySet(LLUUID agentID)
|
||||||
|
{
|
||||||
|
AssetBase[] inventorySet = new AssetBase[this.textureList.Length];
|
||||||
|
for (int i = 0; i < textureList.Length; i++)
|
||||||
|
{
|
||||||
|
if (this.Textures.ContainsKey(textureList[i]))
|
||||||
|
{
|
||||||
|
inventorySet[i] = this.CloneImage(agentID, this.Textures[textureList[i]]);
|
||||||
|
TextureImage image = new TextureImage(inventorySet[i]);
|
||||||
|
this.Textures.Add(image.FullID, image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return inventorySet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
private void ProcessTextureQueue()
|
||||||
|
{
|
||||||
|
if (this.TextureRequests.Count == 0)
|
||||||
|
{
|
||||||
|
//no requests waiting
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int num;
|
||||||
|
|
||||||
|
if (this.TextureRequests.Count < 5)
|
||||||
|
{
|
||||||
|
//lower than 5 so do all of them
|
||||||
|
num = this.TextureRequests.Count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num = 5;
|
||||||
|
}
|
||||||
|
AssetRequest req;
|
||||||
|
for (int i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
req = (AssetRequest)this.TextureRequests[i];
|
||||||
|
|
||||||
|
if (req.PacketCounter == 0)
|
||||||
|
{
|
||||||
|
//first time for this request so send imagedata packet
|
||||||
|
if (req.NumPackets == 1)
|
||||||
|
{
|
||||||
|
//only one packet so send whole file
|
||||||
|
ImageDataPacket im = new ImageDataPacket();
|
||||||
|
im.ImageID.Packets = 1;
|
||||||
|
im.ImageID.ID = req.ImageInfo.FullID;
|
||||||
|
im.ImageID.Size = (uint)req.ImageInfo.Data.Length;
|
||||||
|
im.ImageData.Data = req.ImageInfo.Data;
|
||||||
|
im.ImageID.Codec = 2;
|
||||||
|
req.RequestUser.OutPacket(im);
|
||||||
|
req.PacketCounter++;
|
||||||
|
//req.ImageInfo.l= time;
|
||||||
|
//System.Console.WriteLine("sent texture: "+req.image_info.FullID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//more than one packet so split file up
|
||||||
|
ImageDataPacket im = new ImageDataPacket();
|
||||||
|
im.ImageID.Packets = (ushort)req.NumPackets;
|
||||||
|
im.ImageID.ID = req.ImageInfo.FullID;
|
||||||
|
im.ImageID.Size = (uint)req.ImageInfo.Data.Length;
|
||||||
|
im.ImageData.Data = new byte[600];
|
||||||
|
Array.Copy(req.ImageInfo.Data, 0, im.ImageData.Data, 0, 600);
|
||||||
|
im.ImageID.Codec = 2;
|
||||||
|
req.RequestUser.OutPacket(im);
|
||||||
|
req.PacketCounter++;
|
||||||
|
//req.ImageInfo.last_used = time;
|
||||||
|
//System.Console.WriteLine("sent first packet of texture:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//send imagepacket
|
||||||
|
//more than one packet so split file up
|
||||||
|
ImagePacketPacket im = new ImagePacketPacket();
|
||||||
|
im.ImageID.Packet = (ushort)req.PacketCounter;
|
||||||
|
im.ImageID.ID = req.ImageInfo.FullID;
|
||||||
|
int size = req.ImageInfo.Data.Length - 600 - 1000 * (req.PacketCounter - 1);
|
||||||
|
if (size > 1000) size = 1000;
|
||||||
|
im.ImageData.Data = new byte[size];
|
||||||
|
Array.Copy(req.ImageInfo.Data, 600 + 1000 * (req.PacketCounter - 1), im.ImageData.Data, 0, size);
|
||||||
|
req.RequestUser.OutPacket(im);
|
||||||
|
req.PacketCounter++;
|
||||||
|
//req.ImageInfo.last_used = time;
|
||||||
|
//System.Console.WriteLine("sent a packet of texture: "+req.image_info.FullID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//remove requests that have been completed
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
req = (AssetRequest)this.TextureRequests[count];
|
||||||
|
if (req.PacketCounter == req.NumPackets)
|
||||||
|
{
|
||||||
|
this.TextureRequests.Remove(req);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void AssetReceived(AssetBase asset, bool IsTexture)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (asset.FullID != LLUUID.Zero) // if it is set to zero then the asset wasn't found by the server
|
||||||
|
{
|
||||||
|
//check if it is a texture or not
|
||||||
|
//then add to the correct cache list
|
||||||
|
//then check for waiting requests for this asset/texture (in the Requested lists)
|
||||||
|
//and move those requests into the Requests list.
|
||||||
|
if (IsTexture)
|
||||||
|
{
|
||||||
|
TextureImage image = new TextureImage(asset);
|
||||||
|
this.Textures.Add(image.FullID, image);
|
||||||
|
if (this.RequestedTextures.ContainsKey(image.FullID))
|
||||||
|
{
|
||||||
|
AssetRequest req = this.RequestedTextures[image.FullID];
|
||||||
|
req.ImageInfo = image;
|
||||||
|
this.RequestedTextures.Remove(image.FullID);
|
||||||
|
this.TextureRequests.Add(req);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AssetInfo assetInf = new AssetInfo(asset);
|
||||||
|
this.Assets.Add(assetInf.FullID, assetInf);
|
||||||
|
if (this.RequestedAssets.ContainsKey(assetInf.FullID))
|
||||||
|
{
|
||||||
|
AssetRequest req = this.RequestedAssets[assetInf.FullID];
|
||||||
|
req.AssetInf = assetInf;
|
||||||
|
this.RequestedAssets.Remove(assetInf.FullID);
|
||||||
|
this.AssetRequests.Add(req);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AssetNotFound(AssetBase asset)
|
||||||
|
{
|
||||||
|
//the asset server had no knowledge of requested asset
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Assets
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userInfo"></param>
|
||||||
|
/// <param name="transferRequest"></param>
|
||||||
|
public void AddAssetRequest(OpenSimClient userInfo, TransferRequestPacket transferRequest)
|
||||||
|
{
|
||||||
|
LLUUID requestID = new LLUUID(transferRequest.TransferInfo.Params, 0);
|
||||||
|
//check to see if asset is in local cache, if not we need to request it from asset server.
|
||||||
|
if (!this.Assets.ContainsKey(requestID))
|
||||||
|
{
|
||||||
|
//not found asset
|
||||||
|
// so request from asset server
|
||||||
|
if (!this.RequestedAssets.ContainsKey(requestID))
|
||||||
|
{
|
||||||
|
AssetRequest request = new AssetRequest();
|
||||||
|
request.RequestUser = userInfo;
|
||||||
|
request.RequestAssetID = requestID;
|
||||||
|
request.TransferRequestID = transferRequest.TransferInfo.TransferID;
|
||||||
|
this.RequestedAssets.Add(requestID, request);
|
||||||
|
this._assetServer.RequestAsset(requestID, false);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//it is in our cache
|
||||||
|
AssetInfo asset = this.Assets[requestID];
|
||||||
|
|
||||||
|
//work out how many packets it should be sent in
|
||||||
|
// and add to the AssetRequests list
|
||||||
|
AssetRequest req = new AssetRequest();
|
||||||
|
req.RequestUser = userInfo;
|
||||||
|
req.RequestAssetID = requestID;
|
||||||
|
req.TransferRequestID = transferRequest.TransferInfo.TransferID;
|
||||||
|
req.AssetInf = asset;
|
||||||
|
|
||||||
|
if (asset.Data.LongLength > 600)
|
||||||
|
{
|
||||||
|
//over 600 bytes so split up file
|
||||||
|
req.NumPackets = 1 + (int)(asset.Data.Length - 600 + 999) / 1000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
req.NumPackets = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.AssetRequests.Add(req);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
private void ProcessAssetQueue()
|
||||||
|
{
|
||||||
|
if (this.AssetRequests.Count == 0)
|
||||||
|
{
|
||||||
|
//no requests waiting
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int num;
|
||||||
|
|
||||||
|
if (this.AssetRequests.Count < 5)
|
||||||
|
{
|
||||||
|
//lower than 5 so do all of them
|
||||||
|
num = this.AssetRequests.Count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num = 5;
|
||||||
|
}
|
||||||
|
AssetRequest req;
|
||||||
|
for (int i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
req = (AssetRequest)this.AssetRequests[i];
|
||||||
|
|
||||||
|
TransferInfoPacket Transfer = new TransferInfoPacket();
|
||||||
|
Transfer.TransferInfo.ChannelType = 2;
|
||||||
|
Transfer.TransferInfo.Status = 0;
|
||||||
|
Transfer.TransferInfo.TargetType = 0;
|
||||||
|
Transfer.TransferInfo.Params = req.RequestAssetID.GetBytes();
|
||||||
|
Transfer.TransferInfo.Size = (int)req.AssetInf.Data.Length;
|
||||||
|
Transfer.TransferInfo.TransferID = req.TransferRequestID;
|
||||||
|
req.RequestUser.OutPacket(Transfer);
|
||||||
|
|
||||||
|
if (req.NumPackets == 1)
|
||||||
|
{
|
||||||
|
TransferPacketPacket TransferPacket = new TransferPacketPacket();
|
||||||
|
TransferPacket.TransferData.Packet = 0;
|
||||||
|
TransferPacket.TransferData.ChannelType = 2;
|
||||||
|
TransferPacket.TransferData.TransferID = req.TransferRequestID;
|
||||||
|
TransferPacket.TransferData.Data = req.AssetInf.Data;
|
||||||
|
TransferPacket.TransferData.Status = 1;
|
||||||
|
req.RequestUser.OutPacket(TransferPacket);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//more than one packet so split file up , for now it can't be bigger than 2000 bytes
|
||||||
|
TransferPacketPacket TransferPacket = new TransferPacketPacket();
|
||||||
|
TransferPacket.TransferData.Packet = 0;
|
||||||
|
TransferPacket.TransferData.ChannelType = 2;
|
||||||
|
TransferPacket.TransferData.TransferID = req.TransferRequestID;
|
||||||
|
byte[] chunk = new byte[1000];
|
||||||
|
Array.Copy(req.AssetInf.Data, chunk, 1000);
|
||||||
|
TransferPacket.TransferData.Data = chunk;
|
||||||
|
TransferPacket.TransferData.Status = 0;
|
||||||
|
req.RequestUser.OutPacket(TransferPacket);
|
||||||
|
|
||||||
|
TransferPacket = new TransferPacketPacket();
|
||||||
|
TransferPacket.TransferData.Packet = 1;
|
||||||
|
TransferPacket.TransferData.ChannelType = 2;
|
||||||
|
TransferPacket.TransferData.TransferID = req.TransferRequestID;
|
||||||
|
byte[] chunk1 = new byte[(req.AssetInf.Data.Length - 1000)];
|
||||||
|
Array.Copy(req.AssetInf.Data, 1000, chunk1, 0, chunk1.Length);
|
||||||
|
TransferPacket.TransferData.Data = chunk1;
|
||||||
|
TransferPacket.TransferData.Status = 1;
|
||||||
|
req.RequestUser.OutPacket(TransferPacket);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//remove requests that have been completed
|
||||||
|
for (int i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
this.AssetRequests.RemoveAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public AssetInfo CloneAsset(LLUUID newOwner, AssetInfo sourceAsset)
|
||||||
|
{
|
||||||
|
AssetInfo newAsset = new AssetInfo();
|
||||||
|
newAsset.Data = new byte[sourceAsset.Data.Length];
|
||||||
|
Array.Copy(sourceAsset.Data, newAsset.Data, sourceAsset.Data.Length);
|
||||||
|
newAsset.FullID = LLUUID.Random();
|
||||||
|
newAsset.Type = sourceAsset.Type;
|
||||||
|
newAsset.InvType = sourceAsset.InvType;
|
||||||
|
return (newAsset);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Textures
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userInfo"></param>
|
||||||
|
/// <param name="imageID"></param>
|
||||||
|
public void AddTextureRequest(OpenSimClient userInfo, LLUUID imageID)
|
||||||
|
{
|
||||||
|
//check to see if texture is in local cache, if not request from asset server
|
||||||
|
if (!this.Textures.ContainsKey(imageID))
|
||||||
|
{
|
||||||
|
if (!this.RequestedTextures.ContainsKey(imageID))
|
||||||
|
{
|
||||||
|
//not is cache so request from asset server
|
||||||
|
AssetRequest request = new AssetRequest();
|
||||||
|
request.RequestUser = userInfo;
|
||||||
|
request.RequestAssetID = imageID;
|
||||||
|
request.IsTextureRequest = true;
|
||||||
|
this.RequestedTextures.Add(imageID, request);
|
||||||
|
this._assetServer.RequestAsset(imageID, true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureImage imag = this.Textures[imageID];
|
||||||
|
AssetRequest req = new AssetRequest();
|
||||||
|
req.RequestUser = userInfo;
|
||||||
|
req.RequestAssetID = imageID;
|
||||||
|
req.IsTextureRequest = true;
|
||||||
|
req.ImageInfo = imag;
|
||||||
|
|
||||||
|
if (imag.Data.LongLength > 600)
|
||||||
|
{
|
||||||
|
//over 600 bytes so split up file
|
||||||
|
req.NumPackets = 1 + (int)(imag.Data.Length - 600 + 999) / 1000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
req.NumPackets = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.TextureRequests.Add(req);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextureImage CloneImage(LLUUID newOwner, TextureImage source)
|
||||||
|
{
|
||||||
|
TextureImage newImage = new TextureImage();
|
||||||
|
newImage.Data = new byte[source.Data.Length];
|
||||||
|
Array.Copy(source.Data, newImage.Data, source.Data.Length);
|
||||||
|
//newImage.filename = source.filename;
|
||||||
|
newImage.FullID = LLUUID.Random();
|
||||||
|
newImage.Name = source.Name;
|
||||||
|
return (newImage);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region viewer asset uploading
|
||||||
|
/* public AssetBase UploadPacket(AssetUploadRequestPacket pack)
|
||||||
|
{
|
||||||
|
AssetBase asset = null;
|
||||||
|
if(this.IncomingAssets.ContainsKey(pack.AssetBlock.TransactionID))
|
||||||
|
{
|
||||||
|
// not the first packet of this transaction
|
||||||
|
asset = this.IncomingAssets[pack.AssetBlock.TransactionID];
|
||||||
|
byte[] idata = new byte[asset.Data.Length + pack.AssetBlock.AssetData.Length];
|
||||||
|
Array.Copy(asset.Data, 0, idata, 0, asset.Data.Length);
|
||||||
|
Array.Copy(pack.AssetBlock.AssetData, 0, idata, asset.Data.Length, pack.AssetBlock.AssetData.Length);
|
||||||
|
asset.Data = idata;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//first packet for transaction
|
||||||
|
asset = new AssetBase();
|
||||||
|
asset.FullID = LLUUID.Random();
|
||||||
|
asset.Type = pack.AssetBlock.Type;
|
||||||
|
asset.InvType = asset.Type;
|
||||||
|
asset.Data = pack.AssetBlock.AssetData;
|
||||||
|
//this.IncomingAssets.Add(pack.AssetBlock.TransactionID,asset);
|
||||||
|
TextureImage image = new TextureImage(asset);
|
||||||
|
this.Textures.Add(image.FullID, image);
|
||||||
|
|
||||||
|
}
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
public AssetBase TransactionComplete(LLUUID transactionID)
|
||||||
|
{
|
||||||
|
AssetBase asset = null;
|
||||||
|
if(this.IncomingAssets.ContainsKey(transactionID))
|
||||||
|
{
|
||||||
|
// not the first packet of this transaction
|
||||||
|
asset = this.IncomingAssets[transactionID];
|
||||||
|
if(asset.Type == 0)
|
||||||
|
{
|
||||||
|
TextureImage image = new TextureImage(asset);
|
||||||
|
this.Textures.Add(image.FullID, image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return asset;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AssetRequest
|
||||||
|
{
|
||||||
|
public OpenSimClient RequestUser;
|
||||||
|
public LLUUID RequestAssetID;
|
||||||
|
public AssetInfo AssetInf;
|
||||||
|
public TextureImage ImageInfo;
|
||||||
|
public LLUUID TransferRequestID;
|
||||||
|
public long DataPointer = 0;
|
||||||
|
public int NumPackets = 0;
|
||||||
|
public int PacketCounter = 0;
|
||||||
|
public bool IsTextureRequest;
|
||||||
|
//public bool AssetInCache;
|
||||||
|
//public int TimeRequested;
|
||||||
|
|
||||||
|
public AssetRequest()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AssetInfo : AssetBase
|
||||||
|
{
|
||||||
|
public AssetInfo()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public AssetInfo(AssetBase aBase)
|
||||||
|
{
|
||||||
|
Data = aBase.Data;
|
||||||
|
FullID = aBase.FullID;
|
||||||
|
Type = aBase.Type;
|
||||||
|
InvType = aBase.InvType;
|
||||||
|
Name = aBase.Name;
|
||||||
|
Description = aBase.Description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TextureImage : AssetBase
|
||||||
|
{
|
||||||
|
public TextureImage()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextureImage(AssetBase aBase)
|
||||||
|
{
|
||||||
|
Data = aBase.Data;
|
||||||
|
FullID = aBase.FullID;
|
||||||
|
Type = aBase.Type;
|
||||||
|
InvType = aBase.InvType;
|
||||||
|
Name = aBase.Name;
|
||||||
|
Description = aBase.Description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,199 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 OpenSim;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
//using OpenSim.GridServers;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace OpenSim.Assets
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of InventoryManager.
|
||||||
|
/// </summary>
|
||||||
|
public class InventoryManager
|
||||||
|
{
|
||||||
|
private Dictionary<LLUUID, AgentInventory> _agentsInventory;
|
||||||
|
private List<UserServerRequest> _serverRequests; //list of requests made to user server.
|
||||||
|
private System.Text.Encoding _enc = System.Text.Encoding.ASCII;
|
||||||
|
private const uint FULL_MASK_PERMISSIONS = 2147483647;
|
||||||
|
|
||||||
|
public InventoryManager()
|
||||||
|
{
|
||||||
|
_agentsInventory = new Dictionary<LLUUID, AgentInventory>();
|
||||||
|
_serverRequests = new List<UserServerRequest>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddNewAgentsInventory(AgentInventory agentInventory)
|
||||||
|
{
|
||||||
|
this._agentsInventory.Add(agentInventory.AgentID, agentInventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClientLeaving(LLUUID clientID)
|
||||||
|
{
|
||||||
|
if (this._agentsInventory.ContainsKey(clientID))
|
||||||
|
{
|
||||||
|
this._agentsInventory.Remove(clientID);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public bool CreateNewInventoryFolder(OpenSimClient remoteClient, LLUUID folderID)
|
||||||
|
{
|
||||||
|
bool res = false;
|
||||||
|
if (folderID != LLUUID.Zero) //don't create a folder with a zero id
|
||||||
|
{
|
||||||
|
if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
|
||||||
|
{
|
||||||
|
res = this._agentsInventory[remoteClient.AgentID].CreateNewFolder(folderID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LLUUID AddNewInventoryItem(OpenSimClient remoteClient, LLUUID folderID, OpenSim.Framework.Assets.AssetBase asset)
|
||||||
|
{
|
||||||
|
LLUUID newItem = null;
|
||||||
|
if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
|
||||||
|
{
|
||||||
|
newItem = this._agentsInventory[remoteClient.AgentID].AddToInventory(folderID, asset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FetchInventoryDescendents(OpenSimClient userInfo, FetchInventoryDescendentsPacket FetchDescend)
|
||||||
|
{
|
||||||
|
if (this._agentsInventory.ContainsKey(userInfo.AgentID))
|
||||||
|
{
|
||||||
|
AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID];
|
||||||
|
if (FetchDescend.InventoryData.FetchItems)
|
||||||
|
{
|
||||||
|
if (agentInventory.InventoryFolders.ContainsKey(FetchDescend.InventoryData.FolderID))
|
||||||
|
{
|
||||||
|
InventoryFolder Folder = agentInventory.InventoryFolders[FetchDescend.InventoryData.FolderID];
|
||||||
|
InventoryDescendentsPacket Descend = new InventoryDescendentsPacket();
|
||||||
|
Descend.AgentData.AgentID = userInfo.AgentID;
|
||||||
|
Descend.AgentData.OwnerID = Folder.OwnerID;
|
||||||
|
Descend.AgentData.FolderID = FetchDescend.InventoryData.FolderID;
|
||||||
|
Descend.AgentData.Descendents = Folder.Items.Count;
|
||||||
|
Descend.AgentData.Version = Folder.Items.Count;
|
||||||
|
|
||||||
|
|
||||||
|
Descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[Folder.Items.Count];
|
||||||
|
for (int i = 0; i < Folder.Items.Count; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
InventoryItem Item = Folder.Items[i];
|
||||||
|
Descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock();
|
||||||
|
Descend.ItemData[i].ItemID = Item.ItemID;
|
||||||
|
Descend.ItemData[i].AssetID = Item.AssetID;
|
||||||
|
Descend.ItemData[i].CreatorID = Item.CreatorID;
|
||||||
|
Descend.ItemData[i].BaseMask = FULL_MASK_PERMISSIONS;
|
||||||
|
Descend.ItemData[i].CreationDate = 1000;
|
||||||
|
Descend.ItemData[i].Description = _enc.GetBytes(Item.Description + "\0");
|
||||||
|
Descend.ItemData[i].EveryoneMask = FULL_MASK_PERMISSIONS;
|
||||||
|
Descend.ItemData[i].Flags = 1;
|
||||||
|
Descend.ItemData[i].FolderID = Item.FolderID;
|
||||||
|
Descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
|
||||||
|
Descend.ItemData[i].GroupMask = FULL_MASK_PERMISSIONS;
|
||||||
|
Descend.ItemData[i].InvType = Item.InvType;
|
||||||
|
Descend.ItemData[i].Name = _enc.GetBytes(Item.Name + "\0");
|
||||||
|
Descend.ItemData[i].NextOwnerMask = FULL_MASK_PERMISSIONS;
|
||||||
|
Descend.ItemData[i].OwnerID = Item.OwnerID;
|
||||||
|
Descend.ItemData[i].OwnerMask = FULL_MASK_PERMISSIONS;
|
||||||
|
Descend.ItemData[i].SalePrice = 100;
|
||||||
|
Descend.ItemData[i].SaleType = 0;
|
||||||
|
Descend.ItemData[i].Type = Item.Type;
|
||||||
|
Descend.ItemData[i].CRC = libsecondlife.Helpers.InventoryCRC(1000, 0, Descend.ItemData[i].InvType, Descend.ItemData[i].Type, Descend.ItemData[i].AssetID, Descend.ItemData[i].GroupID, 100, Descend.ItemData[i].OwnerID, Descend.ItemData[i].CreatorID, Descend.ItemData[i].ItemID, Descend.ItemData[i].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS);
|
||||||
|
}
|
||||||
|
userInfo.OutPacket(Descend);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("fetch subfolders");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FetchInventory(OpenSimClient userInfo, FetchInventoryPacket FetchItems)
|
||||||
|
{
|
||||||
|
if (this._agentsInventory.ContainsKey(userInfo.AgentID))
|
||||||
|
{
|
||||||
|
AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID];
|
||||||
|
|
||||||
|
for (int i = 0; i < FetchItems.InventoryData.Length; i++)
|
||||||
|
{
|
||||||
|
if (agentInventory.InventoryItems.ContainsKey(FetchItems.InventoryData[i].ItemID))
|
||||||
|
{
|
||||||
|
InventoryItem Item = agentInventory.InventoryItems[FetchItems.InventoryData[i].ItemID];
|
||||||
|
FetchInventoryReplyPacket InventoryReply = new FetchInventoryReplyPacket();
|
||||||
|
InventoryReply.AgentData.AgentID = userInfo.AgentID;
|
||||||
|
InventoryReply.InventoryData = new FetchInventoryReplyPacket.InventoryDataBlock[1];
|
||||||
|
InventoryReply.InventoryData[0] = new FetchInventoryReplyPacket.InventoryDataBlock();
|
||||||
|
InventoryReply.InventoryData[0].ItemID = Item.ItemID;
|
||||||
|
InventoryReply.InventoryData[0].AssetID = Item.AssetID;
|
||||||
|
InventoryReply.InventoryData[0].CreatorID = Item.CreatorID;
|
||||||
|
InventoryReply.InventoryData[0].BaseMask = FULL_MASK_PERMISSIONS;
|
||||||
|
InventoryReply.InventoryData[0].CreationDate = 1000;
|
||||||
|
InventoryReply.InventoryData[0].Description = _enc.GetBytes(Item.Description + "\0");
|
||||||
|
InventoryReply.InventoryData[0].EveryoneMask = FULL_MASK_PERMISSIONS;
|
||||||
|
InventoryReply.InventoryData[0].Flags = 1;
|
||||||
|
InventoryReply.InventoryData[0].FolderID = Item.FolderID;
|
||||||
|
InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
|
||||||
|
InventoryReply.InventoryData[0].GroupMask = FULL_MASK_PERMISSIONS;
|
||||||
|
InventoryReply.InventoryData[0].InvType = Item.InvType;
|
||||||
|
InventoryReply.InventoryData[0].Name = _enc.GetBytes(Item.Name + "\0");
|
||||||
|
InventoryReply.InventoryData[0].NextOwnerMask = FULL_MASK_PERMISSIONS;
|
||||||
|
InventoryReply.InventoryData[0].OwnerID = Item.OwnerID;
|
||||||
|
InventoryReply.InventoryData[0].OwnerMask = FULL_MASK_PERMISSIONS;
|
||||||
|
InventoryReply.InventoryData[0].SalePrice = 100;
|
||||||
|
InventoryReply.InventoryData[0].SaleType = 0;
|
||||||
|
InventoryReply.InventoryData[0].Type = Item.Type;
|
||||||
|
InventoryReply.InventoryData[0].CRC = libsecondlife.Helpers.InventoryCRC(1000, 0, InventoryReply.InventoryData[0].InvType, InventoryReply.InventoryData[0].Type, InventoryReply.InventoryData[0].AssetID, InventoryReply.InventoryData[0].GroupID, 100, InventoryReply.InventoryData[0].OwnerID, InventoryReply.InventoryData[0].CreatorID, InventoryReply.InventoryData[0].ItemID, InventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS);
|
||||||
|
userInfo.OutPacket(InventoryReply);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class UserServerRequest
|
||||||
|
{
|
||||||
|
public UserServerRequest()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,175 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSimCAPS project, http://osgrid.org/
|
||||||
|
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Net;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using libsecondlife;
|
||||||
|
using ServerConsole;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
// Dummy HTTP server, does nothing useful for now
|
||||||
|
|
||||||
|
public class SimCAPSHTTPServer
|
||||||
|
{
|
||||||
|
public Thread HTTPD;
|
||||||
|
public HttpListener Listener;
|
||||||
|
|
||||||
|
public SimCAPSHTTPServer()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Starting up HTTP Server");
|
||||||
|
HTTPD = new Thread(new ThreadStart(StartHTTP));
|
||||||
|
HTTPD.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartHTTP()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("SimHttp.cs:StartHTTP() - Spawned main thread OK");
|
||||||
|
Listener = new HttpListener();
|
||||||
|
|
||||||
|
Listener.Prefixes.Add("http://+:" + OpenSim_Main.cfg.IPListenPort + "/");
|
||||||
|
Listener.Start();
|
||||||
|
|
||||||
|
HttpListenerContext context;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
context = Listener.GetContext();
|
||||||
|
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseXMLRPC(string requestBody)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
|
||||||
|
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
switch (request.MethodName)
|
||||||
|
{
|
||||||
|
case "expect_user":
|
||||||
|
agentcircuitdata agent_data = new agentcircuitdata();
|
||||||
|
agent_data.SessionID = new LLUUID((string)requestData["session_id"]);
|
||||||
|
agent_data.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]);
|
||||||
|
agent_data.firstname = (string)requestData["firstname"];
|
||||||
|
agent_data.lastname = (string)requestData["lastname"];
|
||||||
|
agent_data.AgentID = new LLUUID((string)requestData["agent_id"]);
|
||||||
|
agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
|
||||||
|
if (OpenSim_Main.gridServers.GridServer.GetName() == "Remote")
|
||||||
|
{
|
||||||
|
((RemoteGridBase)OpenSim_Main.gridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
|
||||||
|
}
|
||||||
|
return "<?xml version=\"1.0\"?><methodResponse><params /></methodResponse>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseREST(string requestBody, string requestURL)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static string ParseLLSDXML(string requestBody)
|
||||||
|
{
|
||||||
|
// dummy function for now - IMPLEMENT ME!
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HandleRequest(Object stateinfo)
|
||||||
|
{
|
||||||
|
HttpListenerContext context = (HttpListenerContext)stateinfo;
|
||||||
|
|
||||||
|
HttpListenerRequest request = context.Request;
|
||||||
|
HttpListenerResponse response = context.Response;
|
||||||
|
|
||||||
|
response.KeepAlive = false;
|
||||||
|
response.SendChunked = false;
|
||||||
|
|
||||||
|
System.IO.Stream body = request.InputStream;
|
||||||
|
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
|
||||||
|
System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
|
||||||
|
|
||||||
|
string requestBody = reader.ReadToEnd();
|
||||||
|
body.Close();
|
||||||
|
reader.Close();
|
||||||
|
|
||||||
|
string responseString = "";
|
||||||
|
switch (request.ContentType)
|
||||||
|
{
|
||||||
|
case "text/xml":
|
||||||
|
// must be XML-RPC, so pass to the XML-RPC parser
|
||||||
|
|
||||||
|
responseString = ParseXMLRPC(requestBody);
|
||||||
|
response.AddHeader("Content-type", "text/xml");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "application/xml":
|
||||||
|
// probably LLSD we hope, otherwise it should be ignored by the parser
|
||||||
|
responseString = ParseLLSDXML(requestBody);
|
||||||
|
response.AddHeader("Content-type", "application/xml");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case null:
|
||||||
|
// must be REST or invalid crap, so pass to the REST parser
|
||||||
|
responseString = ParseREST(request.Url.OriginalString, requestBody);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
|
||||||
|
System.IO.Stream output = response.OutputStream;
|
||||||
|
response.SendChunked = false;
|
||||||
|
response.ContentLength64 = buffer.Length;
|
||||||
|
output.Write(buffer, 0, buffer.Length);
|
||||||
|
output.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
* Copyright (c) <year>, <copyright holder>
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.IO;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.world;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// This class handles connection to the underlying database used for configuration of the region.
|
||||||
|
/// Region content is also stored by this class. The main entry point is InitConfig() which attempts to locate
|
||||||
|
/// opensim.yap in the current working directory. If opensim.yap can not be found, default settings are loaded from
|
||||||
|
/// what is hardcoded here and then saved into opensim.yap for future startups.
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class SimConfig
|
||||||
|
{
|
||||||
|
public string RegionName;
|
||||||
|
|
||||||
|
public uint RegionLocX;
|
||||||
|
public uint RegionLocY;
|
||||||
|
public ulong RegionHandle;
|
||||||
|
|
||||||
|
public int IPListenPort;
|
||||||
|
public string IPListenAddr;
|
||||||
|
|
||||||
|
public string AssetURL;
|
||||||
|
public string AssetSendKey;
|
||||||
|
|
||||||
|
public string GridURL;
|
||||||
|
public string GridSendKey;
|
||||||
|
|
||||||
|
public abstract void InitConfig();
|
||||||
|
public abstract void LoadFromGrid();
|
||||||
|
public abstract World LoadWorld();
|
||||||
|
public abstract void SaveMap();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ISimConfig
|
||||||
|
{
|
||||||
|
SimConfig GetConfigObject();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("SimConfig")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("SimConfig")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,174 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 OpenSim;
|
||||||
|
using OpenSim.Framework.Utilities;
|
||||||
|
using OpenSim.world;
|
||||||
|
using Db4objects.Db4o;
|
||||||
|
|
||||||
|
namespace Db40SimConfig
|
||||||
|
{
|
||||||
|
public class Db40ConfigPlugin: ISimConfig
|
||||||
|
{
|
||||||
|
public SimConfig GetConfigObject()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Loading Db40Config dll");
|
||||||
|
return ( new DbSimConfig());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DbSimConfig :SimConfig
|
||||||
|
{
|
||||||
|
private IObjectContainer db;
|
||||||
|
|
||||||
|
public void LoadDefaults() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadDefaults() - Please press enter to retain default or enter new settings");
|
||||||
|
|
||||||
|
this.RegionName=ServerConsole.MainConsole.Instance.CmdPrompt("Name [OpenSim test]: ","OpenSim test");
|
||||||
|
this.RegionLocX=(uint)Convert.ToInt32(ServerConsole.MainConsole.Instance.CmdPrompt("Grid Location X [997]: ","997"));
|
||||||
|
this.RegionLocY=(uint)Convert.ToInt32(ServerConsole.MainConsole.Instance.CmdPrompt("Grid Location Y [996]: ","996"));
|
||||||
|
this.IPListenPort=Convert.ToInt32(ServerConsole.MainConsole.Instance.CmdPrompt("UDP port for client connections [9000]: ","9000"));
|
||||||
|
this.IPListenAddr=ServerConsole.MainConsole.Instance.CmdPrompt("IP Address to listen on for client connections [127.0.0.1]: ","127.0.0.1");
|
||||||
|
|
||||||
|
if(!OpenSim_Main.sim.sandbox)
|
||||||
|
{
|
||||||
|
this.AssetURL=ServerConsole.MainConsole.Instance.CmdPrompt("Asset server URL: ");
|
||||||
|
this.AssetSendKey=ServerConsole.MainConsole.Instance.CmdPrompt("Asset server key: ");
|
||||||
|
this.GridURL=ServerConsole.MainConsole.Instance.CmdPrompt("Grid server URL: ");
|
||||||
|
this.GridSendKey=ServerConsole.MainConsole.Instance.CmdPrompt("Grid server key: ");
|
||||||
|
}
|
||||||
|
this.RegionHandle = Util.UIntsToLong((RegionLocX*256), (RegionLocY*256));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void InitConfig() {
|
||||||
|
try {
|
||||||
|
db = Db4oFactory.OpenFile("opensim.yap");
|
||||||
|
IObjectSet result = db.Get(typeof(DbSimConfig));
|
||||||
|
if(result.Count==1) {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Found a SimConfig object in the local database, loading");
|
||||||
|
foreach (DbSimConfig cfg in result) {
|
||||||
|
this.RegionName = cfg.RegionName;
|
||||||
|
this.RegionLocX = cfg.RegionLocX;
|
||||||
|
this.RegionLocY = cfg.RegionLocY;
|
||||||
|
this.RegionHandle = Util.UIntsToLong((RegionLocX*256), (RegionLocY*256));
|
||||||
|
this.IPListenPort = cfg.IPListenPort;
|
||||||
|
this.IPListenAddr = cfg.IPListenAddr;
|
||||||
|
this.AssetURL = cfg.AssetURL;
|
||||||
|
this.AssetSendKey = cfg.AssetSendKey;
|
||||||
|
this.GridURL = cfg.GridURL;
|
||||||
|
this.GridSendKey = cfg.GridSendKey;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults");
|
||||||
|
LoadDefaults();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Writing out default settings to local database");
|
||||||
|
db.Set(this);
|
||||||
|
}
|
||||||
|
} catch(Exception e) {
|
||||||
|
db.Close();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Exception occured");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Sim settings loaded:");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Name: " + this.RegionName);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Region Handle: " + this.RegionHandle.ToString());
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Listening on IP: " + this.IPListenAddr + ":" + this.IPListenPort);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Sandbox Mode? " + OpenSim_Main.sim.sandbox.ToString());
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Asset URL: " + this.AssetURL);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Asset key: " + this.AssetSendKey);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Grid URL: " + this.GridURL);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Grid key: " + this.GridSendKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override World LoadWorld()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Loading world....");
|
||||||
|
World blank = new World();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Looking for a heightmap in local DB");
|
||||||
|
IObjectSet world_result = db.Get(typeof(MapStorage));
|
||||||
|
if(world_result.Count>0) {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Found a heightmap in local database, loading");
|
||||||
|
MapStorage map=(MapStorage)world_result.Next();
|
||||||
|
blank.LandMap = map.Map;
|
||||||
|
} else {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - No heightmap found, generating new one");
|
||||||
|
HeightmapGenHills hills = new HeightmapGenHills();
|
||||||
|
blank.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Saving heightmap to local database");
|
||||||
|
MapStorage map= new MapStorage();
|
||||||
|
map.Map = blank.LandMap;
|
||||||
|
db.Set(map);
|
||||||
|
db.Commit();
|
||||||
|
}
|
||||||
|
return blank;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SaveMap()
|
||||||
|
{
|
||||||
|
IObjectSet world_result = db.Get(typeof(MapStorage));
|
||||||
|
if(world_result.Count>0) {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - updating saved copy of heightmap in local database");
|
||||||
|
MapStorage map=(MapStorage)world_result.Next();
|
||||||
|
db.Delete(map);
|
||||||
|
}
|
||||||
|
MapStorage map1= new MapStorage();
|
||||||
|
map1.Map = OpenSim_Main.local_world.LandMap;
|
||||||
|
db.Set(map1);
|
||||||
|
db.Commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LoadFromGrid() {
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadFromGrid() - dummy function, DOING ABSOLUTELY NOTHING AT ALL!!!");
|
||||||
|
// TODO: Make this crap work
|
||||||
|
/* WebRequest GridLogin = WebRequest.Create(this.GridURL + "regions/" + this.RegionHandle.ToString() + "/login");
|
||||||
|
WebResponse GridResponse = GridLogin.GetResponse();
|
||||||
|
byte[] idata = new byte[(int)GridResponse.ContentLength];
|
||||||
|
BinaryReader br = new BinaryReader(GridResponse.GetResponseStream());
|
||||||
|
|
||||||
|
br.Close();
|
||||||
|
GridResponse.Close();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Shutdown() {
|
||||||
|
db.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MapStorage
|
||||||
|
{
|
||||||
|
public float[] Map;
|
||||||
|
|
||||||
|
public MapStorage()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>SimConfig</RootNamespace>
|
||||||
|
<AssemblyName>SimConfig</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{B063760D-DB8D-4F64-B6FE-335FAD1E650A}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>..\..\..\bin\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>..\..\..\bin\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="Db4objects.Db4o">
|
||||||
|
<HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Db4SimConfig.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\ServerConsole\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\Second-server.csproj">
|
||||||
|
<Project>{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}</Project>
|
||||||
|
<Name>Second-server</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,71 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Text;
|
||||||
|
using OpenSim.Framework.User;
|
||||||
|
using OpenSim.Framework.Grid;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using libsecondlife;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.LocalServers
|
||||||
|
{
|
||||||
|
class LocalUserProfileManager : UserProfileManager
|
||||||
|
{
|
||||||
|
private IGridServer _gridServer;
|
||||||
|
|
||||||
|
public LocalUserProfileManager(IGridServer gridServer)
|
||||||
|
{
|
||||||
|
_gridServer = gridServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void CustomiseResponse(ref System.Collections.Hashtable response, UserProfile theUser)
|
||||||
|
{
|
||||||
|
uint circode = (uint)response["circuit_code"];
|
||||||
|
theUser.AddSimCircuit(circode, LLUUID.Random());
|
||||||
|
response["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}";
|
||||||
|
response["sim_port"] = OpenSim_Main.cfg.IPListenPort;
|
||||||
|
response["sim_ip"] = OpenSim_Main.cfg.IPListenAddr;
|
||||||
|
response["region_y"] = (Int32)996 * 256;
|
||||||
|
response["region_x"] = (Int32)997* 256;
|
||||||
|
|
||||||
|
string first;
|
||||||
|
string last;
|
||||||
|
if (response.Contains("first"))
|
||||||
|
{
|
||||||
|
first = (string)response["first"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
first = "test";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.Contains("last"))
|
||||||
|
{
|
||||||
|
last = (string)response["last"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last = "User";
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList InventoryList = (ArrayList)response["inventory-skeleton"];
|
||||||
|
Hashtable Inventory1 = (Hashtable)InventoryList[0];
|
||||||
|
|
||||||
|
Login _login = new Login();
|
||||||
|
//copy data to login object
|
||||||
|
_login.First = first;
|
||||||
|
_login.Last = last;
|
||||||
|
_login.Agent = new LLUUID((string)response["agent_id"]) ;
|
||||||
|
_login.Session = new LLUUID((string)response["session_id"]);
|
||||||
|
_login.BaseFolder = null;
|
||||||
|
_login.InventoryFolder = new LLUUID((string)Inventory1["folder_id"]);
|
||||||
|
|
||||||
|
//working on local computer if so lets add to the gridserver's list of sessions?
|
||||||
|
if (OpenSim_Main.gridServers.GridServer.GetName() == "Local")
|
||||||
|
{
|
||||||
|
((LocalGridBase)this._gridServer).AddNewSession(_login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,371 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 Nwc.XmlRpc;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Xml;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Grid;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
using OpenSim.Framework.User;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.LocalServers
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// When running in local (default) mode , handles client logins.
|
||||||
|
/// </summary>
|
||||||
|
public class LoginServer : LoginService
|
||||||
|
{
|
||||||
|
public LoginServer(IGridServer gridServer)
|
||||||
|
{
|
||||||
|
_gridServer = gridServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Login _login;
|
||||||
|
private IGridServer _gridServer;
|
||||||
|
private ushort _loginPort = 8080;
|
||||||
|
public IPAddress clientAddress = IPAddress.Loopback;
|
||||||
|
public IPAddress remoteAddress = IPAddress.Any;
|
||||||
|
private Socket loginServer;
|
||||||
|
private Random RandomClass = new Random();
|
||||||
|
private int NumClients;
|
||||||
|
private string _defaultResponse;
|
||||||
|
private bool userAccounts = false;
|
||||||
|
private string _mpasswd;
|
||||||
|
private bool _needPasswd = false;
|
||||||
|
private LocalUserProfileManager userManager;
|
||||||
|
|
||||||
|
// InitializeLogin: initialize the login
|
||||||
|
private void InitializeLogin()
|
||||||
|
{
|
||||||
|
this._needPasswd = false;
|
||||||
|
//read in default response string
|
||||||
|
StreamReader SR;
|
||||||
|
string lines;
|
||||||
|
SR = File.OpenText("new-login.dat");
|
||||||
|
|
||||||
|
//lines=SR.ReadLine();
|
||||||
|
|
||||||
|
while (!SR.EndOfStream)
|
||||||
|
{
|
||||||
|
lines = SR.ReadLine();
|
||||||
|
_defaultResponse += lines;
|
||||||
|
//lines = SR.ReadLine();
|
||||||
|
}
|
||||||
|
SR.Close();
|
||||||
|
this._mpasswd = EncodePassword("testpass");
|
||||||
|
userManager = new LocalUserProfileManager(this._gridServer);
|
||||||
|
|
||||||
|
loginServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||||
|
loginServer.Bind(new IPEndPoint(remoteAddress, _loginPort));
|
||||||
|
loginServer.Listen(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Startup()
|
||||||
|
{
|
||||||
|
this.InitializeLogin();
|
||||||
|
Thread runLoginProxy = new Thread(new ThreadStart(RunLogin));
|
||||||
|
runLoginProxy.IsBackground = true;
|
||||||
|
runLoginProxy.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RunLogin()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Starting Login Server");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (; ; )
|
||||||
|
{
|
||||||
|
Socket client = loginServer.Accept();
|
||||||
|
IPEndPoint clientEndPoint = (IPEndPoint)client.RemoteEndPoint;
|
||||||
|
|
||||||
|
|
||||||
|
NetworkStream networkStream = new NetworkStream(client);
|
||||||
|
StreamReader networkReader = new StreamReader(networkStream);
|
||||||
|
StreamWriter networkWriter = new StreamWriter(networkStream);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginRequest(networkReader, networkWriter);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
networkWriter.Close();
|
||||||
|
networkReader.Close();
|
||||||
|
networkStream.Close();
|
||||||
|
|
||||||
|
client.Close();
|
||||||
|
|
||||||
|
// send any packets queued for injection
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e.Message);
|
||||||
|
Console.WriteLine(e.StackTrace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProxyLogin: proxy a login request
|
||||||
|
private void LoginRequest(StreamReader reader, StreamWriter writer)
|
||||||
|
{
|
||||||
|
lock (this)
|
||||||
|
{
|
||||||
|
string line;
|
||||||
|
int contentLength = 0;
|
||||||
|
// read HTTP header
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// read one line of the header
|
||||||
|
line = reader.ReadLine();
|
||||||
|
|
||||||
|
// check for premature EOF
|
||||||
|
if (line == null)
|
||||||
|
throw new Exception("EOF in client HTTP header");
|
||||||
|
|
||||||
|
// look for Content-Length
|
||||||
|
Match match = (new Regex(@"Content-Length: (\d+)$")).Match(line);
|
||||||
|
if (match.Success)
|
||||||
|
contentLength = Convert.ToInt32(match.Groups[1].Captures[0].ToString());
|
||||||
|
} while (line != "");
|
||||||
|
|
||||||
|
// read the HTTP body into a buffer
|
||||||
|
char[] content = new char[contentLength];
|
||||||
|
reader.Read(content, 0, contentLength);
|
||||||
|
|
||||||
|
if (this.userAccounts)
|
||||||
|
{
|
||||||
|
string reply = this.userManager.ParseXMLRPC(new String(content));
|
||||||
|
// forward the XML-RPC response to the client
|
||||||
|
writer.WriteLine("HTTP/1.0 200 OK");
|
||||||
|
writer.WriteLine("Content-type: text/xml");
|
||||||
|
writer.WriteLine();
|
||||||
|
writer.WriteLine(reply);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(new String(content));
|
||||||
|
this.ProcessXmlRequest(request, writer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ProcessXmlRequest(XmlRpcRequest request, StreamWriter writer)
|
||||||
|
{
|
||||||
|
if (request.MethodName == "login_to_simulator")
|
||||||
|
{
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
string first;
|
||||||
|
string last;
|
||||||
|
string passwd;
|
||||||
|
LLUUID Agent;
|
||||||
|
LLUUID Session;
|
||||||
|
|
||||||
|
//get login name
|
||||||
|
if (requestData.Contains("first"))
|
||||||
|
{
|
||||||
|
first = (string)requestData["first"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
first = "test";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestData.Contains("last"))
|
||||||
|
{
|
||||||
|
last = (string)requestData["last"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last = "User" + NumClients.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestData.Contains("passwd"))
|
||||||
|
{
|
||||||
|
passwd = (string)requestData["passwd"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
passwd = "notfound";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Authenticate(first, last, passwd))
|
||||||
|
{
|
||||||
|
// Fail miserably
|
||||||
|
writer.WriteLine("HTTP/1.0 403 Authentication Forbidden");
|
||||||
|
writer.WriteLine();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
NumClients++;
|
||||||
|
|
||||||
|
//create a agent and session LLUUID
|
||||||
|
Agent = GetAgentId(first, last);
|
||||||
|
int SessionRand = this.RandomClass.Next(1, 999);
|
||||||
|
Session = new LLUUID("aaaabbbb-0200-" + SessionRand.ToString("0000") + "-8664-58f53e442797");
|
||||||
|
|
||||||
|
//create some login info
|
||||||
|
Hashtable LoginFlagsHash = new Hashtable();
|
||||||
|
LoginFlagsHash["daylight_savings"] = "N";
|
||||||
|
LoginFlagsHash["stipend_since_login"] = "N";
|
||||||
|
LoginFlagsHash["gendered"] = "Y";
|
||||||
|
LoginFlagsHash["ever_logged_in"] = "Y";
|
||||||
|
ArrayList LoginFlags = new ArrayList();
|
||||||
|
LoginFlags.Add(LoginFlagsHash);
|
||||||
|
|
||||||
|
Hashtable GlobalT = new Hashtable();
|
||||||
|
GlobalT["sun_texture_id"] = "cce0f112-878f-4586-a2e2-a8f104bba271";
|
||||||
|
GlobalT["cloud_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621";
|
||||||
|
GlobalT["moon_texture_id"] = "fc4b9f0b-d008-45c6-96a4-01dd947ac621";
|
||||||
|
ArrayList GlobalTextures = new ArrayList();
|
||||||
|
GlobalTextures.Add(GlobalT);
|
||||||
|
|
||||||
|
XmlRpcResponse response = (XmlRpcResponse)(new XmlRpcResponseDeserializer()).Deserialize(this._defaultResponse);
|
||||||
|
Hashtable responseData = (Hashtable)response.Value;
|
||||||
|
|
||||||
|
responseData["sim_port"] = OpenSim_Main.cfg.IPListenPort;
|
||||||
|
responseData["sim_ip"] = OpenSim_Main.cfg.IPListenAddr;
|
||||||
|
responseData["agent_id"] = Agent.ToStringHyphenated();
|
||||||
|
responseData["session_id"] = Session.ToStringHyphenated();
|
||||||
|
responseData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
|
||||||
|
responseData["login-flags"] = LoginFlags;
|
||||||
|
responseData["global-textures"] = GlobalTextures;
|
||||||
|
|
||||||
|
//inventory
|
||||||
|
ArrayList InventoryList = (ArrayList)responseData["inventory-skeleton"];
|
||||||
|
Hashtable Inventory1 = (Hashtable)InventoryList[0];
|
||||||
|
Hashtable Inventory2 = (Hashtable)InventoryList[1];
|
||||||
|
LLUUID BaseFolderID = LLUUID.Random();
|
||||||
|
LLUUID InventoryFolderID = LLUUID.Random();
|
||||||
|
Inventory2["name"] = "Base";
|
||||||
|
Inventory2["folder_id"] = BaseFolderID.ToStringHyphenated();
|
||||||
|
Inventory2["type_default"] = 6;
|
||||||
|
Inventory1["folder_id"] = InventoryFolderID.ToStringHyphenated();
|
||||||
|
|
||||||
|
ArrayList InventoryRoot = (ArrayList)responseData["inventory-root"];
|
||||||
|
Hashtable Inventoryroot = (Hashtable)InventoryRoot[0];
|
||||||
|
Inventoryroot["folder_id"] = InventoryFolderID.ToStringHyphenated();
|
||||||
|
|
||||||
|
CustomiseLoginResponse(responseData, first, last);
|
||||||
|
|
||||||
|
this._login = new Login();
|
||||||
|
//copy data to login object
|
||||||
|
_login.First = first;
|
||||||
|
_login.Last = last;
|
||||||
|
_login.Agent = Agent;
|
||||||
|
_login.Session = Session;
|
||||||
|
_login.BaseFolder = BaseFolderID;
|
||||||
|
_login.InventoryFolder = InventoryFolderID;
|
||||||
|
|
||||||
|
//working on local computer if so lets add to the gridserver's list of sessions?
|
||||||
|
if (OpenSim_Main.gridServers.GridServer.GetName() == "Local")
|
||||||
|
{
|
||||||
|
((LocalGridBase)this._gridServer).AddNewSession(_login);
|
||||||
|
}
|
||||||
|
|
||||||
|
// forward the XML-RPC response to the client
|
||||||
|
writer.WriteLine("HTTP/1.0 200 OK");
|
||||||
|
writer.WriteLine("Content-type: text/xml");
|
||||||
|
writer.WriteLine();
|
||||||
|
|
||||||
|
XmlTextWriter responseWriter = new XmlTextWriter(writer);
|
||||||
|
XmlRpcResponseSerializer.Singleton.Serialize(responseWriter, response);
|
||||||
|
responseWriter.Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writer.WriteLine("HTTP/1.0 403 Authentication Forbidden");
|
||||||
|
writer.WriteLine();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void CustomiseLoginResponse(Hashtable responseData, string first, string last)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual LLUUID GetAgentId(string firstName, string lastName)
|
||||||
|
{
|
||||||
|
LLUUID Agent;
|
||||||
|
int AgentRand = this.RandomClass.Next(1, 9999);
|
||||||
|
Agent = new LLUUID("99998888-0100-" + AgentRand.ToString("0000") + "-8ec1-0b1d5cd6aead");
|
||||||
|
return Agent;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool Authenticate(string first, string last, string passwd)
|
||||||
|
{
|
||||||
|
if (this._needPasswd)
|
||||||
|
{
|
||||||
|
//every user needs the password to login
|
||||||
|
string encodedPass = passwd.Remove(0, 3); //remove $1$
|
||||||
|
if (encodedPass == this._mpasswd)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//do not need password to login
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string EncodePassword(string passwd)
|
||||||
|
{
|
||||||
|
Byte[] originalBytes;
|
||||||
|
Byte[] encodedBytes;
|
||||||
|
MD5 md5;
|
||||||
|
|
||||||
|
md5 = new MD5CryptoServiceProvider();
|
||||||
|
originalBytes = ASCIIEncoding.Default.GetBytes(passwd);
|
||||||
|
encodedBytes = md5.ComputeHash(originalBytes);
|
||||||
|
|
||||||
|
return Regex.Replace(BitConverter.ToString(encodedBytes), "-", "").ToLower();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,149 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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
|
||||||
|
{
|
||||||
|
public class HeightmapGenHills
|
||||||
|
{
|
||||||
|
private Random Rand = new Random();
|
||||||
|
private int NumHills;
|
||||||
|
private float HillMin;
|
||||||
|
private float HillMax;
|
||||||
|
private bool Island;
|
||||||
|
private float[] heightmap;
|
||||||
|
|
||||||
|
public float[] GenerateHeightmap(int numHills, float hillMin, float hillMax, bool island)
|
||||||
|
{
|
||||||
|
NumHills = numHills;
|
||||||
|
HillMin = hillMin;
|
||||||
|
HillMax = hillMax;
|
||||||
|
Island = island;
|
||||||
|
|
||||||
|
heightmap = new float[256 * 256];
|
||||||
|
|
||||||
|
for (int i = 0; i < numHills; i++)
|
||||||
|
{
|
||||||
|
AddHill();
|
||||||
|
}
|
||||||
|
|
||||||
|
Normalize();
|
||||||
|
|
||||||
|
return heightmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddHill()
|
||||||
|
{
|
||||||
|
float x, y;
|
||||||
|
float radius = RandomRange(HillMin, HillMax);
|
||||||
|
|
||||||
|
if (Island)
|
||||||
|
{
|
||||||
|
// Which direction from the center of the map the hill is placed
|
||||||
|
float theta = RandomRange(0, 6.28f);
|
||||||
|
|
||||||
|
// How far from the center of the map to place the hill. The radius
|
||||||
|
// is subtracted from the range to prevent any part of the hill from
|
||||||
|
// reaching the edge of the map
|
||||||
|
float distance = RandomRange(radius / 2.0f, 128.0f - radius);
|
||||||
|
|
||||||
|
x = 128.0f + (float)Math.Cos(theta) * distance;
|
||||||
|
y = 128.0f + (float)Math.Sin(theta) * distance;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = RandomRange(-radius, 256.0f + radius);
|
||||||
|
y = RandomRange(-radius, 256.0f + radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
float radiusSq = radius * radius;
|
||||||
|
float distSq;
|
||||||
|
float height;
|
||||||
|
|
||||||
|
int xMin = (int)(x - radius) - 1;
|
||||||
|
int xMax = (int)(x + radius) + 1;
|
||||||
|
if (xMin < 0) xMin = 0;
|
||||||
|
if (xMax > 255) xMax = 255;
|
||||||
|
|
||||||
|
int yMin = (int)(y - radius) - 1;
|
||||||
|
int yMax = (int)(y + radius) + 1;
|
||||||
|
if (yMin < 0) yMin = 0;
|
||||||
|
if (yMax > 255) yMax = 255;
|
||||||
|
|
||||||
|
// Loop through each affected cell and determine the height at that point
|
||||||
|
for (int v = yMin; v <= yMax; ++v)
|
||||||
|
{
|
||||||
|
float fv = (float)v;
|
||||||
|
|
||||||
|
for (int h = xMin; h <= xMax; ++h)
|
||||||
|
{
|
||||||
|
float fh = (float)h;
|
||||||
|
|
||||||
|
// Determine how far from the center of this hill this point is
|
||||||
|
distSq = (x - fh) * (x - fh) + (y - fv) * (y - fv);
|
||||||
|
height = radiusSq - distSq;
|
||||||
|
|
||||||
|
// Don't add negative hill values
|
||||||
|
if (height > 0.0f) heightmap[h + v * 256] += height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Normalize()
|
||||||
|
{
|
||||||
|
float min = heightmap[0];
|
||||||
|
float max = heightmap[0];
|
||||||
|
|
||||||
|
for (int x = 0; x < 256; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < 256; y++)
|
||||||
|
{
|
||||||
|
if (heightmap[x + y * 256] < min) min = heightmap[x + y * 256];
|
||||||
|
if (heightmap[x + y * 256] > max) max = heightmap[x + y * 256];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Avoid a rare divide by zero
|
||||||
|
if (min != max)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < 256; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < 256; y++)
|
||||||
|
{
|
||||||
|
heightmap[x + y * 256] = ((heightmap[x + y * 256] - min) / (max - min)) * (HillMax - HillMin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private float RandomRange(float min, float max)
|
||||||
|
{
|
||||||
|
return (float)Rand.NextDouble() * (max - min) + min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("LocalGridServers")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("LocalGridServers")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,369 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Threading;
|
||||||
|
using System.IO;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
using libsecondlife;
|
||||||
|
using Db4objects.Db4o;
|
||||||
|
using Db4objects.Db4o.Query;
|
||||||
|
|
||||||
|
namespace LocalGridServers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
public class LocalGridPlugin : IGridPlugin
|
||||||
|
{
|
||||||
|
public LocalGridPlugin()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public IGridServer GetGridServer()
|
||||||
|
{
|
||||||
|
return(new LocalGridServer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LocalAssetPlugin : IAssetPlugin
|
||||||
|
{
|
||||||
|
public LocalAssetPlugin()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public IAssetServer GetAssetServer()
|
||||||
|
{
|
||||||
|
return(new LocalAssetServer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LocalAssetServer : IAssetServer
|
||||||
|
{
|
||||||
|
private IAssetReceiver _receiver;
|
||||||
|
private BlockingQueue<ARequest> _assetRequests;
|
||||||
|
private IObjectContainer db;
|
||||||
|
private Thread _localAssetServerThread;
|
||||||
|
|
||||||
|
public LocalAssetServer()
|
||||||
|
{
|
||||||
|
bool yapfile;
|
||||||
|
this._assetRequests = new BlockingQueue<ARequest>();
|
||||||
|
yapfile = System.IO.File.Exists("assets.yap");
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Local Asset Server class created");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
db = Db4oFactory.OpenFile("assets.yap");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Db4 Asset database creation");
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
db.Close();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Db4 Asset server :Constructor - Exception occured");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
if(!yapfile)
|
||||||
|
{
|
||||||
|
this.SetUpAssetDatabase();
|
||||||
|
}
|
||||||
|
this._localAssetServerThread = new Thread(new ThreadStart(RunRequests));
|
||||||
|
this._localAssetServerThread.IsBackground = true;
|
||||||
|
this._localAssetServerThread.Start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetReceiver(IAssetReceiver receiver)
|
||||||
|
{
|
||||||
|
this._receiver = receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RequestAsset(LLUUID assetID, bool isTexture)
|
||||||
|
{
|
||||||
|
ARequest req = new ARequest();
|
||||||
|
req.AssetID = assetID;
|
||||||
|
req.IsTexture = isTexture;
|
||||||
|
this._assetRequests.Enqueue(req);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateAsset(AssetBase asset)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UploadNewAsset(AssetBase asset)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetServerInfo(string ServerUrl, string ServerKey)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
if(db != null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Closing local Asset server database");
|
||||||
|
db.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RunRequests()
|
||||||
|
{
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
byte[] idata = null;
|
||||||
|
bool found = false;
|
||||||
|
AssetStorage foundAsset =null;
|
||||||
|
ARequest req = this._assetRequests.Dequeue();
|
||||||
|
IObjectSet result = db.Query(new AssetUUIDQuery(req.AssetID));
|
||||||
|
if(result.Count>0)
|
||||||
|
{
|
||||||
|
foundAsset = (AssetStorage) result.Next();
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
AssetBase asset = new AssetBase();
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
asset.FullID = foundAsset.UUID ;
|
||||||
|
asset.Type = foundAsset.Type;
|
||||||
|
asset.InvType = foundAsset.Type;
|
||||||
|
asset.Name = foundAsset.Name;
|
||||||
|
idata = foundAsset.Data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
asset.FullID = LLUUID.Zero;
|
||||||
|
}
|
||||||
|
asset.Data = idata;
|
||||||
|
_receiver.AssetReceived(asset, req.IsTexture );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetUpAssetDatabase()
|
||||||
|
{
|
||||||
|
Console.WriteLine("setting up Asset database");
|
||||||
|
|
||||||
|
AssetBase Image = new AssetBase();
|
||||||
|
Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000001");
|
||||||
|
Image.Name = "test Texture";
|
||||||
|
this.LoadAsset(Image, true, "testpic2.jp2");
|
||||||
|
AssetStorage store = new AssetStorage();
|
||||||
|
store.Data = Image.Data;
|
||||||
|
store.Name = Image.Name;
|
||||||
|
store.UUID = Image.FullID;
|
||||||
|
db.Set(store);
|
||||||
|
db.Commit();
|
||||||
|
|
||||||
|
Image = new AssetBase();
|
||||||
|
Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000002");
|
||||||
|
Image.Name = "test Texture2";
|
||||||
|
this.LoadAsset(Image, true, "map_base.jp2");
|
||||||
|
store = new AssetStorage();
|
||||||
|
store.Data = Image.Data;
|
||||||
|
store.Name = Image.Name;
|
||||||
|
store.UUID = Image.FullID;
|
||||||
|
db.Set(store);
|
||||||
|
db.Commit();
|
||||||
|
|
||||||
|
|
||||||
|
Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005");
|
||||||
|
Image.Name = "Prim Base Texture";
|
||||||
|
store = new AssetStorage();
|
||||||
|
store.Data = Image.Data;
|
||||||
|
store.Name = Image.Name;
|
||||||
|
store.UUID = Image.FullID;
|
||||||
|
db.Set(store);
|
||||||
|
db.Commit();
|
||||||
|
|
||||||
|
Image = new AssetBase();
|
||||||
|
Image.FullID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
|
||||||
|
Image.Name = "Shape";
|
||||||
|
this.LoadAsset(Image, false, "base_shape.dat");
|
||||||
|
store = new AssetStorage();
|
||||||
|
store.Data = Image.Data;
|
||||||
|
store.Name = Image.Name;
|
||||||
|
store.UUID = Image.FullID;
|
||||||
|
db.Set(store);
|
||||||
|
db.Commit();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadAsset(AssetBase info, bool image, string filename)
|
||||||
|
{
|
||||||
|
//should request Asset from storage manager
|
||||||
|
//but for now read from file
|
||||||
|
|
||||||
|
string dataPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory ,"assets"); //+ folder;
|
||||||
|
string fileName = Path.Combine(dataPath, filename);
|
||||||
|
FileInfo fInfo = new FileInfo(fileName);
|
||||||
|
long numBytes = fInfo.Length;
|
||||||
|
FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
|
||||||
|
byte[] idata = new byte[numBytes];
|
||||||
|
BinaryReader br = new BinaryReader(fStream);
|
||||||
|
idata= br.ReadBytes((int)numBytes);
|
||||||
|
br.Close();
|
||||||
|
fStream.Close();
|
||||||
|
info.Data = idata;
|
||||||
|
//info.loaded=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LocalGridServer : LocalGridBase
|
||||||
|
{
|
||||||
|
public List<Login> Sessions = new List<Login>();
|
||||||
|
|
||||||
|
public LocalGridServer()
|
||||||
|
{
|
||||||
|
Sessions = new List<Login>();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Local Grid Server class created");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool RequestConnection()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetName()
|
||||||
|
{
|
||||||
|
return "Local";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
|
||||||
|
{
|
||||||
|
//we are running local
|
||||||
|
AuthenticateResponse user = new AuthenticateResponse();
|
||||||
|
|
||||||
|
lock(this.Sessions)
|
||||||
|
{
|
||||||
|
|
||||||
|
for(int i = 0; i < Sessions.Count; i++)
|
||||||
|
{
|
||||||
|
if((Sessions[i].Agent == agentID) && (Sessions[i].Session == sessionID))
|
||||||
|
{
|
||||||
|
user.Authorised = true;
|
||||||
|
user.LoginInfo = Sessions[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
|
||||||
|
{
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override UUIDBlock RequestUUIDBlock()
|
||||||
|
{
|
||||||
|
UUIDBlock uuidBlock = new UUIDBlock();
|
||||||
|
return(uuidBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RequestNeighbours()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetServerInfo(string ServerUrl, string ServerKey)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Close()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// used by the local login server to inform us of new sessions
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="session"></param>
|
||||||
|
public override void AddNewSession(Login session)
|
||||||
|
{
|
||||||
|
lock(this.Sessions)
|
||||||
|
{
|
||||||
|
this.Sessions.Add(session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class BlockingQueue< T > {
|
||||||
|
private Queue< T > _queue = new Queue< T >();
|
||||||
|
private object _queueSync = new object();
|
||||||
|
|
||||||
|
public void Enqueue(T value)
|
||||||
|
{
|
||||||
|
lock(_queueSync)
|
||||||
|
{
|
||||||
|
_queue.Enqueue(value);
|
||||||
|
Monitor.Pulse(_queueSync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Dequeue()
|
||||||
|
{
|
||||||
|
lock(_queueSync)
|
||||||
|
{
|
||||||
|
if( _queue.Count < 1)
|
||||||
|
Monitor.Wait(_queueSync);
|
||||||
|
|
||||||
|
return _queue.Dequeue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AssetUUIDQuery : Predicate
|
||||||
|
{
|
||||||
|
private LLUUID _findID;
|
||||||
|
|
||||||
|
public AssetUUIDQuery(LLUUID find)
|
||||||
|
{
|
||||||
|
_findID = find;
|
||||||
|
}
|
||||||
|
public bool Match(AssetStorage asset)
|
||||||
|
{
|
||||||
|
return (asset.UUID == _findID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AssetStorage
|
||||||
|
{
|
||||||
|
public byte[] Data;
|
||||||
|
public sbyte Type;
|
||||||
|
public string Name;
|
||||||
|
public LLUUID UUID;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>LocalGridServers</RootNamespace>
|
||||||
|
<AssemblyName>LocalGridServers</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{D7F0395B-FADC-4936-80A0-D95AACE92F62}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="libsecondlife">
|
||||||
|
<HintPath>..\..\..\bin\libsecondlife.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Db4objects.Db4o">
|
||||||
|
<HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="LocalGrid.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\ServerConsole\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("Db4LocalStorage")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Db4LocalStorage")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 Db4objects.Db4o;
|
||||||
|
using Db4objects.Db4o.Query;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace Db4LocalStorage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class Db4LocalStorage : ILocalStorage
|
||||||
|
{
|
||||||
|
private IObjectContainer db;
|
||||||
|
|
||||||
|
public Db4LocalStorage()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
db = Db4oFactory.OpenFile("localworld.yap");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage creation");
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
db.Close();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage :Constructor - Exception occured");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StorePrim(PrimData prim)
|
||||||
|
{
|
||||||
|
IObjectSet result = db.Query(new UUIDQuery(prim.FullID));
|
||||||
|
if(result.Count>0)
|
||||||
|
{
|
||||||
|
//prim already in storage
|
||||||
|
//so update it
|
||||||
|
PrimData found = (PrimData) result.Next();
|
||||||
|
found.PathBegin = prim.PathBegin;
|
||||||
|
found.PathCurve= prim.PathCurve;
|
||||||
|
found.PathEnd = prim.PathEnd;
|
||||||
|
found.PathRadiusOffset = prim.PathRadiusOffset;
|
||||||
|
found.PathRevolutions = prim.PathRevolutions;
|
||||||
|
found.PathScaleX= prim.PathScaleX;
|
||||||
|
found.PathScaleY = prim.PathScaleY;
|
||||||
|
found.PathShearX = prim.PathShearX;
|
||||||
|
found.PathShearY = prim.PathShearY;
|
||||||
|
found.PathSkew = prim.PathSkew;
|
||||||
|
found.PathTaperX = prim.PathTaperX;
|
||||||
|
found.PathTaperY = prim.PathTaperY;
|
||||||
|
found.PathTwist = prim.PathTwist;
|
||||||
|
found.PathTwistBegin = prim.PathTwistBegin;
|
||||||
|
found.PCode = prim.PCode;
|
||||||
|
found.ProfileBegin = prim.ProfileBegin;
|
||||||
|
found.ProfileCurve = prim.ProfileCurve;
|
||||||
|
found.ProfileEnd = prim.ProfileEnd;
|
||||||
|
found.ProfileHollow = prim.ProfileHollow;
|
||||||
|
found.Position = prim.Position;
|
||||||
|
found.Rotation = prim.Rotation;
|
||||||
|
found.Texture = prim.Texture;
|
||||||
|
db.Set(found);
|
||||||
|
db.Commit();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//not in storage
|
||||||
|
db.Set(prim);
|
||||||
|
db.Commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemovePrim(LLUUID primID)
|
||||||
|
{
|
||||||
|
IObjectSet result = db.Query(new UUIDQuery(primID));
|
||||||
|
if(result.Count>0)
|
||||||
|
{
|
||||||
|
PrimData found = (PrimData) result.Next();
|
||||||
|
db.Delete(found);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void LoadPrimitives(ILocalStorageReceiver receiver)
|
||||||
|
{
|
||||||
|
IObjectSet result = db.Get(typeof(PrimData));
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage.cs: LoadPrimitives() - number of prims in storages is "+result.Count);
|
||||||
|
foreach (PrimData prim in result) {
|
||||||
|
receiver.PrimFromStorage(prim);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShutDown()
|
||||||
|
{
|
||||||
|
db.Commit();
|
||||||
|
db.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UUIDQuery : Predicate
|
||||||
|
{
|
||||||
|
private LLUUID _findID;
|
||||||
|
|
||||||
|
public UUIDQuery(LLUUID find)
|
||||||
|
{
|
||||||
|
_findID = find;
|
||||||
|
}
|
||||||
|
public bool Match(PrimData prim)
|
||||||
|
{
|
||||||
|
return (prim.FullID == _findID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>Db4LocalStorage</RootNamespace>
|
||||||
|
<AssemblyName>Db4LocalStorage</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{74784F23-B0FD-484C-82C1-96C0215733DC}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="libsecondlife">
|
||||||
|
<HintPath>..\..\..\bin\libsecondlife.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Db4objects.Db4o">
|
||||||
|
<HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Db4LocalStorage.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\ServerConsole\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,362 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Timers;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using libsecondlife;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
using OpenSim.world;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.LocalServers;
|
||||||
|
using OpenSim.Assets;
|
||||||
|
using ServerConsole;
|
||||||
|
using PhysicsSystem;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of MainForm.
|
||||||
|
/// </summary>
|
||||||
|
public class OpenSim_Main
|
||||||
|
{
|
||||||
|
public static OpenSim_Main sim;
|
||||||
|
public static SimConfig cfg;
|
||||||
|
public static World local_world;
|
||||||
|
public static Grid gridServers;
|
||||||
|
|
||||||
|
public SimCAPSHTTPServer http_server;
|
||||||
|
public Socket Server;
|
||||||
|
private IPEndPoint ServerIncoming;
|
||||||
|
private byte[] RecvBuffer = new byte[4096];
|
||||||
|
private byte[] ZeroBuffer = new byte[8192];
|
||||||
|
private IPEndPoint ipeSender;
|
||||||
|
private EndPoint epSender;
|
||||||
|
private AsyncCallback ReceivedData;
|
||||||
|
|
||||||
|
public AssetCache assetCache;
|
||||||
|
public InventoryManager inventoryManager;
|
||||||
|
public DateTime startuptime;
|
||||||
|
public Dictionary<EndPoint, OpenSimClient> ClientThreads = new Dictionary<EndPoint, OpenSimClient>();
|
||||||
|
private PhysicsManager physManager;
|
||||||
|
private System.Timers.Timer timer1 = new System.Timers.Timer();
|
||||||
|
private string ConfigDll = "SimConfig.dll";
|
||||||
|
private string _physicsEngine = "PhysX";
|
||||||
|
public bool sandbox = false;
|
||||||
|
public bool loginserver = false;
|
||||||
|
|
||||||
|
[STAThread]
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("OpenSim " + VersionInfo.Version + "\n");
|
||||||
|
Console.WriteLine("Starting...\n");
|
||||||
|
ServerConsole.MainConsole.Instance = new MServerConsole(ServerConsole.ConsoleBase.ConsoleType.Local, "", 0);
|
||||||
|
|
||||||
|
sim = new OpenSim_Main();
|
||||||
|
|
||||||
|
sim.sandbox = false;
|
||||||
|
sim.loginserver = false;
|
||||||
|
sim._physicsEngine = "PhysX";
|
||||||
|
|
||||||
|
for (int i = 0; i < args.Length; i++)
|
||||||
|
{
|
||||||
|
if (args[i] == "-sandbox")
|
||||||
|
{
|
||||||
|
sim.sandbox = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[i] == "-loginserver")
|
||||||
|
{
|
||||||
|
sim.loginserver = true;
|
||||||
|
}
|
||||||
|
if (args[i] == "-realphysx")
|
||||||
|
{
|
||||||
|
sim._physicsEngine = "RealPhysX";
|
||||||
|
OpenSim.world.Avatar.PhysicsEngineFlying = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenSim_Main.gridServers = new Grid();
|
||||||
|
if (sim.sandbox)
|
||||||
|
{
|
||||||
|
OpenSim_Main.gridServers.AssetDll = "LocalGridServers.dll";
|
||||||
|
OpenSim_Main.gridServers.GridDll = "LocalGridServers.dll";
|
||||||
|
OpenSim_Main.gridServers.LoadPlugins();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Starting in Sandbox mode");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OpenSim_Main.gridServers.AssetDll = "RemoteGridServers.dll";
|
||||||
|
OpenSim_Main.gridServers.GridDll = "RemoteGridServers.dll";
|
||||||
|
OpenSim_Main.gridServers.LoadPlugins();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Starting in Grid mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sim.loginserver && sim.sandbox)
|
||||||
|
{
|
||||||
|
LoginServer loginServer = new LoginServer(OpenSim_Main.gridServers.GridServer);
|
||||||
|
loginServer.Startup();
|
||||||
|
}
|
||||||
|
sim.assetCache = new AssetCache(OpenSim_Main.gridServers.AssetServer);
|
||||||
|
sim.inventoryManager = new InventoryManager();
|
||||||
|
|
||||||
|
sim.Startup();
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.MainConsolePrompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private OpenSim_Main()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Startup()
|
||||||
|
{
|
||||||
|
startuptime = DateTime.Now;
|
||||||
|
|
||||||
|
// We check our local database first, then the grid for config options
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Loading configuration");
|
||||||
|
cfg = this.LoadConfigDll(this.ConfigDll);
|
||||||
|
cfg.InitConfig();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Contacting gridserver");
|
||||||
|
cfg.LoadFromGrid();
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + cfg.RegionName + " at " + cfg.RegionLocX.ToString() + "," + cfg.RegionLocY.ToString());
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Initialising world");
|
||||||
|
local_world = cfg.LoadWorld();
|
||||||
|
|
||||||
|
this.physManager = new PhysicsSystem.PhysicsManager();
|
||||||
|
this.physManager.LoadPlugins();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting up messaging system");
|
||||||
|
local_world.PhysScene = this.physManager.GetPhysicsScene(this._physicsEngine); //should be reading from the config file what physics engine to use
|
||||||
|
local_world.PhysScene.SetTerrain(local_world.LandMap);
|
||||||
|
|
||||||
|
OpenSim_Main.gridServers.AssetServer.SetServerInfo(OpenSim_Main.cfg.AssetURL, OpenSim_Main.cfg.AssetSendKey);
|
||||||
|
OpenSim_Main.gridServers.GridServer.SetServerInfo(OpenSim_Main.cfg.GridURL, OpenSim_Main.cfg.GridSendKey);
|
||||||
|
|
||||||
|
local_world.LoadStorageDLL("Db4LocalStorage.dll"); //all these dll names shouldn't be hard coded.
|
||||||
|
local_world.LoadPrimsFromStorage();
|
||||||
|
|
||||||
|
if (this.sandbox)
|
||||||
|
{
|
||||||
|
this.assetCache.LoadDefaultTextureSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting CAPS HTTP server");
|
||||||
|
http_server = new SimCAPSHTTPServer();
|
||||||
|
|
||||||
|
timer1.Enabled = true;
|
||||||
|
timer1.Interval = 100;
|
||||||
|
timer1.Elapsed += new ElapsedEventHandler(this.Timer1Tick);
|
||||||
|
|
||||||
|
MainServerListener();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private SimConfig LoadConfigDll(string dllName)
|
||||||
|
{
|
||||||
|
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
|
||||||
|
SimConfig config = null;
|
||||||
|
|
||||||
|
foreach (Type pluginType in pluginAssembly.GetTypes())
|
||||||
|
{
|
||||||
|
if (pluginType.IsPublic)
|
||||||
|
{
|
||||||
|
if (!pluginType.IsAbstract)
|
||||||
|
{
|
||||||
|
Type typeInterface = pluginType.GetInterface("ISimConfig", true);
|
||||||
|
|
||||||
|
if (typeInterface != null)
|
||||||
|
{
|
||||||
|
ISimConfig plug = (ISimConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||||
|
config = plug.GetConfigObject();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
typeInterface = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pluginAssembly = null;
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnReceivedData(IAsyncResult result)
|
||||||
|
{
|
||||||
|
ipeSender = new IPEndPoint(IPAddress.Any, 0);
|
||||||
|
epSender = (EndPoint)ipeSender;
|
||||||
|
Packet packet = null;
|
||||||
|
int numBytes = Server.EndReceiveFrom(result, ref epSender);
|
||||||
|
int packetEnd = numBytes - 1;
|
||||||
|
packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer);
|
||||||
|
|
||||||
|
// This is either a new client or a packet to send to an old one
|
||||||
|
if (ClientThreads.ContainsKey(epSender))
|
||||||
|
{
|
||||||
|
ClientThreads[epSender].InPacket(packet);
|
||||||
|
}
|
||||||
|
else if (packet.Type == PacketType.UseCircuitCode)
|
||||||
|
{ // new client
|
||||||
|
OpenSimClient newuser = new OpenSimClient(epSender, (UseCircuitCodePacket)packet);
|
||||||
|
ClientThreads.Add(epSender, newuser);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // invalid client
|
||||||
|
Console.Error.WriteLine("Main.cs:OnReceivedData() - WARNING: Got a packet from an invalid client - " + epSender.ToString());
|
||||||
|
}
|
||||||
|
Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MainServerListener()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - New thread started");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + cfg.IPListenAddr + ":" + cfg.IPListenPort);
|
||||||
|
|
||||||
|
ServerIncoming = new IPEndPoint(IPAddress.Any, cfg.IPListenPort);
|
||||||
|
Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||||
|
Server.Bind(ServerIncoming);
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - UDP socket bound, getting ready to listen");
|
||||||
|
|
||||||
|
ipeSender = new IPEndPoint(IPAddress.Any, 0);
|
||||||
|
epSender = (EndPoint)ipeSender;
|
||||||
|
ReceivedData = new AsyncCallback(this.OnReceivedData);
|
||||||
|
Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Listening...");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Shutdown()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing all threads");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing listener thread");
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing clients");
|
||||||
|
// IMPLEMENT THIS
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing console and terminating");
|
||||||
|
OpenSim_Main.local_world.Close();
|
||||||
|
OpenSim_Main.gridServers.Close();
|
||||||
|
ServerConsole.MainConsole.Instance.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Timer1Tick(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
local_world.Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Grid
|
||||||
|
{
|
||||||
|
public IAssetServer AssetServer;
|
||||||
|
public IGridServer GridServer;
|
||||||
|
public string AssetDll = "";
|
||||||
|
public string GridDll = "";
|
||||||
|
|
||||||
|
public Grid()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadPlugins()
|
||||||
|
{
|
||||||
|
this.AssetServer = this.LoadAssetDll(this.AssetDll);
|
||||||
|
this.GridServer = this.LoadGridDll(this.GridDll);
|
||||||
|
}
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
this.AssetServer.Close();
|
||||||
|
this.GridServer.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private IAssetServer LoadAssetDll(string dllName)
|
||||||
|
{
|
||||||
|
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
|
||||||
|
IAssetServer server = null;
|
||||||
|
|
||||||
|
foreach (Type pluginType in pluginAssembly.GetTypes())
|
||||||
|
{
|
||||||
|
if (pluginType.IsPublic)
|
||||||
|
{
|
||||||
|
if (!pluginType.IsAbstract)
|
||||||
|
{
|
||||||
|
Type typeInterface = pluginType.GetInterface("IAssetPlugin", true);
|
||||||
|
|
||||||
|
if (typeInterface != null)
|
||||||
|
{
|
||||||
|
IAssetPlugin plug = (IAssetPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||||
|
server = plug.GetAssetServer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
typeInterface = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pluginAssembly = null;
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IGridServer LoadGridDll(string dllName)
|
||||||
|
{
|
||||||
|
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
|
||||||
|
IGridServer server = null;
|
||||||
|
|
||||||
|
foreach (Type pluginType in pluginAssembly.GetTypes())
|
||||||
|
{
|
||||||
|
if (pluginType.IsPublic)
|
||||||
|
{
|
||||||
|
if (!pluginType.IsAbstract)
|
||||||
|
{
|
||||||
|
Type typeInterface = pluginType.GetInterface("IGridPlugin", true);
|
||||||
|
|
||||||
|
if (typeInterface != null)
|
||||||
|
{
|
||||||
|
IGridPlugin plug = (IGridPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||||
|
server = plug.GetGridServer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
typeInterface = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pluginAssembly = null;
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,636 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using libsecondlife;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Timers;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
using OpenSim.Framework.Inventory;
|
||||||
|
using OpenSim.Framework.Utilities;
|
||||||
|
using OpenSim.world;
|
||||||
|
using OpenSim.Assets;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Handles new client connections
|
||||||
|
/// Constructor takes a single Packet and authenticates everything
|
||||||
|
/// </summary>
|
||||||
|
public class OpenSimClient
|
||||||
|
{
|
||||||
|
|
||||||
|
public LLUUID AgentID;
|
||||||
|
public LLUUID SessionID;
|
||||||
|
public uint CircuitCode;
|
||||||
|
public world.Avatar ClientAvatar;
|
||||||
|
private UseCircuitCodePacket cirpack;
|
||||||
|
private Thread ClientThread;
|
||||||
|
public EndPoint userEP;
|
||||||
|
private BlockingQueue<QueItem> PacketQueue;
|
||||||
|
private Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>();
|
||||||
|
private Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>();
|
||||||
|
private Dictionary<LLUUID, AssetBase> UploadedAssets = new Dictionary<LLUUID, AssetBase>();
|
||||||
|
private System.Timers.Timer AckTimer;
|
||||||
|
private uint Sequence = 0;
|
||||||
|
private object SequenceLock = new object();
|
||||||
|
private const int MAX_APPENDED_ACKS = 10;
|
||||||
|
private const int RESEND_TIMEOUT = 4000;
|
||||||
|
private const int MAX_SEQUENCE = 0xFFFFFF;
|
||||||
|
private LLUUID newAssetFolder = LLUUID.Zero;
|
||||||
|
private bool debug = false;
|
||||||
|
|
||||||
|
public void ack_pack(Packet Pack)
|
||||||
|
{
|
||||||
|
//libsecondlife.Packets.PacketAckPacket ack_it = new PacketAckPacket();
|
||||||
|
//ack_it.Packets = new PacketAckPacket.PacketsBlock[1];
|
||||||
|
//ack_it.Packets[0] = new PacketAckPacket.PacketsBlock();
|
||||||
|
//ack_it.Packets[0].ID = Pack.Header.ID;
|
||||||
|
//ack_it.Header.Reliable = false;
|
||||||
|
|
||||||
|
//OutPacket(ack_it);
|
||||||
|
|
||||||
|
if (Pack.Header.Reliable)
|
||||||
|
{
|
||||||
|
lock (PendingAcks)
|
||||||
|
{
|
||||||
|
uint sequence = (uint)Pack.Header.Sequence;
|
||||||
|
if (!PendingAcks.ContainsKey(sequence)) { PendingAcks[sequence] = sequence; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ProcessInPacket(Packet Pack)
|
||||||
|
{
|
||||||
|
ack_pack(Pack);
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
if (Pack.Type != PacketType.AgentUpdate)
|
||||||
|
{
|
||||||
|
Console.WriteLine(Pack.Type.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (Pack.Type)
|
||||||
|
{
|
||||||
|
case PacketType.CompleteAgentMovement:
|
||||||
|
ClientAvatar.CompleteMovement(OpenSim_Main.local_world);
|
||||||
|
ClientAvatar.SendInitialPosition();
|
||||||
|
break;
|
||||||
|
case PacketType.RegionHandshakeReply:
|
||||||
|
OpenSim_Main.local_world.SendLayerData(this);
|
||||||
|
break;
|
||||||
|
case PacketType.AgentWearablesRequest:
|
||||||
|
ClientAvatar.SendInitialAppearance();
|
||||||
|
foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values)
|
||||||
|
{
|
||||||
|
if (client.AgentID != this.AgentID)
|
||||||
|
{
|
||||||
|
ObjectUpdatePacket objupdate = client.ClientAvatar.CreateUpdatePacket();
|
||||||
|
this.OutPacket(objupdate);
|
||||||
|
client.ClientAvatar.SendAppearanceToOtherAgent(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OpenSim_Main.local_world.GetInitialPrims(this);
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectAdd:
|
||||||
|
OpenSim_Main.local_world.AddNewPrim((ObjectAddPacket)Pack, this);
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectLink:
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(Pack.ToString());
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectScale:
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(Pack.ToString());
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectShape:
|
||||||
|
ObjectShapePacket shape = (ObjectShapePacket)Pack;
|
||||||
|
for (int i = 0; i < shape.ObjectData.Length; i++)
|
||||||
|
{
|
||||||
|
foreach (Entity ent in OpenSim_Main.local_world.Entities.Values)
|
||||||
|
{
|
||||||
|
if (ent.localid == shape.ObjectData[i].ObjectLocalID)
|
||||||
|
{
|
||||||
|
((OpenSim.world.Primitive)ent).UpdateShape(shape.ObjectData[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.MultipleObjectUpdate:
|
||||||
|
MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)Pack;
|
||||||
|
|
||||||
|
for (int i = 0; i < multipleupdate.ObjectData.Length; i++)
|
||||||
|
{
|
||||||
|
if (multipleupdate.ObjectData[i].Type == 9) //change position
|
||||||
|
{
|
||||||
|
libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0);
|
||||||
|
foreach (Entity ent in OpenSim_Main.local_world.Entities.Values)
|
||||||
|
{
|
||||||
|
if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
|
||||||
|
{
|
||||||
|
((OpenSim.world.Primitive)ent).UpdatePosition(pos);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//should update stored position of the prim
|
||||||
|
}
|
||||||
|
else if (multipleupdate.ObjectData[i].Type == 10)//rotation
|
||||||
|
{
|
||||||
|
libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true);
|
||||||
|
foreach (Entity ent in OpenSim_Main.local_world.Entities.Values)
|
||||||
|
{
|
||||||
|
if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
|
||||||
|
{
|
||||||
|
ent.rotation = new Axiom.MathLib.Quaternion(rot.W, rot.X, rot.Y, rot.W);
|
||||||
|
((OpenSim.world.Primitive)ent).UpdateFlag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (multipleupdate.ObjectData[i].Type == 13)//scale
|
||||||
|
{
|
||||||
|
|
||||||
|
libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12);
|
||||||
|
foreach (Entity ent in OpenSim_Main.local_world.Entities.Values)
|
||||||
|
{
|
||||||
|
if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
|
||||||
|
{
|
||||||
|
((OpenSim.world.Primitive)ent).Scale = scale;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.RequestImage:
|
||||||
|
RequestImagePacket imageRequest = (RequestImagePacket)Pack;
|
||||||
|
for (int i = 0; i < imageRequest.RequestImage.Length; i++)
|
||||||
|
{
|
||||||
|
OpenSim_Main.sim.assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.TransferRequest:
|
||||||
|
//Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
|
||||||
|
TransferRequestPacket transfer = (TransferRequestPacket)Pack;
|
||||||
|
OpenSim_Main.sim.assetCache.AddAssetRequest(this, transfer);
|
||||||
|
break;
|
||||||
|
case PacketType.AgentUpdate:
|
||||||
|
ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack);
|
||||||
|
break;
|
||||||
|
case PacketType.LogoutRequest:
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got a logout request");
|
||||||
|
//send reply to let the client logout
|
||||||
|
LogoutReplyPacket logReply = new LogoutReplyPacket();
|
||||||
|
logReply.AgentData.AgentID = this.AgentID;
|
||||||
|
logReply.AgentData.SessionID = this.SessionID;
|
||||||
|
logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1];
|
||||||
|
logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock();
|
||||||
|
logReply.InventoryData[0].ItemID = LLUUID.Zero;
|
||||||
|
OutPacket(logReply);
|
||||||
|
//tell all clients to kill our object
|
||||||
|
KillObjectPacket kill = new KillObjectPacket();
|
||||||
|
kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
|
||||||
|
kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
|
||||||
|
kill.ObjectData[0].ID = this.ClientAvatar.localid;
|
||||||
|
foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values)
|
||||||
|
{
|
||||||
|
client.OutPacket(kill);
|
||||||
|
}
|
||||||
|
OpenSim_Main.gridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode);
|
||||||
|
lock (OpenSim_Main.local_world.Entities)
|
||||||
|
{
|
||||||
|
OpenSim_Main.local_world.Entities.Remove(this.AgentID);
|
||||||
|
}
|
||||||
|
//need to do other cleaning up here too
|
||||||
|
OpenSim_Main.sim.ClientThreads.Remove(this.userEP);
|
||||||
|
this.ClientThread.Abort();
|
||||||
|
break;
|
||||||
|
case PacketType.ChatFromViewer:
|
||||||
|
ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack;
|
||||||
|
if (Helpers.FieldToString(inchatpack.ChatData.Message) == "") break;
|
||||||
|
|
||||||
|
System.Text.Encoding _enc = System.Text.Encoding.ASCII;
|
||||||
|
libsecondlife.Packets.ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket();
|
||||||
|
reply.ChatData.Audible = 1;
|
||||||
|
reply.ChatData.Message = inchatpack.ChatData.Message;
|
||||||
|
reply.ChatData.ChatType = 1;
|
||||||
|
reply.ChatData.SourceType = 1;
|
||||||
|
reply.ChatData.Position = this.ClientAvatar.position;
|
||||||
|
reply.ChatData.FromName = _enc.GetBytes(this.ClientAvatar.firstname + " " + this.ClientAvatar.lastname + "\0");
|
||||||
|
reply.ChatData.OwnerID = this.AgentID;
|
||||||
|
reply.ChatData.SourceID = this.AgentID;
|
||||||
|
foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values)
|
||||||
|
{
|
||||||
|
client.OutPacket(reply);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectImage:
|
||||||
|
ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
|
||||||
|
for (int i = 0; i < imagePack.ObjectData.Length; i++)
|
||||||
|
{
|
||||||
|
foreach (Entity ent in OpenSim_Main.local_world.Entities.Values)
|
||||||
|
{
|
||||||
|
if (ent.localid == imagePack.ObjectData[i].ObjectLocalID)
|
||||||
|
{
|
||||||
|
((OpenSim.world.Primitive)ent).UpdateTexture(imagePack.ObjectData[i].TextureEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PacketType.ObjectFlagUpdate:
|
||||||
|
ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack;
|
||||||
|
foreach (Entity ent in OpenSim_Main.local_world.Entities.Values)
|
||||||
|
{
|
||||||
|
if (ent.localid == flags.AgentData.ObjectLocalID)
|
||||||
|
{
|
||||||
|
((OpenSim.world.Primitive)ent).UpdateObjectFlags(flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case PacketType.AssetUploadRequest:
|
||||||
|
//AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack;
|
||||||
|
//Console.WriteLine("upload request "+ request.AssetBlock.TransactionID);
|
||||||
|
//AssetBase newAsset = OpenSim_Main.sim.assetCache.UploadPacket(request);
|
||||||
|
//Console.WriteLine(request.ToString());
|
||||||
|
|
||||||
|
/*if(newAsset != null)
|
||||||
|
{
|
||||||
|
if(!this.UploadedAssets.ContainsKey(newAsset.FullID))
|
||||||
|
{
|
||||||
|
this.UploadedAssets.Add(newAsset.FullID, newAsset);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
/*AssetUploadCompletePacket response = new AssetUploadCompletePacket();
|
||||||
|
response.AssetBlock.Type =request.AssetBlock.Type;
|
||||||
|
response.AssetBlock.Success = false;
|
||||||
|
response.AssetBlock.UUID = request.AssetBlock.TransactionID;
|
||||||
|
|
||||||
|
this.OutPacket(response);*/
|
||||||
|
break;
|
||||||
|
case PacketType.AssetUploadComplete:
|
||||||
|
//AssetUploadCompletePacket complete = (AssetUploadCompletePacket)Pack;
|
||||||
|
//Console.WriteLine("upload complete "+ complete.AssetBlock.UUID);
|
||||||
|
|
||||||
|
/*AssetBase completedAsset = OpenSim_Main.sim.assetCache.TransactionComplete(complete.AssetBlock.UUID);
|
||||||
|
if(completedAsset != null)
|
||||||
|
{
|
||||||
|
if(!this.UploadedAssets.ContainsKey(completedAsset.FullID))
|
||||||
|
{
|
||||||
|
this.UploadedAssets.Remove(completedAsset.FullID);
|
||||||
|
if(this.newAssetFolder != LLUUID.Zero)
|
||||||
|
{
|
||||||
|
OpenSim_Main.sim.inventoryManager.AddNewInventoryItem(this, this.newAssetFolder, completedAsset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
break;
|
||||||
|
case PacketType.CreateInventoryFolder:
|
||||||
|
Console.WriteLine(Pack.ToString());
|
||||||
|
break;
|
||||||
|
case PacketType.CreateInventoryItem:
|
||||||
|
Console.WriteLine(Pack.ToString());
|
||||||
|
break;
|
||||||
|
case PacketType.FetchInventory:
|
||||||
|
Console.WriteLine("fetch item packet");
|
||||||
|
FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack;
|
||||||
|
OpenSim_Main.sim.inventoryManager.FetchInventory(this, FetchInventory);
|
||||||
|
break;
|
||||||
|
case PacketType.FetchInventoryDescendents:
|
||||||
|
FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack;
|
||||||
|
OpenSim_Main.sim.inventoryManager.FetchInventoryDescendents(this, Fetch);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResendUnacked()
|
||||||
|
{
|
||||||
|
int now = Environment.TickCount;
|
||||||
|
|
||||||
|
lock (NeedAck)
|
||||||
|
{
|
||||||
|
foreach (Packet packet in NeedAck.Values)
|
||||||
|
{
|
||||||
|
if ((now - packet.TickCount > RESEND_TIMEOUT) && (!packet.Header.Resent))
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Resending " + packet.Type.ToString() + " packet, " +
|
||||||
|
(now - packet.TickCount) + "ms have passed");
|
||||||
|
|
||||||
|
packet.Header.Resent = true;
|
||||||
|
OutPacket(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendAcks()
|
||||||
|
{
|
||||||
|
lock (PendingAcks)
|
||||||
|
{
|
||||||
|
if (PendingAcks.Count > 0)
|
||||||
|
{
|
||||||
|
if (PendingAcks.Count > 250)
|
||||||
|
{
|
||||||
|
// FIXME: Handle the odd case where we have too many pending ACKs queued up
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Too many ACKs queued up!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Sending PacketAck");
|
||||||
|
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
PacketAckPacket acks = new PacketAckPacket();
|
||||||
|
acks.Packets = new PacketAckPacket.PacketsBlock[PendingAcks.Count];
|
||||||
|
|
||||||
|
foreach (uint ack in PendingAcks.Values)
|
||||||
|
{
|
||||||
|
acks.Packets[i] = new PacketAckPacket.PacketsBlock();
|
||||||
|
acks.Packets[i].ID = ack;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
acks.Header.Reliable = false;
|
||||||
|
OutPacket(acks);
|
||||||
|
|
||||||
|
PendingAcks.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AckTimer_Elapsed(object sender, ElapsedEventArgs ea)
|
||||||
|
{
|
||||||
|
SendAcks();
|
||||||
|
ResendUnacked();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ProcessOutPacket(Packet Pack)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Keep track of when this packet was sent out
|
||||||
|
Pack.TickCount = Environment.TickCount;
|
||||||
|
|
||||||
|
if (!Pack.Header.Resent)
|
||||||
|
{
|
||||||
|
// Set the sequence number
|
||||||
|
lock (SequenceLock)
|
||||||
|
{
|
||||||
|
if (Sequence >= MAX_SEQUENCE)
|
||||||
|
Sequence = 1;
|
||||||
|
else
|
||||||
|
Sequence++;
|
||||||
|
Pack.Header.Sequence = Sequence;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Pack.Header.Reliable) //DIRTY HACK
|
||||||
|
{
|
||||||
|
lock (NeedAck)
|
||||||
|
{
|
||||||
|
if (!NeedAck.ContainsKey(Pack.Header.Sequence))
|
||||||
|
{
|
||||||
|
NeedAck.Add(Pack.Header.Sequence, Pack);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Client.Log("Attempted to add a duplicate sequence number (" +
|
||||||
|
// packet.Header.Sequence + ") to the NeedAck dictionary for packet type " +
|
||||||
|
// packet.Type.ToString(), Helpers.LogLevel.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't append ACKs to resent packets, in case that's what was causing the
|
||||||
|
// delivery to fail
|
||||||
|
if (!Pack.Header.Resent)
|
||||||
|
{
|
||||||
|
// Append any ACKs that need to be sent out to this packet
|
||||||
|
lock (PendingAcks)
|
||||||
|
{
|
||||||
|
if (PendingAcks.Count > 0 && PendingAcks.Count < MAX_APPENDED_ACKS &&
|
||||||
|
Pack.Type != PacketType.PacketAck &&
|
||||||
|
Pack.Type != PacketType.LogoutRequest)
|
||||||
|
{
|
||||||
|
Pack.Header.AckList = new uint[PendingAcks.Count];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
foreach (uint ack in PendingAcks.Values)
|
||||||
|
{
|
||||||
|
Pack.Header.AckList[i] = ack;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
PendingAcks.Clear();
|
||||||
|
Pack.Header.AppendedAcks = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//ServerConsole.MainConsole.Instance.WriteLine("OUT: \n" + Pack.ToString());
|
||||||
|
|
||||||
|
byte[] ZeroOutBuffer = new byte[4096];
|
||||||
|
byte[] sendbuffer;
|
||||||
|
sendbuffer = Pack.ToBytes();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Pack.Header.Zerocoded)
|
||||||
|
{
|
||||||
|
int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
|
||||||
|
OpenSim_Main.sim.Server.SendTo(ZeroOutBuffer, packetsize, SocketFlags.None, userEP);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OpenSim_Main.sim.Server.SendTo(sendbuffer, sendbuffer.Length, SocketFlags.None, userEP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread");
|
||||||
|
ClientThread.Abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InPacket(Packet NewPack)
|
||||||
|
{
|
||||||
|
// Handle appended ACKs
|
||||||
|
if (NewPack.Header.AppendedAcks)
|
||||||
|
{
|
||||||
|
lock (NeedAck)
|
||||||
|
{
|
||||||
|
foreach (uint ack in NewPack.Header.AckList)
|
||||||
|
{
|
||||||
|
NeedAck.Remove(ack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle PacketAck packets
|
||||||
|
if (NewPack.Type == PacketType.PacketAck)
|
||||||
|
{
|
||||||
|
PacketAckPacket ackPacket = (PacketAckPacket)NewPack;
|
||||||
|
|
||||||
|
lock (NeedAck)
|
||||||
|
{
|
||||||
|
foreach (PacketAckPacket.PacketsBlock block in ackPacket.Packets)
|
||||||
|
{
|
||||||
|
NeedAck.Remove(block.ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((NewPack.Type == PacketType.StartPingCheck))
|
||||||
|
{
|
||||||
|
//reply to pingcheck
|
||||||
|
libsecondlife.Packets.StartPingCheckPacket startPing = (libsecondlife.Packets.StartPingCheckPacket)NewPack;
|
||||||
|
libsecondlife.Packets.CompletePingCheckPacket endPing = new CompletePingCheckPacket();
|
||||||
|
endPing.PingID.PingID = startPing.PingID.PingID;
|
||||||
|
OutPacket(endPing);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QueItem item = new QueItem();
|
||||||
|
item.Packet = NewPack;
|
||||||
|
item.Incoming = true;
|
||||||
|
this.PacketQueue.Enqueue(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OutPacket(Packet NewPack)
|
||||||
|
{
|
||||||
|
QueItem item = new QueItem();
|
||||||
|
item.Packet = NewPack;
|
||||||
|
item.Incoming = false;
|
||||||
|
this.PacketQueue.Enqueue(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OpenSimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request");
|
||||||
|
cirpack = initialcirpack;
|
||||||
|
userEP = remoteEP;
|
||||||
|
PacketQueue = new BlockingQueue<QueItem>();
|
||||||
|
AckTimer = new System.Timers.Timer(500);
|
||||||
|
AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed);
|
||||||
|
AckTimer.Start();
|
||||||
|
|
||||||
|
ClientThread = new Thread(new ThreadStart(AuthUser));
|
||||||
|
ClientThread.IsBackground = true;
|
||||||
|
ClientThread.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ClientLoop()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:ClientLoop() - Entered loop");
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
QueItem nextPacket = PacketQueue.Dequeue();
|
||||||
|
if (nextPacket.Incoming)
|
||||||
|
{
|
||||||
|
//is a incoming packet
|
||||||
|
ProcessInPacket(nextPacket.Packet);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//is a out going packet
|
||||||
|
ProcessOutPacket(nextPacket.Packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitNewClient()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world");
|
||||||
|
OpenSim_Main.local_world.AddViewerAgent(this);
|
||||||
|
world.Entity tempent = OpenSim_Main.local_world.Entities[this.AgentID];
|
||||||
|
this.ClientAvatar = (world.Avatar)tempent;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AuthUser()
|
||||||
|
{
|
||||||
|
AuthenticateResponse sessionInfo = OpenSim_Main.gridServers.GridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
|
||||||
|
if (!sessionInfo.Authorised)
|
||||||
|
{
|
||||||
|
//session/circuit not authorised
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:AuthUser() - New user request denied to " + userEP.ToString());
|
||||||
|
ClientThread.Abort();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:AuthUser() - Got authenticated connection from " + userEP.ToString());
|
||||||
|
//session is authorised
|
||||||
|
this.AgentID = cirpack.CircuitCode.ID;
|
||||||
|
this.SessionID = cirpack.CircuitCode.SessionID;
|
||||||
|
this.CircuitCode = cirpack.CircuitCode.Code;
|
||||||
|
InitNewClient();
|
||||||
|
this.ClientAvatar.firstname = sessionInfo.LoginInfo.First;
|
||||||
|
this.ClientAvatar.lastname = sessionInfo.LoginInfo.Last;
|
||||||
|
|
||||||
|
// Create Inventory, currently only works for sandbox mode
|
||||||
|
if (OpenSim_Main.sim.sandbox)
|
||||||
|
{
|
||||||
|
if (sessionInfo.LoginInfo.InventoryFolder != null)
|
||||||
|
{
|
||||||
|
this.CreateInventory(sessionInfo.LoginInfo.InventoryFolder);
|
||||||
|
if (sessionInfo.LoginInfo.BaseFolder != null)
|
||||||
|
{
|
||||||
|
OpenSim_Main.sim.inventoryManager.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder);
|
||||||
|
this.newAssetFolder = sessionInfo.LoginInfo.BaseFolder;
|
||||||
|
AssetBase[] inventorySet = OpenSim_Main.sim.assetCache.CreateNewInventorySet(this.AgentID);
|
||||||
|
if (inventorySet != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < inventorySet.Length; i++)
|
||||||
|
{
|
||||||
|
if (inventorySet[i] != null)
|
||||||
|
{
|
||||||
|
Console.WriteLine(Helpers.FieldToString(inventorySet[i].Data));
|
||||||
|
OpenSim_Main.sim.inventoryManager.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientLoop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateInventory(LLUUID baseFolder)
|
||||||
|
{
|
||||||
|
AgentInventory inventory = new AgentInventory();
|
||||||
|
inventory.AgentID = this.AgentID;
|
||||||
|
OpenSim_Main.sim.inventoryManager.AddNewAgentsInventory(inventory);
|
||||||
|
OpenSim_Main.sim.inventoryManager.CreateNewInventoryFolder(this, baseFolder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,211 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using libsecondlife;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
using ServerConsole;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of ServerConsole.
|
||||||
|
/// </summary>
|
||||||
|
public class MServerConsole : ConsoleBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private ConsoleType ConsType;
|
||||||
|
StreamWriter Log;
|
||||||
|
|
||||||
|
|
||||||
|
// STUPID HACK ALERT!!!! STUPID HACK ALERT!!!!!
|
||||||
|
// constype - the type of console to use (see enum ConsoleType)
|
||||||
|
// sparam - depending on the console type:
|
||||||
|
// TCP - the IP to bind to (127.0.0.1 if blank)
|
||||||
|
// Local - param ignored
|
||||||
|
// SimChat - the AgentID of this sim's admin
|
||||||
|
// and for the iparam:
|
||||||
|
// TCP - the port to bind to
|
||||||
|
// Local - param ignored
|
||||||
|
// SimChat - the chat channel to accept commands from
|
||||||
|
public MServerConsole(ConsoleType constype, string sparam, int iparam) {
|
||||||
|
ConsType = constype;
|
||||||
|
switch(constype) {
|
||||||
|
case ConsoleType.Local:
|
||||||
|
|
||||||
|
Console.WriteLine("ServerConsole.cs - creating new local console");
|
||||||
|
Console.WriteLine("Logs will be saved to current directory in opensim-console.log");
|
||||||
|
Log=File.AppendText("opensim-console.log");
|
||||||
|
Log.WriteLine("========================================================================");
|
||||||
|
//Log.WriteLine("OpenSim " + VersionInfo.Version + " Started at " + DateTime.Now.ToString());
|
||||||
|
break;
|
||||||
|
case ConsoleType.TCP:
|
||||||
|
break;
|
||||||
|
case ConsoleType.SimChat:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Console.WriteLine("ServerConsole.cs - what are you smoking? that isn't a valid console type!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Close() {
|
||||||
|
Log.WriteLine("OpenSim shutdown at " + DateTime.Now.ToString());
|
||||||
|
Log.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Write(string format, params object[] args)
|
||||||
|
{
|
||||||
|
Log.Write(format, args);
|
||||||
|
Console.Write(format, args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WriteLine(string format, params object[] args)
|
||||||
|
{
|
||||||
|
Log.WriteLine(format, args);
|
||||||
|
Console.WriteLine(format, args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ReadLine()
|
||||||
|
{
|
||||||
|
string TempStr=Console.ReadLine();
|
||||||
|
Log.WriteLine(TempStr);
|
||||||
|
return TempStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Read() {
|
||||||
|
int TempInt= Console.Read();
|
||||||
|
Log.Write((char)TempInt);
|
||||||
|
return TempInt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a command prompt and waits for the user to enter a string, then returns that string
|
||||||
|
public override string CmdPrompt(string prompt) {
|
||||||
|
this.Write(prompt);
|
||||||
|
return this.ReadLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value if the user simply presses enter
|
||||||
|
public override string CmdPrompt(string prompt, string defaultresponse) {
|
||||||
|
string temp=CmdPrompt(prompt);
|
||||||
|
if(temp=="") {
|
||||||
|
return defaultresponse;
|
||||||
|
} else {
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value, user may only enter 1 of 2 options
|
||||||
|
public override string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) {
|
||||||
|
bool itisdone=false;
|
||||||
|
string temp=CmdPrompt(prompt,defaultresponse);
|
||||||
|
while(itisdone==false) {
|
||||||
|
if((temp==OptionA) || (temp==OptionB)) {
|
||||||
|
itisdone=true;
|
||||||
|
} else {
|
||||||
|
this.WriteLine("Valid options are " + OptionA + " or " + OptionB);
|
||||||
|
temp=CmdPrompt(prompt,defaultresponse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runs a command with a number of parameters
|
||||||
|
public override Object RunCmd(string Cmd, string[] cmdparams) {
|
||||||
|
switch(Cmd) {
|
||||||
|
case "help":
|
||||||
|
this.WriteLine("show users - show info about connected users");
|
||||||
|
this.WriteLine("shutdown - disconnect all clients and shutdown");
|
||||||
|
this.WriteLine("regenerate - regenerate the sim's terrain");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "show":
|
||||||
|
ShowCommands(cmdparams[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "regenerate":
|
||||||
|
OpenSim_Main.local_world.RegenerateTerrain();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
OpenSim_Main.Shutdown();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shows data about something
|
||||||
|
public override void ShowCommands(string ShowWhat) {
|
||||||
|
switch(ShowWhat) {
|
||||||
|
case "uptime":
|
||||||
|
this.WriteLine("OpenSim has been running since " + OpenSim_Main.sim.startuptime.ToString());
|
||||||
|
this.WriteLine("That is " + (DateTime.Now-OpenSim_Main.sim.startuptime).ToString());
|
||||||
|
break;
|
||||||
|
case "users":
|
||||||
|
OpenSim.world.Avatar TempAv;
|
||||||
|
this.WriteLine(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16}{5,-16}","Firstname", "Lastname","Agent ID", "Session ID", "Circuit", "IP"));
|
||||||
|
foreach (libsecondlife.LLUUID UUID in OpenSim_Main.local_world.Entities.Keys) {
|
||||||
|
if(OpenSim_Main.local_world.Entities[UUID].ToString()== "OpenSim.world.Avatar")
|
||||||
|
{
|
||||||
|
TempAv=(OpenSim.world.Avatar)OpenSim_Main.local_world.Entities[UUID];
|
||||||
|
this.WriteLine(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}",TempAv.firstname, TempAv.lastname,UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Displays a prompt to the user and then runs the command they entered
|
||||||
|
public override void MainConsolePrompt() {
|
||||||
|
string[] tempstrarray;
|
||||||
|
string tempstr = this.CmdPrompt("OpenSim-" + OpenSim_Main.cfg.RegionHandle.ToString() + " # ");
|
||||||
|
tempstrarray = tempstr.Split(' ');
|
||||||
|
string cmd=tempstrarray[0];
|
||||||
|
Array.Reverse(tempstrarray);
|
||||||
|
Array.Resize<string>(ref tempstrarray,tempstrarray.Length-1);
|
||||||
|
Array.Reverse(tempstrarray);
|
||||||
|
string[] cmdparams=(string[])tempstrarray;
|
||||||
|
RunCmd(cmd,cmdparams);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override void SetStatus(string status)
|
||||||
|
{
|
||||||
|
Console.Write( status + "\r" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("RemoteGridServers")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("RemoteGridServers")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,269 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Threading;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.IO;
|
||||||
|
using libsecondlife;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Assets;
|
||||||
|
|
||||||
|
namespace RemoteGridServers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
|
||||||
|
public class RemoteGridPlugin : IGridPlugin
|
||||||
|
{
|
||||||
|
public RemoteGridPlugin()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public IGridServer GetGridServer()
|
||||||
|
{
|
||||||
|
return (new RemoteGridServer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RemoteAssetPlugin : IAssetPlugin
|
||||||
|
{
|
||||||
|
public RemoteAssetPlugin()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public IAssetServer GetAssetServer()
|
||||||
|
{
|
||||||
|
return (new RemoteAssetServer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class RemoteGridServer : RemoteGridBase
|
||||||
|
{
|
||||||
|
private string GridServerUrl;
|
||||||
|
private string GridSendKey;
|
||||||
|
private Dictionary<uint, agentcircuitdata> AgentCircuits = new Dictionary<uint, agentcircuitdata>();
|
||||||
|
|
||||||
|
public override Dictionary<uint, agentcircuitdata> agentcircuits
|
||||||
|
{
|
||||||
|
get { return AgentCircuits; }
|
||||||
|
set { AgentCircuits = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public RemoteGridServer()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Remote Grid Server class created");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool RequestConnection()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitcode)
|
||||||
|
{
|
||||||
|
agentcircuitdata validcircuit = null;
|
||||||
|
if (this.AgentCircuits.ContainsKey(circuitcode))
|
||||||
|
{
|
||||||
|
validcircuit = this.AgentCircuits[circuitcode];
|
||||||
|
}
|
||||||
|
AuthenticateResponse user = new AuthenticateResponse();
|
||||||
|
if (validcircuit == null)
|
||||||
|
{
|
||||||
|
//don't have this circuit code in our list
|
||||||
|
user.Authorised = false;
|
||||||
|
return (user);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((sessionID == validcircuit.SessionID) && (agentID == validcircuit.AgentID))
|
||||||
|
{
|
||||||
|
// YAY! Valid login
|
||||||
|
user.Authorised = true;
|
||||||
|
user.LoginInfo = new Login();
|
||||||
|
user.LoginInfo.Agent = agentID;
|
||||||
|
user.LoginInfo.Session = sessionID;
|
||||||
|
user.LoginInfo.First = validcircuit.firstname;
|
||||||
|
user.LoginInfo.Last = validcircuit.lastname;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Invalid
|
||||||
|
user.Authorised = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
|
||||||
|
{
|
||||||
|
WebRequest DeleteSession = WebRequest.Create(GridServerUrl + "/usersessions/" + sessionID.ToString());
|
||||||
|
DeleteSession.Method = "DELETE";
|
||||||
|
DeleteSession.ContentType = "text/plaintext";
|
||||||
|
DeleteSession.ContentLength = 0;
|
||||||
|
|
||||||
|
StreamWriter stOut = new StreamWriter(DeleteSession.GetRequestStream(), System.Text.Encoding.ASCII);
|
||||||
|
stOut.Write("");
|
||||||
|
stOut.Close();
|
||||||
|
|
||||||
|
StreamReader stIn = new StreamReader(DeleteSession.GetResponse().GetResponseStream());
|
||||||
|
string GridResponse = stIn.ReadToEnd();
|
||||||
|
stIn.Close();
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override UUIDBlock RequestUUIDBlock()
|
||||||
|
{
|
||||||
|
UUIDBlock uuidBlock = new UUIDBlock();
|
||||||
|
return (uuidBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RequestNeighbours()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetServerInfo(string ServerUrl, string ServerKey)
|
||||||
|
{
|
||||||
|
this.GridServerUrl = ServerUrl;
|
||||||
|
this.GridSendKey = ServerKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetName()
|
||||||
|
{
|
||||||
|
return "Remote";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Close()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RemoteAssetServer : IAssetServer
|
||||||
|
{
|
||||||
|
private IAssetReceiver _receiver;
|
||||||
|
private BlockingQueue<ARequest> _assetRequests;
|
||||||
|
private Thread _remoteAssetServerThread;
|
||||||
|
private string AssetServerUrl;
|
||||||
|
private string AssetSendKey;
|
||||||
|
|
||||||
|
public RemoteAssetServer()
|
||||||
|
{
|
||||||
|
this._assetRequests = new BlockingQueue<ARequest>();
|
||||||
|
this._remoteAssetServerThread = new Thread(new ThreadStart(RunRequests));
|
||||||
|
this._remoteAssetServerThread.IsBackground = true;
|
||||||
|
this._remoteAssetServerThread.Start();
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("Remote Asset Server class created");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetReceiver(IAssetReceiver receiver)
|
||||||
|
{
|
||||||
|
this._receiver = receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RequestAsset(LLUUID assetID, bool isTexture)
|
||||||
|
{
|
||||||
|
ARequest req = new ARequest();
|
||||||
|
req.AssetID = assetID;
|
||||||
|
req.IsTexture = isTexture;
|
||||||
|
this._assetRequests.Enqueue(req);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateAsset(AssetBase asset)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UploadNewAsset(AssetBase asset)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetServerInfo(string ServerUrl, string ServerKey)
|
||||||
|
{
|
||||||
|
this.AssetServerUrl = ServerUrl;
|
||||||
|
this.AssetSendKey = ServerKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RunRequests()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
//we need to add support for the asset server not knowing about a requested asset
|
||||||
|
ARequest req = this._assetRequests.Dequeue();
|
||||||
|
LLUUID assetID = req.AssetID;
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(" RemoteAssetServer- Got a AssetServer request, processing it");
|
||||||
|
WebRequest AssetLoad = WebRequest.Create(this.AssetServerUrl + "getasset/" + AssetSendKey + "/" + assetID + "/data");
|
||||||
|
WebResponse AssetResponse = AssetLoad.GetResponse();
|
||||||
|
byte[] idata = new byte[(int)AssetResponse.ContentLength];
|
||||||
|
BinaryReader br = new BinaryReader(AssetResponse.GetResponseStream());
|
||||||
|
idata = br.ReadBytes((int)AssetResponse.ContentLength);
|
||||||
|
br.Close();
|
||||||
|
|
||||||
|
AssetBase asset = new AssetBase();
|
||||||
|
asset.FullID = assetID;
|
||||||
|
asset.Data = idata;
|
||||||
|
_receiver.AssetReceived(asset, req.IsTexture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class BlockingQueue<T>
|
||||||
|
{
|
||||||
|
private Queue<T> _queue = new Queue<T>();
|
||||||
|
private object _queueSync = new object();
|
||||||
|
|
||||||
|
public void Enqueue(T value)
|
||||||
|
{
|
||||||
|
lock (_queueSync)
|
||||||
|
{
|
||||||
|
_queue.Enqueue(value);
|
||||||
|
Monitor.Pulse(_queueSync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Dequeue()
|
||||||
|
{
|
||||||
|
lock (_queueSync)
|
||||||
|
{
|
||||||
|
if (_queue.Count < 1)
|
||||||
|
Monitor.Wait(_queueSync);
|
||||||
|
|
||||||
|
return _queue.Dequeue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>RemoteGridServers</RootNamespace>
|
||||||
|
<AssemblyName>RemoteGridServers</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="libsecondlife">
|
||||||
|
<HintPath>..\..\..\bin\libsecondlife.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="RemoteGrid.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\ServerConsole\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,108 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>OpenSim</RootNamespace>
|
||||||
|
<AssemblyName>OpenSim</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}</ProjectGuid>
|
||||||
|
<StartupObject>OpenSim.OpenSim_Main</StartupObject>
|
||||||
|
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
|
||||||
|
<NoStdLib>False</NoStdLib>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>bin\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>..\bin\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
|
||||||
|
<RegisterForComInterop>False</RegisterForComInterop>
|
||||||
|
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
|
||||||
|
<BaseAddress>4194304</BaseAddress>
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<FileAlignment>4096</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<OutputPath>..\bin\</OutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="libsecondlife">
|
||||||
|
<HintPath>..\bin\libsecondlife.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Axiom.MathLib">
|
||||||
|
<HintPath>..\bin\Axiom.MathLib.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="log4net">
|
||||||
|
<HintPath>..\bin\log4net.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Assets\InventoryManager.cs" />
|
||||||
|
<Compile Include="Config.cs" />
|
||||||
|
<Compile Include="GridServers\LocalUserProfileManager.cs" />
|
||||||
|
<Compile Include="Main.cs" />
|
||||||
|
<Compile Include="OpenSimClient.cs" />
|
||||||
|
<Compile Include="types\Mesh.cs" />
|
||||||
|
<Compile Include="types\Triangle.cs" />
|
||||||
|
<Compile Include="world\Avatar.cs" />
|
||||||
|
<Compile Include="world\Entity.cs" />
|
||||||
|
<Compile Include="world\Primitive.cs" />
|
||||||
|
<Compile Include="world\ScriptEngine.cs" />
|
||||||
|
<Compile Include="world\scripting\IScript.cs" />
|
||||||
|
<Compile Include="world\SurfacePatch.cs" />
|
||||||
|
<Compile Include="world\World.cs" />
|
||||||
|
<Compile Include="GridServers\LoginServer.cs" />
|
||||||
|
<Compile Include="Assets\AssetCache.cs" />
|
||||||
|
<Compile Include="OpenSimConsole.cs" />
|
||||||
|
<Compile Include="HeightMapGenHills.cs" />
|
||||||
|
<Compile Include="VersionInfo.cs" />
|
||||||
|
<Compile Include="CAPS\SimHttp.cs">
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="LocalServers\LocalGridServers\LocalGridServers.csproj">
|
||||||
|
<Project>{D7F0395B-FADC-4936-80A0-D95AACE92F62}</Project>
|
||||||
|
<Name>LocalGridServers</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="LocalStorage\Db4LocalStorage\Db4LocalStorage.csproj">
|
||||||
|
<Project>{74784F23-B0FD-484C-82C1-96C0215733DC}</Project>
|
||||||
|
<Name>Db4LocalStorage</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\OpenSim.FrameWork\OpenSim.Framework.csproj">
|
||||||
|
<Project>{2E46A825-3168-492F-93BC-637126B5B72B}</Project>
|
||||||
|
<Name>OpenSim.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="physics\PhysicsManager.csproj">
|
||||||
|
<Project>{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}</Project>
|
||||||
|
<Name>PhysicsManager</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="RemoteServers\RemoteGridServers\RemoteGridServers.csproj">
|
||||||
|
<Project>{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}</Project>
|
||||||
|
<Name>RemoteGridServers</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="ServerConsole\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("ServerConsole")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("ServerConsole")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 ServerConsole
|
||||||
|
{
|
||||||
|
public class MainConsole {
|
||||||
|
|
||||||
|
private static ConsoleBase instance;
|
||||||
|
|
||||||
|
public static ConsoleBase Instance
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
instance = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class ConsoleBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public enum ConsoleType {
|
||||||
|
Local, // Use stdio
|
||||||
|
TCP, // Use TCP/telnet
|
||||||
|
SimChat // Use in-world chat (for gods)
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void Close();
|
||||||
|
|
||||||
|
public abstract void Write(string format, params object[] args);
|
||||||
|
|
||||||
|
public abstract void WriteLine(string format, params object[] args);
|
||||||
|
|
||||||
|
public abstract string ReadLine();
|
||||||
|
|
||||||
|
public abstract int Read() ;
|
||||||
|
|
||||||
|
// Displays a command prompt and waits for the user to enter a string, then returns that string
|
||||||
|
public abstract string CmdPrompt(string prompt) ;
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value if the user simply presses enter
|
||||||
|
public abstract string CmdPrompt(string prompt, string defaultresponse);
|
||||||
|
|
||||||
|
// Displays a command prompt and returns a default value, user may only enter 1 of 2 options
|
||||||
|
public abstract string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) ;
|
||||||
|
|
||||||
|
// Runs a command with a number of parameters
|
||||||
|
public abstract Object RunCmd(string Cmd, string[] cmdparams) ;
|
||||||
|
|
||||||
|
// Shows data about something
|
||||||
|
public abstract void ShowCommands(string ShowWhat) ;
|
||||||
|
|
||||||
|
// Displays a prompt to the user and then runs the command they entered
|
||||||
|
public abstract void MainConsolePrompt() ;
|
||||||
|
|
||||||
|
public abstract void SetStatus( string status );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>ServerConsole</RootNamespace>
|
||||||
|
<AssemblyName>ServerConsole</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="ServerConsole.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
|
||||||
|
* Copyright (c) <year>, <copyright holder>
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Threading;
|
||||||
|
using libsecondlife;
|
||||||
|
using libsecondlife.Packets;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
public class Util
|
||||||
|
{
|
||||||
|
public static ulong UIntsToLong(uint X, uint Y)
|
||||||
|
{
|
||||||
|
return Helpers.UIntsToLong(X, Y);
|
||||||
|
}
|
||||||
|
public Util()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class QueItem
|
||||||
|
{
|
||||||
|
public QueItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Packet Packet;
|
||||||
|
public bool Incoming;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class BlockingQueue<T>
|
||||||
|
{
|
||||||
|
private Queue<T> _queue = new Queue<T>();
|
||||||
|
private object _queueSync = new object();
|
||||||
|
|
||||||
|
public void Enqueue(T value)
|
||||||
|
{
|
||||||
|
lock (_queueSync)
|
||||||
|
{
|
||||||
|
_queue.Enqueue(value);
|
||||||
|
Monitor.Pulse(_queueSync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Dequeue()
|
||||||
|
{
|
||||||
|
lock (_queueSync)
|
||||||
|
{
|
||||||
|
if (_queue.Count < 1)
|
||||||
|
Monitor.Wait(_queueSync);
|
||||||
|
|
||||||
|
return _queue.Dequeue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) OpenSim project, http://osgrid.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class VersionInfo
|
||||||
|
{
|
||||||
|
public static string Version = "0.1, Build 1173843165, Revision 193:206M";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
|
# Visual C# Express 2005
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Second-server", "Second-server.csproj", "{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhysicsManager", "physics\PhysicsManager.csproj", "{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerConsole", "ServerConsole\ServerConsole\ServerConsole.csproj", "{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocalGridServers", "LocalServers\LocalGridServers\LocalGridServers.csproj", "{D7F0395B-FADC-4936-80A0-D95AACE92F62}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RemoteGridServers", "RemoteServers\RemoteGridServers\RemoteGridServers.csproj", "{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimConfig", "Config\SimConfig\SimConfig.csproj", "{B063760D-DB8D-4F64-B6FE-335FAD1E650A}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Db4LocalStorage", "LocalStorage\Db4LocalStorage\Db4LocalStorage.csproj", "{74784F23-B0FD-484C-82C1-96C0215733DC}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BasicPhysicsplugin", "physics\plugins\BasicPhysicsplugin.csproj", "{52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealPhysXplugin", "physics\RealPhysX\RealPhysXplugin\RealPhysXplugin.csproj", "{56C1D214-F389-4228-921A-0A3A0712C159}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "..\OpenSim.FrameWork\OpenSim.Framework.csproj", "{2E46A825-3168-492F-93BC-637126B5B72B}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{132A6E3E-8F2D-4BF5-BDFB-8555F53F334E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D7F0395B-FADC-4936-80A0-D95AACE92F62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D7F0395B-FADC-4936-80A0-D95AACE92F62}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D7F0395B-FADC-4936-80A0-D95AACE92F62}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D7F0395B-FADC-4936-80A0-D95AACE92F62}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{CF0E7E62-34F4-4AB2-BDBD-AFC63224A7E5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B063760D-DB8D-4F64-B6FE-335FAD1E650A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B063760D-DB8D-4F64-B6FE-335FAD1E650A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B063760D-DB8D-4F64-B6FE-335FAD1E650A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B063760D-DB8D-4F64-B6FE-335FAD1E650A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{74784F23-B0FD-484C-82C1-96C0215733DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{74784F23-B0FD-484C-82C1-96C0215733DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{74784F23-B0FD-484C-82C1-96C0215733DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{74784F23-B0FD-484C-82C1-96C0215733DC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{56C1D214-F389-4228-921A-0A3A0712C159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C1D214-F389-4228-921A-0A3A0712C159}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{56C1D214-F389-4228-921A-0A3A0712C159}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{56C1D214-F389-4228-921A-0A3A0712C159}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{2E46A825-3168-492F-93BC-637126B5B72B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
Binary file not shown.
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("PhysicsManager")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("PhysicsManager")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
|
||||||
|
namespace PhysicsSystem
|
||||||
|
{
|
||||||
|
public abstract class PhysicsActor
|
||||||
|
{
|
||||||
|
public static PhysicsActor Null
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new NullPhysicsActor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract PhysicsVector Position
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract PhysicsVector Velocity
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract PhysicsVector Acceleration
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract Axiom.MathLib.Quaternion Orientation
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract bool Flying
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract bool Kinematic
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void AddForce(PhysicsVector force);
|
||||||
|
|
||||||
|
public abstract void SetMomentum(PhysicsVector momentum);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NullPhysicsActor : PhysicsActor
|
||||||
|
{
|
||||||
|
public override PhysicsVector Position
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return PhysicsVector.Zero;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Velocity
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return PhysicsVector.Zero;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Axiom.MathLib.Quaternion Orientation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Axiom.MathLib.Quaternion.Identity;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Acceleration
|
||||||
|
{
|
||||||
|
get { return PhysicsVector.Zero; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Flying
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Kinematic
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddForce(PhysicsVector force)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetMomentum(PhysicsVector momentum)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Collections;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using Axiom.MathLib;
|
||||||
|
|
||||||
|
namespace PhysicsSystem
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Description of MyClass.
|
||||||
|
/// </summary>
|
||||||
|
public class PhysicsManager
|
||||||
|
{
|
||||||
|
private Dictionary<string, IPhysicsPlugin> _plugins=new Dictionary<string, IPhysicsPlugin>();
|
||||||
|
|
||||||
|
public PhysicsManager()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public PhysicsScene GetPhysicsScene(string engineName)
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(engineName))
|
||||||
|
{
|
||||||
|
return new NullPhysicsScene();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_plugins.ContainsKey(engineName))
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("creating "+engineName);
|
||||||
|
return _plugins[engineName].GetScene();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string error = String.Format("couldn't find physicsEngine: {0}", engineName);
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine(error);
|
||||||
|
throw new ArgumentException(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadPlugins()
|
||||||
|
{
|
||||||
|
string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory ,"Physics");
|
||||||
|
string[] pluginFiles = Directory.GetFiles(path, "*.dll");
|
||||||
|
|
||||||
|
|
||||||
|
for(int i= 0; i<pluginFiles.Length; i++)
|
||||||
|
{
|
||||||
|
this.AddPlugin(pluginFiles[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddPlugin(string FileName)
|
||||||
|
{
|
||||||
|
Assembly pluginAssembly = Assembly.LoadFrom(FileName);
|
||||||
|
|
||||||
|
foreach (Type pluginType in pluginAssembly.GetTypes())
|
||||||
|
{
|
||||||
|
if (pluginType.IsPublic)
|
||||||
|
{
|
||||||
|
if (!pluginType.IsAbstract)
|
||||||
|
{
|
||||||
|
Type typeInterface = pluginType.GetInterface("IPhysicsPlugin", true);
|
||||||
|
|
||||||
|
if (typeInterface != null)
|
||||||
|
{
|
||||||
|
IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||||
|
plug.Init();
|
||||||
|
this._plugins.Add(plug.GetName(),plug);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
typeInterface = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginAssembly = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IPhysicsPlugin
|
||||||
|
{
|
||||||
|
bool Init();
|
||||||
|
PhysicsScene GetScene();
|
||||||
|
string GetName();
|
||||||
|
void Dispose();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>PhysicsManager</RootNamespace>
|
||||||
|
<AssemblyName>PhysicsManager</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="Axiom.MathLib">
|
||||||
|
<HintPath>..\..\bin\Axiom.MathLib.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="PhysicsActor.cs" />
|
||||||
|
<Compile Include="PhysicsManager.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
<Compile Include="PhysicsScene.cs" />
|
||||||
|
<Compile Include="PhysicsVector.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\ServerConsole\ServerConsole\ServerConsole.csproj">
|
||||||
|
<Project>{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}</Project>
|
||||||
|
<Name>ServerConsole</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
|
||||||
|
namespace PhysicsSystem
|
||||||
|
{
|
||||||
|
public abstract class PhysicsScene
|
||||||
|
{
|
||||||
|
public static PhysicsScene Null
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new NullPhysicsScene();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract PhysicsActor AddAvatar(PhysicsVector position);
|
||||||
|
|
||||||
|
public abstract PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size);
|
||||||
|
|
||||||
|
public abstract void Simulate(float timeStep);
|
||||||
|
|
||||||
|
public abstract void GetResults();
|
||||||
|
|
||||||
|
public abstract void SetTerrain(float[] heightMap);
|
||||||
|
|
||||||
|
public abstract bool IsThreaded
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class NullPhysicsScene : PhysicsScene
|
||||||
|
{
|
||||||
|
private static int m_workIndicator;
|
||||||
|
|
||||||
|
public override PhysicsActor AddAvatar(PhysicsVector position)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : AddAvatar({0})", position);
|
||||||
|
return PhysicsActor.Null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : AddPrim({0},{1})", position, size);
|
||||||
|
return PhysicsActor.Null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Simulate(float timeStep)
|
||||||
|
{
|
||||||
|
m_workIndicator = (m_workIndicator + 1) % 10;
|
||||||
|
|
||||||
|
ServerConsole.MainConsole.Instance.SetStatus(m_workIndicator.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void GetResults()
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : GetResults()");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetTerrain(float[] heightMap)
|
||||||
|
{
|
||||||
|
ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : SetTerrain({0} items)", heightMap.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsThreaded
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.Text;
|
||||||
|
|
||||||
|
namespace PhysicsSystem
|
||||||
|
{
|
||||||
|
public class PhysicsVector
|
||||||
|
{
|
||||||
|
public float X;
|
||||||
|
public float Y;
|
||||||
|
public float Z;
|
||||||
|
|
||||||
|
public PhysicsVector()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public PhysicsVector(float x, float y, float z)
|
||||||
|
{
|
||||||
|
X = x;
|
||||||
|
Y = y;
|
||||||
|
Z = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly PhysicsVector Zero = new PhysicsVector(0f, 0f, 0f);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following
|
||||||
|
// attributes.
|
||||||
|
//
|
||||||
|
// change them to the information which is associated with the assembly
|
||||||
|
// you compile.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("RealPhysXplugin")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("RealPhysXplugin")]
|
||||||
|
[assembly: AssemblyCopyright("")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// This sets the default COM visibility of types in the assembly to invisible.
|
||||||
|
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The assembly version has following format :
|
||||||
|
//
|
||||||
|
// Major.Minor.Build.Revision
|
||||||
|
//
|
||||||
|
// You can specify all values by your own or you can build default build and revision
|
||||||
|
// numbers with the '*' character (the default):
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.*")]
|
|
@ -0,0 +1,422 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
|
||||||
|
*
|
||||||
|
* 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 <organization> 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 <copyright holder> ``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 <copyright holder> 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 PhysicsSystem;
|
||||||
|
using PhysXWrapper;
|
||||||
|
|
||||||
|
namespace PhysXplugin
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Will be the PhysX plugin but for now will be a very basic physics engine
|
||||||
|
/// </summary>
|
||||||
|
public class PhysXPlugin : IPhysicsPlugin
|
||||||
|
{
|
||||||
|
private PhysXScene _mScene;
|
||||||
|
|
||||||
|
public PhysXPlugin()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Init()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PhysicsScene GetScene()
|
||||||
|
{
|
||||||
|
if(_mScene == null)
|
||||||
|
{
|
||||||
|
_mScene = new PhysXScene();
|
||||||
|
}
|
||||||
|
return(_mScene);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetName()
|
||||||
|
{
|
||||||
|
return("RealPhysX");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PhysXScene :PhysicsScene
|
||||||
|
{
|
||||||
|
private List<PhysXCharacter> _characters = new List<PhysXCharacter>();
|
||||||
|
private List<PhysXPrim> _prims = new List<PhysXPrim>();
|
||||||
|
private float[] _heightMap;
|
||||||
|
private NxPhysicsSDK mySdk;
|
||||||
|
private NxScene scene;
|
||||||
|
|
||||||
|
public PhysXScene()
|
||||||
|
{
|
||||||
|
mySdk = NxPhysicsSDK.CreateSDK();
|
||||||
|
Console.WriteLine("Sdk created - now creating scene");
|
||||||
|
scene = mySdk.CreateScene();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddAvatar(PhysicsVector position)
|
||||||
|
{
|
||||||
|
Vec3 pos = new Vec3();
|
||||||
|
pos.X = position.X;
|
||||||
|
pos.Y = position.Y;
|
||||||
|
pos.Z = position.Z;
|
||||||
|
PhysXCharacter act = new PhysXCharacter( scene.AddCharacter(pos));
|
||||||
|
act.Position = position;
|
||||||
|
_characters.Add(act);
|
||||||
|
return act;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
|
||||||
|
{
|
||||||
|
Vec3 pos = new Vec3();
|
||||||
|
pos.X = position.X;
|
||||||
|
pos.Y = position.Y;
|
||||||
|
pos.Z = position.Z;
|
||||||
|
Vec3 siz = new Vec3();
|
||||||
|
siz.X = size.X;
|
||||||
|
siz.Y = size.Y;
|
||||||
|
siz.Z = size.Z;
|
||||||
|
PhysXPrim act = new PhysXPrim( scene.AddNewBox(pos, siz));
|
||||||
|
_prims.Add(act);
|
||||||
|
return act;
|
||||||
|
}
|
||||||
|
public override void Simulate(float timeStep)
|
||||||
|
{
|
||||||
|
foreach (PhysXCharacter actor in _characters)
|
||||||
|
{
|
||||||
|
actor.Move(timeStep);
|
||||||
|
}
|
||||||
|
scene.Simulate(timeStep);
|
||||||
|
scene.FetchResults();
|
||||||
|
scene.UpdateControllers();
|
||||||
|
|
||||||
|
foreach (PhysXCharacter actor in _characters)
|
||||||
|
{
|
||||||
|
actor.UpdatePosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void GetResults()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsThreaded
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return(false); // for now we won't be multithreaded
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetTerrain(float[] heightMap)
|
||||||
|
{
|
||||||
|
this._heightMap = heightMap;
|
||||||
|
this.scene.AddTerrain(heightMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PhysXCharacter : PhysicsActor
|
||||||
|
{
|
||||||
|
private PhysicsVector _position;
|
||||||
|
private PhysicsVector _velocity;
|
||||||
|
private PhysicsVector _acceleration;
|
||||||
|
private NxCharacter _character;
|
||||||
|
private bool flying;
|
||||||
|
private float gravityAccel;
|
||||||
|
|
||||||
|
public PhysXCharacter(NxCharacter character)
|
||||||
|
{
|
||||||
|
_velocity = new PhysicsVector();
|
||||||
|
_position = new PhysicsVector();
|
||||||
|
_acceleration = new PhysicsVector();
|
||||||
|
_character = character;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Flying
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return flying;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
flying = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Position
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _position;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_position = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Velocity
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _velocity;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_velocity = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Kinematic
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Axiom.MathLib.Quaternion Orientation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Axiom.MathLib.Quaternion.Identity;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Acceleration
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _acceleration;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void SetAcceleration (PhysicsVector accel)
|
||||||
|
{
|
||||||
|
this._acceleration = accel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddForce(PhysicsVector force)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetMomentum(PhysicsVector momentum)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Move(float timeStep)
|
||||||
|
{
|
||||||
|
Vec3 vec = new Vec3();
|
||||||
|
vec.X = this._velocity.X * timeStep;
|
||||||
|
vec.Y = this._velocity.Y * timeStep;
|
||||||
|
if(flying)
|
||||||
|
{
|
||||||
|
vec.Z = ( this._velocity.Z) * timeStep;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gravityAccel+= -9.8f;
|
||||||
|
vec.Z = (gravityAccel + this._velocity.Z) * timeStep;
|
||||||
|
}
|
||||||
|
int res = this._character.Move(vec);
|
||||||
|
if(res == 1)
|
||||||
|
{
|
||||||
|
gravityAccel = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdatePosition()
|
||||||
|
{
|
||||||
|
Vec3 vec = this._character.Position;
|
||||||
|
this._position.X = vec.X;
|
||||||
|
this._position.Y = vec.Y;
|
||||||
|
this._position.Z = vec.Z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PhysXPrim : PhysicsActor
|
||||||
|
{
|
||||||
|
private PhysicsVector _position;
|
||||||
|
private PhysicsVector _velocity;
|
||||||
|
private PhysicsVector _acceleration;
|
||||||
|
private NxActor _prim;
|
||||||
|
|
||||||
|
public PhysXPrim(NxActor prim)
|
||||||
|
{
|
||||||
|
_velocity = new PhysicsVector();
|
||||||
|
_position = new PhysicsVector();
|
||||||
|
_acceleration = new PhysicsVector();
|
||||||
|
_prim = prim;
|
||||||
|
}
|
||||||
|
public override bool Flying
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false; //no flying prims for you
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public override PhysicsVector Position
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
PhysicsVector pos = new PhysicsVector();
|
||||||
|
Vec3 vec = this._prim.Position;
|
||||||
|
pos.X = vec.X;
|
||||||
|
pos.Y = vec.Y;
|
||||||
|
pos.Z = vec.Z;
|
||||||
|
return pos;
|
||||||
|
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
PhysicsVector vec = value;
|
||||||
|
Vec3 pos = new Vec3();
|
||||||
|
pos.X = vec.X;
|
||||||
|
pos.Y = vec.Y;
|
||||||
|
pos.Z = vec.Z;
|
||||||
|
this._prim.Position = pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Velocity
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _velocity;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_velocity = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Kinematic
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this._prim.Kinematic;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
this._prim.Kinematic = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Axiom.MathLib.Quaternion Orientation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Axiom.MathLib.Quaternion res = new Axiom.MathLib.Quaternion();
|
||||||
|
PhysXWrapper.Quaternion quat = this._prim.GetOrientation();
|
||||||
|
res.w = quat.W;
|
||||||
|
res.x = quat.X;
|
||||||
|
res.y = quat.Y;
|
||||||
|
res.z = quat.Z;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsVector Acceleration
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _acceleration;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void SetAcceleration (PhysicsVector accel)
|
||||||
|
{
|
||||||
|
this._acceleration = accel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddForce(PhysicsVector force)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetMomentum(PhysicsVector momentum)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>RealPhysXplugin</RootNamespace>
|
||||||
|
<AssemblyName>RealPhysXplugin</AssemblyName>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{56C1D214-F389-4228-921A-0A3A0712C159}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
|
<OutputPath>..\..\..\..\bin\Physics\</OutputPath>
|
||||||
|
<Optimize>False</Optimize>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>True</DebugSymbols>
|
||||||
|
<DebugType>Full</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
|
<OutputPath>..\..\..\..\bin\Physics\</OutputPath>
|
||||||
|
<Optimize>True</Optimize>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<DebugSymbols>False</DebugSymbols>
|
||||||
|
<DebugType>None</DebugType>
|
||||||
|
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Axiom.MathLib, Version=0.7.0.25497, Culture=neutral">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\..\..\..\bin\Axiom.MathLib.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="PhysX_Wrapper_Dotnet">
|
||||||
|
<HintPath>..\..\..\..\bin\PhysX_Wrapper_Dotnet.dll</HintPath>
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="RealPhysX.cs" />
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\PhysicsManager.csproj">
|
||||||
|
<Project>{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}</Project>
|
||||||
|
<Name>PhysicsManager</Name>
|
||||||
|
<Private>False</Private>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
|
||||||
|
</Project>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue