Clean up a bit and added missing files

physics-inventorytesting
MW 2007-03-15 18:10:57 +00:00
parent 0b99f56f2b
commit 740a21330e
26 changed files with 3033 additions and 2047 deletions

View File

@ -79,7 +79,8 @@ namespace OpenSim.Assets
{
while (true)
{
try{
try
{
this.ProcessAssetQueue();
this.ProcessTextureQueue();
Thread.Sleep(100);

175
src/CAPS/SimHttp.cs Normal file
View File

@ -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.GridServers;
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":
GridServers.agentcircuitdata agent_data = new GridServers.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();
}
}
}

View File

@ -8,7 +8,7 @@
<ProjectGuid>{B063760D-DB8D-4F64-B6FE-335FAD1E650A}</ProjectGuid>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin\Debug\</OutputPath>
<OutputPath>..\..\..\bin\</OutputPath>
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugSymbols>True</DebugSymbols>
@ -16,7 +16,7 @@
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\Release\</OutputPath>
<OutputPath>..\..\..\bin\</OutputPath>
<Optimize>True</Optimize>
<DefineConstants>TRACE</DefineConstants>
<DebugSymbols>False</DebugSymbols>

View File

@ -32,6 +32,7 @@ using System.Net;
using System.Net.Sockets;
using System.IO;
using libsecondlife;
using OpenSim;
namespace OpenSim.GridServers
{
@ -40,20 +41,47 @@ namespace OpenSim.GridServers
/// also Sim to Sim connections?
/// </summary>
public interface IGridServer
{
bool RequestConnection();
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();
void AddNewSession(Login session); // only used by local version of grid server
// and didn't use to be part of this interface until we put this in a dll
}
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
@ -92,4 +120,17 @@ namespace OpenSim.GridServers
{
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;
}
}

View File

@ -140,7 +140,6 @@ namespace OpenSim.GridServers
// ProxyLogin: proxy a login request
private void LoginRequest(StreamReader reader, StreamWriter writer)
{
Console.WriteLine("LoginServer - new Login attempt");
lock(this)
{
string line;
@ -217,6 +216,21 @@ namespace OpenSim.GridServers
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;
@ -225,6 +239,11 @@ namespace OpenSim.GridServers
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];
@ -232,7 +251,7 @@ namespace OpenSim.GridServers
LLUUID InventoryFolderID = LLUUID.Random();
Inventory2["name"] = "Base";
Inventory2["folder_id"] = BaseFolderID.ToStringHyphenated();
Inventory2["type_default"] =0;
Inventory2["type_default"] =6;
Inventory1["folder_id"] = InventoryFolderID.ToStringHyphenated();
ArrayList InventoryRoot = (ArrayList) responseData["inventory-root"];
@ -250,8 +269,11 @@ namespace OpenSim.GridServers
_login.BaseFolder = BaseFolderID;
_login.InventoryFolder = InventoryFolderID;
//working on local computer so lets add to the gridserver's list of sessions
this._gridServer.AddNewSession(_login);
//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");

View File

@ -240,7 +240,7 @@ namespace LocalGridServers
}
}
public class LocalGridServer :IGridServer
public class LocalGridServer : LocalGridBase
{
public List<Login> Sessions = new List<Login>();
@ -250,11 +250,17 @@ namespace LocalGridServers
ServerConsole.MainConsole.Instance.WriteLine("Local Grid Server class created");
}
public bool RequestConnection()
public override bool RequestConnection()
{
return true;
}
public AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
public override string GetName()
{
return "Local";
}
public override AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
{
//we are running local
AuthenticateResponse user = new AuthenticateResponse();
@ -274,36 +280,37 @@ namespace LocalGridServers
return(user);
}
public bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
public override bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
{
return(true);
}
public UUIDBlock RequestUUIDBlock()
public override UUIDBlock RequestUUIDBlock()
{
UUIDBlock uuidBlock = new UUIDBlock();
return(uuidBlock);
}
public void RequestNeighbours()
public override void RequestNeighbours()
{
return;
}
public void SetServerInfo(string ServerUrl, string ServerKey)
public override void SetServerInfo(string ServerUrl, string ServerKey)
{
}
public void Close()
public override void Close()
{
}
/// <summary>
/// used by the local login server to inform us of new sessions
/// </summary>
/// <param name="session"></param>
public void AddNewSession(Login session)
public override void AddNewSession(Login session)
{
lock(this.Sessions)
{

View File

@ -57,13 +57,14 @@ namespace OpenSim
public static World local_world;
public static Grid gridServers;
public static Socket Server;
private static IPEndPoint ServerIncoming;
private static byte[] RecvBuffer = new byte[4096];
public SimCAPSHTTPServer http_server;
public Socket Server;
private IPEndPoint ServerIncoming;
private byte[] RecvBuffer = new byte[4096];
private byte[] ZeroBuffer = new byte[8192];
private static IPEndPoint ipeSender;
private static EndPoint epSender;
private static AsyncCallback ReceivedData;
private IPEndPoint ipeSender;
private EndPoint epSender;
private AsyncCallback ReceivedData;
public AssetCache assetCache;
public InventoryManager inventoryManager;
@ -85,12 +86,17 @@ namespace OpenSim
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;
@ -102,7 +108,6 @@ namespace OpenSim
}
}
//sim.SetUpAssetDatabase();
OpenSim_Main.gridServers = new Grid();
if (sim.sandbox)
{
@ -124,21 +129,23 @@ namespace OpenSim
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) {
while (true)
{
ServerConsole.MainConsole.Instance.MainConsolePrompt();
}
}
private OpenSim_Main() {
private OpenSim_Main()
{
}
private void Startup() {
private void Startup()
{
startuptime = DateTime.Now;
// We check our local database first, then the grid for config options
@ -164,13 +171,19 @@ namespace OpenSim
local_world.LoadStorageDLL("Db4LocalStorage.dll"); //all these dll names shouldn't be hard coded.
local_world.LoadPrimsFromStorage();
if (this.sandbox)
{
this.assetCache.LoadDefaultTextureSet();
MainServerListener();
}
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();
}
@ -202,7 +215,8 @@ namespace OpenSim
return config;
}
private void OnReceivedData(IAsyncResult result) {
private void OnReceivedData(IAsyncResult result)
{
ipeSender = new IPEndPoint(IPAddress.Any, 0);
epSender = (EndPoint)ipeSender;
Packet packet = null;
@ -211,18 +225,24 @@ namespace OpenSim
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)) {
if (ClientThreads.ContainsKey(epSender))
{
ClientThreads[epSender].InPacket(packet);
} else if( packet.Type == PacketType.UseCircuitCode ) { // new client
}
else if (packet.Type == PacketType.UseCircuitCode)
{ // new client
OpenSimClient newuser = new OpenSimClient(epSender, (UseCircuitCodePacket)packet);
ClientThreads.Add(epSender, newuser);
} else { // invalid client
}
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() {
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);
@ -241,7 +261,8 @@ namespace OpenSim
}
public static void Shutdown() {
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");
@ -276,12 +297,12 @@ namespace OpenSim
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);

View File

@ -44,7 +44,8 @@ namespace OpenSim
/// Handles new client connections
/// Constructor takes a single Packet and authenticates everything
/// </summary>
public class OpenSimClient {
public class OpenSimClient
{
public LLUUID AgentID;
public LLUUID SessionID;
@ -66,7 +67,8 @@ namespace OpenSim
private LLUUID newAssetFolder = LLUUID.Zero;
private bool debug = false;
public void ack_pack(Packet Pack) {
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();
@ -75,15 +77,18 @@ namespace OpenSim
//OutPacket(ack_it);
if (Pack.Header.Reliable) {
lock (PendingAcks) {
if (Pack.Header.Reliable)
{
lock (PendingAcks)
{
uint sequence = (uint)Pack.Header.Sequence;
if (!PendingAcks.ContainsKey(sequence)) { PendingAcks[sequence] = sequence; }
}
}
}
public void ProcessInPacket(Packet Pack) {
public void ProcessInPacket(Packet Pack)
{
ack_pack(Pack);
if (debug)
{
@ -92,7 +97,8 @@ namespace OpenSim
Console.WriteLine(Pack.Type.ToString());
}
}
switch(Pack.Type) {
switch (Pack.Type)
{
case PacketType.CompleteAgentMovement:
ClientAvatar.CompleteMovement(OpenSim_Main.local_world);
ClientAvatar.SendInitialPosition();
@ -102,7 +108,8 @@ namespace OpenSim
break;
case PacketType.AgentWearablesRequest:
ClientAvatar.SendInitialAppearance();
foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values)
{
if (client.AgentID != this.AgentID)
{
ObjectUpdatePacket objupdate = client.ClientAvatar.CreateUpdatePacket();
@ -196,16 +203,26 @@ namespace OpenSim
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) {
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) {
lock (OpenSim_Main.local_world.Entities)
{
OpenSim_Main.local_world.Entities.Remove(this.AgentID);
}
//need to do other cleaning up here too
@ -226,7 +243,8 @@ namespace OpenSim
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) {
foreach (OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values)
{
client.OutPacket(reply);
}
break;
@ -370,7 +388,8 @@ namespace OpenSim
ResendUnacked();
}
public void ProcessOutPacket(Packet Pack) {
public void ProcessOutPacket(Packet Pack)
{
// Keep track of when this packet was sent out
Pack.TickCount = Environment.TickCount;
@ -437,21 +456,28 @@ namespace OpenSim
byte[] sendbuffer;
sendbuffer = Pack.ToBytes();
try {
if (Pack.Header.Zerocoded) {
try
{
if (Pack.Header.Zerocoded)
{
int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
OpenSim_Main.Server.SendTo(ZeroOutBuffer, packetsize, SocketFlags.None,userEP);
} else {
OpenSim_Main.Server.SendTo(sendbuffer, sendbuffer.Length, SocketFlags.None,userEP);
OpenSim_Main.sim.Server.SendTo(ZeroOutBuffer, packetsize, SocketFlags.None, userEP);
}
} catch (Exception) {
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) {
public void InPacket(Packet NewPack)
{
// Handle appended ACKs
if (NewPack.Header.AppendedAcks)
{
@ -476,7 +502,9 @@ namespace OpenSim
NeedAck.Remove(block.ID);
}
}
} else if( ( NewPack.Type == PacketType.StartPingCheck ) ) {
}
else if ((NewPack.Type == PacketType.StartPingCheck))
{
//reply to pingcheck
libsecondlife.Packets.StartPingCheckPacket startPing = (libsecondlife.Packets.StartPingCheckPacket)NewPack;
libsecondlife.Packets.CompletePingCheckPacket endPing = new CompletePingCheckPacket();
@ -493,14 +521,16 @@ namespace OpenSim
}
public void OutPacket(Packet NewPack) {
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) {
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;
@ -514,9 +544,11 @@ namespace OpenSim
ClientThread.Start();
}
private void ClientLoop() {
private void ClientLoop()
{
ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:ClientLoop() - Entered loop");
while(true) {
while (true)
{
QueItem nextPacket = PacketQueue.Dequeue();
if (nextPacket.Incoming)
{
@ -531,7 +563,8 @@ namespace OpenSim
}
}
private void InitNewClient() {
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];
@ -557,6 +590,10 @@ namespace OpenSim
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);
@ -578,6 +615,8 @@ namespace OpenSim
}
}
}
}
ClientLoop();
}
}

View File

@ -61,6 +61,7 @@ namespace OpenSim
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");
@ -83,14 +84,22 @@ namespace OpenSim
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);
public override void Write(string format, params object[] args)
{
Log.Write(format, args);
Console.Write(format, args);
return;
}
public override string ReadLine() {
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;
@ -102,12 +111,6 @@ namespace OpenSim
return TempInt;
}
public override void Write(string Line) {
Console.Write(Line);
Log.Write(Line);
return;
}
// 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);
@ -172,7 +175,7 @@ namespace OpenSim
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"));
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")
{
@ -196,6 +199,12 @@ namespace OpenSim
string[] cmdparams=(string[])tempstrarray;
RunCmd(cmd,cmdparams);
}
public override void SetStatus(string status)
{
Console.Write( status + "\r" );
}
}
}

View File

@ -65,40 +65,52 @@ namespace RemoteGridServers
return (new RemoteAssetServer());
}
}
public class RemoteGridServer :IGridServer
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 bool RequestConnection()
public override bool RequestConnection()
{
return true;
}
public AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
{
AuthenticateResponse user = new AuthenticateResponse();
WebRequest CheckSession = WebRequest.Create(GridServerUrl + "/usersessions/" + GridSendKey + "/" + agentID.ToString() + "/" + circuitCode.ToString() + "/exists");
WebResponse GridResponse = CheckSession.GetResponse();
StreamReader sr = new StreamReader(GridResponse.GetResponseStream());
String grTest = sr.ReadLine();
sr.Close();
GridResponse.Close();
if(String.IsNullOrEmpty(grTest) || grTest.Equals("1"))
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 = "";
user.LoginInfo.Last = "";
user.LoginInfo.First = validcircuit.firstname;
user.LoginInfo.Last = validcircuit.lastname;
}
else
{
@ -109,47 +121,51 @@ namespace RemoteGridServers
return (user);
}
public bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
public override bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
{
WebRequest DeleteSession = WebRequest.Create(GridServerUrl + "/usersessions/" + GridSendKey + "/" + agentID.ToString() + "/" + circuitCode.ToString() + "/delete");
WebResponse GridResponse = DeleteSession.GetResponse();
StreamReader sr = new StreamReader(GridResponse.GetResponseStream());
String grTest = sr.ReadLine();
sr.Close();
GridResponse.Close();
ServerConsole.MainConsole.Instance.WriteLine("DEBUG: " + grTest);
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 UUIDBlock RequestUUIDBlock()
public override UUIDBlock RequestUUIDBlock()
{
UUIDBlock uuidBlock = new UUIDBlock();
return (uuidBlock);
}
public void RequestNeighbours()
public override void RequestNeighbours()
{
return;
}
public void SetServerInfo(string ServerUrl, string ServerKey)
public override void SetServerInfo(string ServerUrl, string ServerKey)
{
this.GridServerUrl = ServerUrl;
this.GridSendKey = ServerKey;
}
public void Close()
public override string GetName()
{
return "Remote";
}
public void AddNewSession(Login session)
public override void Close()
{
}
}
public class RemoteAssetServer : IAssetServer
{
private IAssetReceiver _receiver;
@ -196,10 +212,6 @@ namespace RemoteGridServers
this.AssetSendKey = ServerKey;
}
public void Close()
{
}
private void RunRequests()
{
while (true)
@ -221,9 +233,15 @@ namespace RemoteGridServers
_receiver.AssetReceived(asset, req.IsTexture);
}
}
public void Close()
{
}
}
public class BlockingQueue< T > {
public class BlockingQueue<T>
{
private Queue<T> _queue = new Queue<T>();
private object _queueSync = new object();

View File

@ -35,6 +35,9 @@
<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" />
@ -53,6 +56,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\InventoryManager.cs" />
<Compile Include="Config.cs" />
<Compile Include="Main.cs" />
<Compile Include="OpenSimClient.cs" />
@ -71,19 +75,30 @@
<Compile Include="OpenSimConsole.cs" />
<Compile Include="HeightMapGenHills.cs" />
<Compile Include="VersionInfo.cs" />
<Compile Include="Assets\InventoryManager.cs" />
<Compile Include="CAPS\SimHttp.cs">
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="GridServers" />
<Folder Include="Assets" />
<ProjectReference Include="GridInterfaces\GridInterfaces.csproj">
<Project>{5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9}</Project>
<Name>GridInterfaces</Name>
</ProjectReference>
<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="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>

View File

@ -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 );
}
}

View File

@ -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>

101
src/Util.cs Normal file
View File

@ -0,0 +1,101 @@
/*
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;
}
/* this is in IGridServer.cs, so there should be no reason for it to be here as well
public class agentcircuitdata
{
public agentcircuitdata() { }
public LLUUID AgentID;
public LLUUID SessionID;
public LLUUID SecureSessionID;
public string firstname;
public string lastname;
public uint circuitcode;
}
*/
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();
}
}
}
}

37
src/VersionInfo.cs Normal file
View File

@ -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";
}
}

74
src/opensim.sln Normal file
View File

@ -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}") = "GridInterfaces", "GridInterfaces\GridInterfaces.csproj", "{5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9}"
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
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
{5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9}.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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

161
src/physics/PhysicsActor.cs Normal file
View File

@ -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;
}
}
}

View File

@ -47,6 +47,11 @@ namespace PhysicsSystem
public PhysicsScene GetPhysicsScene(string engineName)
{
if (String.IsNullOrEmpty(engineName))
{
return new NullPhysicsScene();
}
if(_plugins.ContainsKey(engineName))
{
ServerConsole.MainConsole.Instance.WriteLine("creating "+engineName);
@ -54,8 +59,9 @@ namespace PhysicsSystem
}
else
{
ServerConsole.MainConsole.Instance.WriteLine("couldn't find physicsEngine: "+ engineName);
return null;
string error = String.Format("couldn't find physicsEngine: {0}", engineName);
ServerConsole.MainConsole.Instance.WriteLine(error);
throw new ArgumentException(error);
}
}
@ -99,6 +105,7 @@ namespace PhysicsSystem
pluginAssembly = null;
}
}
public interface IPhysicsPlugin
{
bool Init();
@ -106,83 +113,4 @@ namespace PhysicsSystem
string GetName();
void Dispose();
}
public abstract class PhysicsScene
{
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 abstract class PhysicsActor
{
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 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;
}
}
}

View File

@ -25,6 +25,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Axiom.MathLib">
<HintPath>..\..\bin\Axiom.MathLib.dll</HintPath>
@ -32,8 +33,11 @@
</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">

View File

@ -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; }
}
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,59 @@
<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>{52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BasicPhysicsplugin</RootNamespace>
<AssemblyName>BasicPhysicsplugin</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\bin\Physics\</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\Physics\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</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.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PhysXplugin.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" />
<!-- 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>