diff --git a/OGS.sql b/OGS.sql
deleted file mode 100644
index 5efaf97ef4..0000000000
--- a/OGS.sql
+++ /dev/null
@@ -1,134 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 2.6.3-pl1
--- http://www.phpmyadmin.net
---
--- Host: 127.0.0.1
--- Generation Time: Feb 16, 2007 at 09:54 PM
--- Server version: 4.0.23
--- PHP Version: 4.4.0
---
--- Database: `OGS`
---
-
--- --------------------------------------------------------
-
---
--- Table structure for table `Grid_settings`
---
-
-DROP TABLE IF EXISTS `Grid_settings`;
-CREATE TABLE IF NOT EXISTS `Grid_settings` (
- `Setting` text NOT NULL,
- `value` text NOT NULL
-) TYPE=MyISAM;
-
---
--- Dumping data for table `Grid_settings`
---
-
-INSERT INTO `Grid_settings` (`Setting`, `value`) VALUES ('highest_LLUUID', '51AEFF430000000000000000000002fd');
-
--- --------------------------------------------------------
-
---
--- Table structure for table `foreign_profiles`
---
-
-DROP TABLE IF EXISTS `foreign_profiles`;
-CREATE TABLE IF NOT EXISTS `foreign_profiles` (
- `userprofile_LLUUID` varchar(32) NOT NULL default '',
- `foreigngrid` text NOT NULL,
- `profile_firstname` text NOT NULL,
- `profile_lastname` text NOT NULL,
- `profile_passwdmd5` text NOT NULL,
- `homesim_ip` text NOT NULL,
- `homesim_port` int(11) NOT NULL default '0',
- `homeasset_url` text NOT NULL,
- `homeuser_url` text NOT NULL,
- `look_at` text NOT NULL,
- `region_handle` text NOT NULL,
- `position` text NOT NULL,
- PRIMARY KEY (`userprofile_LLUUID`)
-) TYPE=MyISAM;
-
---
--- Dumping data for table `foreign_profiles`
---
-
-
--- --------------------------------------------------------
-
---
--- Table structure for table `local_user_profiles`
---
-
-DROP TABLE IF EXISTS `local_user_profiles`;
-CREATE TABLE IF NOT EXISTS `local_user_profiles` (
- `userprofile_LLUUID` varchar(32) NOT NULL default '',
- `profile_firstname` text NOT NULL,
- `profile_lastname` text NOT NULL,
- `profile_passwdmd5` text NOT NULL,
- `homesim_ip` text NOT NULL,
- `homesim_port` int(11) NOT NULL default '0',
- `homeasset_url` text NOT NULL,
- `look_at` text NOT NULL,
- `region_handle` text NOT NULL,
- `position` text NOT NULL,
- PRIMARY KEY (`userprofile_LLUUID`)
-) TYPE=MyISAM;
-
---
--- Dumping data for table `local_user_profiles`
---
-
-INSERT INTO `local_user_profiles` (`userprofile_LLUUID`, `profile_firstname`, `profile_lastname`, `profile_passwdmd5`, `homesim_ip`, `homesim_port`, `homeasset_url`, `look_at`, `region_handle`, `position`) VALUES ('51AEFF43000000000000000000000100', 'Test', 'User', '$1$098f6bcd4621d373cade4e832627b4f6', '127.0.0.1', 1000, 'http://dummyassetserver.net/', 'r-0.57343, r-0.819255,r0', 'r255232,254976', 'r41.6589, r100.8374, r22.5072');
-
--- --------------------------------------------------------
-
---
--- Table structure for table `region_profiles`
---
-
-DROP TABLE IF EXISTS `region_profiles`;
-CREATE TABLE IF NOT EXISTS `region_profiles` (
- `RegionID` varchar(32) NOT NULL default '',
- `Name` text NOT NULL,
- `GridLocX` bigint(20) NOT NULL default '0',
- `GridLocY` bigint(20) NOT NULL default '0',
- `region_handle` text NOT NULL,
- `ip_addr` text NOT NULL,
- `port` text NOT NULL,
- PRIMARY KEY (`RegionID`)
-) TYPE=MyISAM;
-
---
--- Dumping data for table `region_profiles`
---
-
-INSERT INTO `region_profiles` (`RegionID`, `Name`, `GridLocX`, `GridLocY`, `region_handle`, `ip_addr`, `port`) VALUES ('51AEFF43000000000000000000000200', 'Test sandbox', 997, 996, 'r255232,254976', '127.0.0.1', '1000');
-
--- --------------------------------------------------------
-
---
--- Table structure for table `sessions`
---
-
-DROP TABLE IF EXISTS `sessions`;
-CREATE TABLE IF NOT EXISTS `sessions` (
- `session_id` varchar(32) NOT NULL default '',
- `secure_session_id` text NOT NULL,
- `agent_id` text NOT NULL,
- `session_start` datetime NOT NULL default '0000-00-00 00:00:00',
- `session_end` datetime NOT NULL default '0000-00-00 00:00:00',
- `session_active` tinyint(4) NOT NULL default '0',
- `current_location` text NOT NULL,
- `remote_ip` text NOT NULL,
- `circuit_code` int(11) NOT NULL default '0',
- PRIMARY KEY (`session_id`)
-) TYPE=MyISAM;
-
---
--- Dumping data for table `sessions`
---
-
-INSERT INTO `sessions` (`session_id`, `secure_session_id`, `agent_id`, `session_start`, `session_end`, `session_active`, `current_location`, `remote_ip`, `circuit_code`) VALUES ('51AEFF430000000000000000000002fc', '51AEFF430000000000000000000002fd', '51AEFF43000000000000000000000100', '2007-02-16 21:13:19', '0000-00-00 00:00:00', 1, 'r255232,254976', '81.174.255.70', 0);
diff --git a/ogs/OGS-UserServer.sln b/OGS/OGS.sln
similarity index 77%
rename from ogs/OGS-UserServer.sln
rename to OGS/OGS.sln
index 6c98af1115..20eb03a786 100644
--- a/ogs/OGS-UserServer.sln
+++ b/OGS/OGS.sln
@@ -3,9 +3,11 @@ 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}") = "OGS-GridServer", "gridserver\src\OGS-GridServer.csproj", "{FE50A574-C8ED-433B-95F0-213A5EED2AB2}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "..\OpenSim.FrameWork\OpenSim.Framework.csproj", "{2E46A825-3168-492F-93BC-637126B5B72B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -17,14 +19,18 @@ Global
{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
- {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
{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
diff --git a/ogs/ServerConsole/Properties/AssemblyInfo.cs b/OGS/ServerConsole/Properties/AssemblyInfo.cs
similarity index 100%
rename from ogs/ServerConsole/Properties/AssemblyInfo.cs
rename to OGS/ServerConsole/Properties/AssemblyInfo.cs
diff --git a/ogs/ServerConsole/ServerConsole.cs b/OGS/ServerConsole/ServerConsole.cs
similarity index 100%
rename from ogs/ServerConsole/ServerConsole.cs
rename to OGS/ServerConsole/ServerConsole.cs
diff --git a/ogs/ServerConsole/ServerConsole.csproj b/OGS/ServerConsole/ServerConsole.csproj
similarity index 81%
rename from ogs/ServerConsole/ServerConsole.csproj
rename to OGS/ServerConsole/ServerConsole.csproj
index 7f3005e6a5..d23ca524e1 100644
--- a/ogs/ServerConsole/ServerConsole.csproj
+++ b/OGS/ServerConsole/ServerConsole.csproj
@@ -9,8 +9,6 @@
Properties
ServerConsole
ServerConsole
-
-
true
@@ -39,11 +37,4 @@
-
\ No newline at end of file
diff --git a/ogs/ServerConsole/default.build b/OGS/ServerConsole/default.build
similarity index 100%
rename from ogs/ServerConsole/default.build
rename to OGS/ServerConsole/default.build
diff --git a/ogs/common/VersionInfo/VersionInfo.cs b/OGS/common/VersionInfo/VersionInfo.cs
similarity index 100%
rename from ogs/common/VersionInfo/VersionInfo.cs
rename to OGS/common/VersionInfo/VersionInfo.cs
diff --git a/OGS/common/bin/ServerConsole.dll b/OGS/common/bin/ServerConsole.dll
new file mode 100644
index 0000000000..842e0d0ee5
Binary files /dev/null and b/OGS/common/bin/ServerConsole.dll differ
diff --git a/OGS/common/bin/ServerConsole.pdb b/OGS/common/bin/ServerConsole.pdb
new file mode 100644
index 0000000000..b0f3b6330b
Binary files /dev/null and b/OGS/common/bin/ServerConsole.pdb differ
diff --git a/ogs/common/bin/libsecondlife.dll b/OGS/common/bin/libsecondlife.dll
old mode 100755
new mode 100644
similarity index 100%
rename from ogs/common/bin/libsecondlife.dll
rename to OGS/common/bin/libsecondlife.dll
diff --git a/ogs/common/src/OGS-Console.cs b/OGS/common/src/OGS-Console.cs
similarity index 100%
rename from ogs/common/src/OGS-Console.cs
rename to OGS/common/src/OGS-Console.cs
diff --git a/ogs/common/src/VersionInfo.cs.template b/OGS/common/src/VersionInfo.cs.template
similarity index 100%
rename from ogs/common/src/VersionInfo.cs.template
rename to OGS/common/src/VersionInfo.cs.template
diff --git a/ogs/gridserver/default.build b/OGS/gridserver/default.build
similarity index 100%
rename from ogs/gridserver/default.build
rename to OGS/gridserver/default.build
diff --git a/ogs/gridserver/src/ConsoleCmds.cs b/OGS/gridserver/src/ConsoleCmds.cs
similarity index 100%
rename from ogs/gridserver/src/ConsoleCmds.cs
rename to OGS/gridserver/src/ConsoleCmds.cs
diff --git a/ogs/gridserver/src/GridHttp.cs b/OGS/gridserver/src/GridHttp.cs
similarity index 95%
rename from ogs/gridserver/src/GridHttp.cs
rename to OGS/gridserver/src/GridHttp.cs
index 833a8ac8e8..496a3bcc2e 100644
--- a/ogs/gridserver/src/GridHttp.cs
+++ b/OGS/gridserver/src/GridHttp.cs
@@ -38,6 +38,7 @@ using System.Collections;
using System.Collections.Generic;
using libsecondlife;
using ServerConsole;
+using OpenSim.Framework.Sims;
namespace OpenGridServices
{
@@ -73,7 +74,7 @@ namespace OpenGridServices
switch(request.MethodName) {
case "get_sim_info":
ulong req_handle=(ulong)Convert.ToInt64(requestData["region_handle"]);
- SimProfile TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle(req_handle);
+ SimProfileBase TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle(req_handle);
string RecvKey="";
string caller=(string)requestData["caller"];
switch(caller) {
diff --git a/ogs/gridserver/src/Main.cs b/OGS/gridserver/src/Main.cs
similarity index 100%
rename from ogs/gridserver/src/Main.cs
rename to OGS/gridserver/src/Main.cs
diff --git a/ogs/gridserver/src/OGS-GridServer.csproj b/OGS/gridserver/src/OGS-GridServer.csproj
similarity index 84%
rename from ogs/gridserver/src/OGS-GridServer.csproj
rename to OGS/gridserver/src/OGS-GridServer.csproj
index d984e9ac5b..b957d40748 100644
--- a/ogs/gridserver/src/OGS-GridServer.csproj
+++ b/OGS/gridserver/src/OGS-GridServer.csproj
@@ -40,9 +40,6 @@
OGS-Console.cs
-
- Util.cs
-
VersionInfo.cs
@@ -53,17 +50,14 @@
+
+ {2E46A825-3168-492F-93BC-637126B5B72B}
+ OpenSim.Framework
+
{7667E6E2-F227-41A2-B1B2-315613E1BAFC}
ServerConsole
-
\ No newline at end of file
diff --git a/ogs/gridserver/src/Properties/AssemblyInfo.cs b/OGS/gridserver/src/Properties/AssemblyInfo.cs
similarity index 100%
rename from ogs/gridserver/src/Properties/AssemblyInfo.cs
rename to OGS/gridserver/src/Properties/AssemblyInfo.cs
diff --git a/ogs/gridserver/src/SimProfiles.cs b/OGS/gridserver/src/SimProfiles.cs
similarity index 79%
rename from ogs/gridserver/src/SimProfiles.cs
rename to OGS/gridserver/src/SimProfiles.cs
index 91a92ea6a2..6db8331fd8 100644
--- a/ogs/gridserver/src/SimProfiles.cs
+++ b/OGS/gridserver/src/SimProfiles.cs
@@ -33,6 +33,8 @@ using System.Collections;
using System.Collections.Generic;
using libsecondlife;
using ServerConsole;
+using OpenSim.Framework.Utilities;
+using OpenSim.Framework.Sims;
namespace OpenGridServices
{
@@ -40,7 +42,7 @@ namespace OpenGridServices
///
public class SimProfileManager {
- public Dictionary SimProfiles = new Dictionary();
+ public Dictionary SimProfiles = new Dictionary();
public SimProfileManager() {
}
@@ -49,19 +51,19 @@ namespace OpenGridServices
// TODO: need to load from database
}
- public SimProfile GetProfileByHandle(ulong reqhandle) {
+ public SimProfileBase GetProfileByHandle(ulong reqhandle) {
foreach (libsecondlife.LLUUID UUID in SimProfiles.Keys) {
if(SimProfiles[UUID].regionhandle==reqhandle) return SimProfiles[UUID];
}
return null;
}
- public SimProfile GetProfileByLLUUID(LLUUID ProfileLLUUID) {
+ public SimProfileBase GetProfileByLLUUID(LLUUID ProfileLLUUID) {
return SimProfiles[ProfileLLUUID];
}
public bool AuthenticateSim(LLUUID RegionUUID, uint regionhandle, string simrecvkey) {
- SimProfile TheSim=GetProfileByHandle(regionhandle);
+ SimProfileBase TheSim=GetProfileByHandle(regionhandle);
if(TheSim != null)
if(TheSim.recvkey==simrecvkey) {
return true;
@@ -71,8 +73,8 @@ namespace OpenGridServices
}
- public SimProfile CreateNewProfile(string regionname, string caps_url, string sim_ip, uint sim_port, uint RegionLocX, uint RegionLocY, string sendkey, string recvkey) {
- SimProfile newprofile = new SimProfile();
+ 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;
@@ -89,7 +91,8 @@ namespace OpenGridServices
}
- public class SimProfile {
+ /* is in OpenSim.Framework
+ public class SimProfileBase {
public LLUUID UUID;
public ulong regionhandle;
public string regionname;
@@ -102,10 +105,10 @@ namespace OpenGridServices
public string recvkey;
- public SimProfile() {
+ public SimProfileBase() {
}
- }
+ }*/
}
diff --git a/ogs/userserver/src/ConsoleCmds.cs b/OGS/userserver/src/ConsoleCmds.cs
similarity index 100%
rename from ogs/userserver/src/ConsoleCmds.cs
rename to OGS/userserver/src/ConsoleCmds.cs
diff --git a/ogs/userserver/src/Main.cs b/OGS/userserver/src/Main.cs
similarity index 91%
rename from ogs/userserver/src/Main.cs
rename to OGS/userserver/src/Main.cs
index 40ef916a76..7e5308e33d 100644
--- a/ogs/userserver/src/Main.cs
+++ b/OGS/userserver/src/Main.cs
@@ -33,6 +33,9 @@ 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
{
@@ -73,16 +76,17 @@ namespace OpenGridServices
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.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;
diff --git a/ogs/userserver/src/OGS-UserServer.csproj b/OGS/userserver/src/OGS-UserServer.csproj
similarity index 85%
rename from ogs/userserver/src/OGS-UserServer.csproj
rename to OGS/userserver/src/OGS-UserServer.csproj
index f6737c86c8..f4fa8b6403 100644
--- a/ogs/userserver/src/OGS-UserServer.csproj
+++ b/OGS/userserver/src/OGS-UserServer.csproj
@@ -48,21 +48,16 @@
-
-
+
+ {2E46A825-3168-492F-93BC-637126B5B72B}
+ OpenSim.Framework
+
{7667E6E2-F227-41A2-B1B2-315613E1BAFC}
ServerConsole
-
\ No newline at end of file
diff --git a/ogs/userserver/src/OGS-UserServer.csproj.user b/OGS/userserver/src/OGS-UserServer.csproj.user
similarity index 57%
rename from ogs/userserver/src/OGS-UserServer.csproj.user
rename to OGS/userserver/src/OGS-UserServer.csproj.user
index 9c0b2d97ec..aa75a3df42 100644
--- a/ogs/userserver/src/OGS-UserServer.csproj.user
+++ b/OGS/userserver/src/OGS-UserServer.csproj.user
@@ -1,14 +1,6 @@

publish\
-
-
-
-
-
-
-
-
0
en-US
false
diff --git a/ogs/userserver/src/Properties/AssemblyInfo.cs b/OGS/userserver/src/Properties/AssemblyInfo.cs
similarity index 100%
rename from ogs/userserver/src/Properties/AssemblyInfo.cs
rename to OGS/userserver/src/Properties/AssemblyInfo.cs
diff --git a/OGS/userserver/src/UserHttp.cs b/OGS/userserver/src/UserHttp.cs
new file mode 100644
index 0000000000..ce3cfcdc74
--- /dev/null
+++ b/OGS/userserver/src/UserHttp.cs
@@ -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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+using System;
+using System.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();
+ }
+ }
+
+
+}
diff --git a/OpenSim.Config/SimConfigDb4o/AssemblyInfo.cs b/OpenSim.Config/SimConfigDb4o/AssemblyInfo.cs
new file mode 100644
index 0000000000..96c3e7383d
--- /dev/null
+++ b/OpenSim.Config/SimConfigDb4o/AssemblyInfo.cs
@@ -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.*")]
diff --git a/OpenSim.Config/SimConfigDb4o/DbSimConfig.cs b/OpenSim.Config/SimConfigDb4o/DbSimConfig.cs
new file mode 100644
index 0000000000..250f3fd044
--- /dev/null
+++ b/OpenSim.Config/SimConfigDb4o/DbSimConfig.cs
@@ -0,0 +1,176 @@
+/*
+* 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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+using System;
+using System.Collections.Generic;
+using OpenSim;
+using OpenSim.Framework.Utilities;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Terrain;
+//using OpenSim.world;
+using Db4objects.Db4o;
+
+namespace OpenSim.Config.SimConfigDb4o
+{
+ public class Db40ConfigPlugin: ISimConfig
+ {
+ public SimConfig GetConfigObject()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Loading Db40Config dll");
+ return ( new DbSimConfig());
+ }
+ }
+
+ public class DbSimConfig : SimConfig
+ {
+ private bool isSandbox;
+ private IObjectContainer db;
+
+ public void LoadDefaults() {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:LoadDefaults() - Please press enter to retain default or enter new settings");
+
+ this.RegionName=OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Name [OpenSim test]: ","OpenSim test");
+ this.RegionLocX=(uint)Convert.ToInt32(OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location X [997]: ","997"));
+ this.RegionLocY=(uint)Convert.ToInt32(OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location Y [996]: ","996"));
+ this.IPListenPort=Convert.ToInt32(OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("UDP port for client connections [9000]: ","9000"));
+ this.IPListenAddr=OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("IP Address to listen on for client connections [127.0.0.1]: ","127.0.0.1");
+
+ if(!isSandbox)
+ {
+ this.AssetURL=OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Asset server URL: ");
+ this.AssetSendKey=OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Asset server key: ");
+ this.GridURL=OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid server URL: ");
+ this.GridSendKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to send to grid server: ");
+ this.GridRecvKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to expect from grid server: ");
+ this.UserURL = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("User server URL: ");
+ this.UserSendKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to send to user server: ");
+ this.UserRecvKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to expect from user server: ");
+ }
+ this.RegionHandle = Util.UIntsToLong((RegionLocX*256), (RegionLocY*256));
+ }
+
+ public override void InitConfig(bool sandboxMode) {
+ this.isSandbox = sandboxMode;
+ try {
+ db = Db4oFactory.OpenFile("opensim.yap");
+ IObjectSet result = db.Get(typeof(DbSimConfig));
+ if(result.Count==1) {
+ OpenSim.Framework.Console.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 {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults");
+ LoadDefaults();
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Writing out default settings to local database");
+ db.Set(this);
+ }
+ } catch(Exception e) {
+ db.Close();
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Exception occured");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(e.ToString());
+ }
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sim settings loaded:");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Name: " + this.RegionName);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Handle: " + this.RegionHandle.ToString());
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Listening on IP: " + this.IPListenAddr + ":" + this.IPListenPort);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sandbox Mode? " + isSandbox.ToString());
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Asset URL: " + this.AssetURL);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Asset key: " + this.AssetSendKey);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Grid URL: " + this.GridURL);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Grid key: " + this.GridSendKey);
+ }
+
+ public override float[] LoadWorld()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Loading world....");
+ //World blank = new World();
+ float[] heightmap = null;
+ OpenSim.Framework.Console.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) {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Found a heightmap in local database, loading");
+ MapStorage map=(MapStorage)world_result.Next();
+ //blank.LandMap = map.Map;
+ heightmap = map.Map;
+ } else {
+ OpenSim.Framework.Console.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);
+ heightmap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Saving heightmap to local database");
+ MapStorage map= new MapStorage();
+ map.Map = heightmap; //blank.LandMap;
+ db.Set(map);
+ db.Commit();
+ }
+ return heightmap;
+ }
+
+ public override void SaveMap(float[] heightmap)
+ {
+ IObjectSet world_result = db.Get(typeof(MapStorage));
+ if(world_result.Count>0) {
+ OpenSim.Framework.Console.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 = heightmap; //OpenSim_Main.local_world.LandMap;
+ db.Set(map1);
+ db.Commit();
+ }
+
+ public override void LoadFromGrid() {
+ OpenSim.Framework.Console.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();
+ }
+ }
+
+}
diff --git a/OpenSim.Config/SimConfigDb4o/MapStorage.cs b/OpenSim.Config/SimConfigDb4o/MapStorage.cs
new file mode 100644
index 0000000000..eb68a94fbb
--- /dev/null
+++ b/OpenSim.Config/SimConfigDb4o/MapStorage.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Config.SimConfigDb4o
+{
+ public class MapStorage
+ {
+ public float[] Map;
+
+ public MapStorage()
+ {
+
+ }
+ }
+}
diff --git a/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj
new file mode 100644
index 0000000000..02f626ff4b
--- /dev/null
+++ b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj
@@ -0,0 +1,107 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {C077B28B-2F8D-4BD9-8E47-84C51B3A7358}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Config.SimConfigDb4o
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Config.SimConfigDb4o
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \System.Data.dll.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \libsecondlife.dll.dll
+
+
+ \Db4objects.Db4o.dll.dll
+
+
+
+
+ OpenSim.Framework
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ OpenSim.Framework.Console
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build
new file mode 100644
index 0000000000..288e877f42
--- /dev/null
+++ b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Framework.Console/AssemblyInfo.cs b/OpenSim.Framework.Console/AssemblyInfo.cs
new file mode 100644
index 0000000000..00a9b7d748
--- /dev/null
+++ b/OpenSim.Framework.Console/AssemblyInfo.cs
@@ -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.*")]
diff --git a/OpenSim.Framework.Console/ConsoleBase.cs b/OpenSim.Framework.Console/ConsoleBase.cs
new file mode 100644
index 0000000000..5343e7142f
--- /dev/null
+++ b/OpenSim.Framework.Console/ConsoleBase.cs
@@ -0,0 +1,45 @@
+using System;
+
+namespace OpenSim.Framework.Console
+{
+ 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);
+ }
+}
diff --git a/src/VersionInfo.cs.template b/OpenSim.Framework.Console/MainConsole.cs
similarity index 80%
rename from src/VersionInfo.cs.template
rename to OpenSim.Framework.Console/MainConsole.cs
index e4e1b95ae3..02c4ae89f0 100644
--- a/src/VersionInfo.cs.template
+++ b/OpenSim.Framework.Console/MainConsole.cs
@@ -1,5 +1,5 @@
/*
-Copyright (c) OpenSim project, http://osgrid.org/
+* 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:
@@ -22,16 +22,27 @@ Copyright (c) OpenSim project, http://osgrid.org/
* 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
+namespace OpenSim.Framework.Console
{
- ///
- ///
- public class VersionInfo
- {
- public static string Version = "@@VERSION";
- }
+ public class MainConsole {
+
+ private static ConsoleBase instance;
+
+ public static ConsoleBase Instance
+ {
+ get
+ {
+ return instance;
+ }
+ set
+ {
+ instance = value;
+ }
+ }
+ }
+
}
diff --git a/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj b/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj
new file mode 100644
index 0000000000..1f0da5619c
--- /dev/null
+++ b/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj
@@ -0,0 +1,85 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Framework.Console
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Framework.Console
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Framework.Console/OpenSim.Framework.Console.dll.build b/OpenSim.Framework.Console/OpenSim.Framework.Console.dll.build
new file mode 100644
index 0000000000..9ceaea6277
--- /dev/null
+++ b/OpenSim.Framework.Console/OpenSim.Framework.Console.dll.build
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Framework/AgentCiruitData.cs b/OpenSim.Framework/AgentCiruitData.cs
new file mode 100644
index 0000000000..3ab8a804a1
--- /dev/null
+++ b/OpenSim.Framework/AgentCiruitData.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+
+namespace OpenSim.Framework.Interfaces
+{
+ public class AgentCircuitData
+ {
+ public AgentCircuitData() { }
+ public LLUUID AgentID;
+ public LLUUID SessionID;
+ public LLUUID SecureSessionID;
+ public string firstname;
+ public string lastname;
+ public uint circuitcode;
+ }
+}
diff --git a/OpenSim.Framework/AssetBase.cs b/OpenSim.Framework/AssetBase.cs
new file mode 100644
index 0000000000..8206b307e0
--- /dev/null
+++ b/OpenSim.Framework/AssetBase.cs
@@ -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()
+ {
+
+ }
+ }
+}
diff --git a/OpenSim.Framework/BlockingQueue.cs b/OpenSim.Framework/BlockingQueue.cs
new file mode 100644
index 0000000000..f840354295
--- /dev/null
+++ b/OpenSim.Framework/BlockingQueue.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Threading;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Utilities
+{
+ public class BlockingQueue
+ {
+ private Queue _queue = new Queue();
+ 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();
+ }
+ }
+ }
+}
diff --git a/src/HeightMapGenHills.cs b/OpenSim.Framework/HeightMapGenHills.cs
similarity index 96%
rename from src/HeightMapGenHills.cs
rename to OpenSim.Framework/HeightMapGenHills.cs
index e7589aff00..6a729da553 100644
--- a/src/HeightMapGenHills.cs
+++ b/OpenSim.Framework/HeightMapGenHills.cs
@@ -27,7 +27,7 @@
using System;
-namespace OpenSim
+namespace OpenSim.Framework.Terrain
{
public class HeightmapGenHills
{
diff --git a/src/GridInterfaces/IAssetServer.cs b/OpenSim.Framework/IAssetServer.cs
similarity index 63%
rename from src/GridInterfaces/IAssetServer.cs
rename to OpenSim.Framework/IAssetServer.cs
index 6050a6c679..a0de548a0e 100644
--- a/src/GridInterfaces/IAssetServer.cs
+++ b/OpenSim.Framework/IAssetServer.cs
@@ -30,53 +30,39 @@ using System.Net.Sockets;
using System.IO;
using System.Threading;
using libsecondlife;
+using OpenSim.Framework.Assets;
-
-namespace OpenSim.GridServers
+namespace OpenSim.Framework.Interfaces
{
- ///
- /// Description of IAssetServer.
- ///
-
- 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);
- }
-
- // 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();
- }
+ ///
+ /// Description of IAssetServer.
+ ///
+
+ 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 interface IAssetPlugin
+ {
+ IAssetServer GetAssetServer();
+ }
+
+ public struct ARequest
+ {
+ public LLUUID AssetID;
+ public bool IsTexture;
+ }
}
diff --git a/src/Config.cs b/OpenSim.Framework/IConfig.cs
similarity index 55%
rename from src/Config.cs
rename to OpenSim.Framework/IConfig.cs
index 1c0a6cc97e..ca7f6451b2 100644
--- a/src/Config.cs
+++ b/OpenSim.Framework/IConfig.cs
@@ -31,49 +31,48 @@ using System;
using System.Collections.Generic;
using System.IO;
using libsecondlife;
-using OpenSim.world;
+//using OpenSim.world;
-namespace OpenSim
+namespace OpenSim.Framework.Interfaces
{
- ///
- /// 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.
- ///
-
-
- 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 string GridRecvKey;
- public string UserURL;
- public string UserSendKey;
- public string UserRecvKey;
+ ///
+ /// 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.
+ ///
-
- public abstract void InitConfig();
- public abstract void LoadFromGrid();
- public abstract World LoadWorld();
- public abstract void SaveMap();
-
- }
-
- public interface ISimConfig
- {
- SimConfig GetConfigObject();
- }
+
+ 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 string GridRecvKey;
+ public string UserURL;
+ public string UserSendKey;
+ public string UserRecvKey;
+
+ public abstract void InitConfig(bool sandboxMode);
+ public abstract void LoadFromGrid();
+ public abstract float[] LoadWorld();
+ public abstract void SaveMap(float[] heightmap);
+
+ }
+
+ public interface ISimConfig
+ {
+ SimConfig GetConfigObject();
+ }
}
diff --git a/OpenSim.Framework/IGridServer.cs b/OpenSim.Framework/IGridServer.cs
new file mode 100644
index 0000000000..026dfab491
--- /dev/null
+++ b/OpenSim.Framework/IGridServer.cs
@@ -0,0 +1,78 @@
+/*
+* 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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using libsecondlife;
+using OpenSim;
+
+namespace OpenSim.Framework.Interfaces
+{
+ ///
+ /// Handles connection to Grid Servers.
+ /// also Sim to Sim connections?
+ ///
+
+ public interface IGridServer
+ {
+ UUIDBlock RequestUUIDBlock();
+ NeighbourInfo[] 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 SendKey, string RecvKey);
+ void Close();
+ }
+
+ public struct UUIDBlock
+ {
+ public LLUUID BlockStart;
+ public LLUUID BlockEnd;
+ }
+
+ public class AuthenticateResponse
+ {
+ public bool Authorised;
+ public Login LoginInfo;
+
+ public AuthenticateResponse()
+ {
+
+ }
+
+ }
+
+ public interface IGridPlugin
+ {
+ IGridServer GetGridServer();
+ }
+}
diff --git a/src/GridInterfaces/ILocalStorage.cs b/OpenSim.Framework/ILocalStorage.cs
similarity index 54%
rename from src/GridInterfaces/ILocalStorage.cs
rename to OpenSim.Framework/ILocalStorage.cs
index 6b7ded69e8..e9aa1a2cc3 100644
--- a/src/GridInterfaces/ILocalStorage.cs
+++ b/OpenSim.Framework/ILocalStorage.cs
@@ -27,60 +27,25 @@
using System;
using libsecondlife;
+using OpenSim.Framework.Assets;
-namespace GridInterfaces
+namespace OpenSim.Framework.Interfaces
{
- ///
- /// ILocalStorage. Really hacked together right now needs cleaning up
- ///
- public interface ILocalStorage
- {
- void StorePrim(PrimData prim);
- void RemovePrim(LLUUID primID);
- void LoadPrimitives(ILocalStorageReceiver receiver);
- void ShutDown();
- }
-
- public interface ILocalStorageReceiver
- {
- void PrimFromStorage(PrimData prim);
- }
-
-
- 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;
-
- //following only used during prim storage
- public LLVector3 Position;
- public LLQuaternion Rotation;
- public uint LocalID;
- public LLUUID FullID;
-
- public PrimData()
- {
-
- }
- }
+ ///
+ /// ILocalStorage. Really hacked together right now needs cleaning up
+ ///
+ public interface ILocalStorage
+ {
+ void StorePrim(PrimData prim);
+ void RemovePrim(LLUUID primID);
+ void LoadPrimitives(ILocalStorageReceiver receiver);
+ void ShutDown();
+ }
+
+ public interface ILocalStorageReceiver
+ {
+ void PrimFromStorage(PrimData prim);
+ }
+
}
+
diff --git a/OpenSim.Framework/IUserServer.cs b/OpenSim.Framework/IUserServer.cs
new file mode 100644
index 0000000000..bb2b668d7c
--- /dev/null
+++ b/OpenSim.Framework/IUserServer.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OpenSim.Framework.Inventory;
+using libsecondlife;
+
+namespace OpenSim.Framework.Interfaces
+{
+ public interface IUserServer
+ {
+ AgentInventory RequestAgentsInventory(LLUUID agentID);
+ void SetServerInfo(string ServerUrl, string SendKey, string RecvKey);
+ }
+}
diff --git a/OpenSim.Framework/Inventory.cs b/OpenSim.Framework/Inventory.cs
new file mode 100644
index 0000000000..e34ea756cb
--- /dev/null
+++ b/OpenSim.Framework/Inventory.cs
@@ -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 InventoryFolders;
+ public Dictionary 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();
+ InventoryItems = new Dictionary();
+ 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 Items;
+ //public List Subfolders;
+ public LLUUID FolderID;
+ public LLUUID OwnerID;
+ public LLUUID ParentID;
+ public string FolderName;
+ public ushort DefaultType;
+ public ushort Version;
+
+ public InventoryFolder()
+ {
+ Items = new List();
+ //Subfolders = new List();
+ }
+
+ }
+
+ 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()
+ {
+
+ }
+ }
+}
diff --git a/OpenSim.Framework/LocalGridBase.cs b/OpenSim.Framework/LocalGridBase.cs
new file mode 100644
index 0000000000..c9b278a846
--- /dev/null
+++ b/OpenSim.Framework/LocalGridBase.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+
+namespace OpenSim.Framework.Interfaces
+{
+ public abstract class LocalGridBase : IGridServer
+ {
+ public abstract UUIDBlock RequestUUIDBlock();
+ public abstract NeighbourInfo[] 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 SendKey, string RecvKey);
+ public abstract void AddNewSession(Login session);
+ public abstract void Close();
+ }
+
+}
diff --git a/OpenSim.Framework/Login.cs b/OpenSim.Framework/Login.cs
new file mode 100644
index 0000000000..8a67853c44
--- /dev/null
+++ b/OpenSim.Framework/Login.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+
+namespace OpenSim.Framework.Interfaces
+{
+ public class Login
+ {
+ public string First = "Test";
+ public string Last = "User";
+ public LLUUID Agent;
+ public LLUUID Session;
+ public LLUUID SecureSession = LLUUID.Zero;
+ public LLUUID InventoryFolder;
+ public LLUUID BaseFolder;
+ public Login()
+ {
+
+ }
+ }
+}
diff --git a/src/OpenSim.Framework/LoginService.cs b/OpenSim.Framework/LoginService.cs
similarity index 72%
rename from src/OpenSim.Framework/LoginService.cs
rename to OpenSim.Framework/LoginService.cs
index 85fe761225..eba0281729 100644
--- a/src/OpenSim.Framework/LoginService.cs
+++ b/OpenSim.Framework/LoginService.cs
@@ -3,13 +3,12 @@ using System.Collections;
using System.Collections.Generic;
using System.Text;
using Nwc.XmlRpc;
-using OpenSim.GridServers;
using libsecondlife;
-namespace OpenSim.Framework
+namespace OpenSim.Framework.Grid
{
public abstract class LoginService
{
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim.Framework/NeighbourInfo.cs b/OpenSim.Framework/NeighbourInfo.cs
new file mode 100644
index 0000000000..8b4fa64e1f
--- /dev/null
+++ b/OpenSim.Framework/NeighbourInfo.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Framework.Interfaces
+{
+ public class NeighbourInfo
+ {
+ public NeighbourInfo()
+ {
+ }
+
+ public ulong regionhandle;
+ public uint RegionLocX;
+ public uint RegionLocY;
+ public string sim_ip;
+ public uint sim_port;
+ }
+}
diff --git a/OpenSim.Framework/OpenSim.Framework.csproj b/OpenSim.Framework/OpenSim.Framework.csproj
new file mode 100644
index 0000000000..7a10319261
--- /dev/null
+++ b/OpenSim.Framework/OpenSim.Framework.csproj
@@ -0,0 +1,151 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Framework
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Framework
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \libsecondlife.dll.dll
+
+
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Framework/OpenSim.Framework.dll.build b/OpenSim.Framework/OpenSim.Framework.dll.build
new file mode 100644
index 0000000000..1418947bb2
--- /dev/null
+++ b/OpenSim.Framework/OpenSim.Framework.dll.build
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Framework/PrimData.cs b/OpenSim.Framework/PrimData.cs
new file mode 100644
index 0000000000..175a014df3
--- /dev/null
+++ b/OpenSim.Framework/PrimData.cs
@@ -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()
+ {
+
+ }
+ }
+}
diff --git a/src/Properties/AssemblyInfo.cs b/OpenSim.Framework/Properties/AssemblyInfo.cs
similarity index 78%
rename from src/Properties/AssemblyInfo.cs
rename to OpenSim.Framework/Properties/AssemblyInfo.cs
index 90fc127795..86f5cdbd10 100644
--- a/src/Properties/AssemblyInfo.cs
+++ b/OpenSim.Framework/Properties/AssemblyInfo.cs
@@ -5,12 +5,12 @@ 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")]
+[assembly: AssemblyTitle("OpenSim.FrameWork")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Playahead AB")]
-[assembly: AssemblyProduct("opensim")]
-[assembly: AssemblyCopyright("Copyright © Playahead AB 2007")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("OpenSim.FrameWork")]
+[assembly: AssemblyCopyright("Copyright © 2007")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("1d09756b-a461-4302-b6fe-15c455317909")]
+[assembly: Guid("a08e20c7-f191-4137-b1f0-9291408fa521")]
// Version information for an assembly consists of the following four values:
//
diff --git a/OpenSim.Framework/RemoteGridBase.cs b/OpenSim.Framework/RemoteGridBase.cs
new file mode 100644
index 0000000000..6ca57dfffe
--- /dev/null
+++ b/OpenSim.Framework/RemoteGridBase.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+
+namespace OpenSim.Framework.Interfaces
+{
+ public abstract class RemoteGridBase : IGridServer
+ {
+ public abstract Dictionary agentcircuits
+ {
+ get;
+ set;
+ }
+
+ public abstract UUIDBlock RequestUUIDBlock();
+ public abstract NeighbourInfo[] 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 SendKey, string RecvKey);
+ public abstract void Close();
+ }
+}
diff --git a/OpenSim.Framework/SimProfile.cs b/OpenSim.Framework/SimProfile.cs
new file mode 100644
index 0000000000..ac4cf9e327
--- /dev/null
+++ b/OpenSim.Framework/SimProfile.cs
@@ -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()
+ {
+ }
+ }
+
+}
diff --git a/OpenSim.Framework/SimProfileBase.cs b/OpenSim.Framework/SimProfileBase.cs
new file mode 100644
index 0000000000..5fe2734650
--- /dev/null
+++ b/OpenSim.Framework/SimProfileBase.cs
@@ -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()
+ {
+ }
+ }
+}
diff --git a/OpenSim.Framework/UserProfile.cs b/OpenSim.Framework/UserProfile.cs
new file mode 100644
index 0000000000..2c264c52e1
--- /dev/null
+++ b/OpenSim.Framework/UserProfile.cs
@@ -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 Circuits = new Dictionary(); // tracks circuit codes
+
+ public AgentInventory Inventory;
+
+ public UserProfile()
+ {
+ Circuits = new Dictionary();
+ 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);
+ }
+
+ }
+}
diff --git a/OpenSim.Framework/UserProfileManager.cs b/OpenSim.Framework/UserProfileManager.cs
new file mode 100644
index 0000000000..f77ca4ca78
--- /dev/null
+++ b/OpenSim.Framework/UserProfileManager.cs
@@ -0,0 +1,223 @@
+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;
+using OpenSim.Framework.Utilities;
+
+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)(Util.RandomClass.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);
+ }
+ }
+}
diff --git a/OpenSim.Framework/UserProfileManagerBase.cs b/OpenSim.Framework/UserProfileManagerBase.cs
new file mode 100644
index 0000000000..ad03bc23d2
--- /dev/null
+++ b/OpenSim.Framework/UserProfileManagerBase.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+using OpenSim.Framework.Utilities;
+using OpenSim.Framework.Inventory;
+
+namespace OpenSim.Framework.User
+{
+ public class UserProfileManagerBase
+ {
+
+ public Dictionary UserProfiles = new Dictionary();
+
+ 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;
+ }
+
+ public virtual AgentInventory GetUsersInventory(LLUUID agentID)
+ {
+ UserProfile user = this.GetProfileByLLUUID(agentID);
+ if (user != null)
+ {
+ return user.Inventory;
+ }
+
+ return null;
+ }
+
+ }
+}
diff --git a/OpenSim.Framework/Util.cs b/OpenSim.Framework/Util.cs
new file mode 100644
index 0000000000..042360d094
--- /dev/null
+++ b/OpenSim.Framework/Util.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+using libsecondlife.Packets;
+
+namespace OpenSim.Framework.Utilities
+{
+ public class Util
+ {
+ private static Random randomClass = new Random();
+
+ public static ulong UIntsToLong(uint X, uint Y)
+ {
+ return Helpers.UIntsToLong(X, Y);
+ }
+
+ public static Random RandomClass
+ {
+ get
+ {
+ return randomClass;
+ }
+ }
+
+ public Util()
+ {
+
+ }
+ }
+
+}
diff --git a/OpenSim.GridInterfaces/Local/AssemblyInfo.cs b/OpenSim.GridInterfaces/Local/AssemblyInfo.cs
new file mode 100644
index 0000000000..103b49a207
--- /dev/null
+++ b/OpenSim.GridInterfaces/Local/AssemblyInfo.cs
@@ -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.*")]
diff --git a/OpenSim.GridInterfaces/Local/LocalAssetServer.cs b/OpenSim.GridInterfaces/Local/LocalAssetServer.cs
new file mode 100644
index 0000000000..6cd954a037
--- /dev/null
+++ b/OpenSim.GridInterfaces/Local/LocalAssetServer.cs
@@ -0,0 +1,208 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading;
+using System.IO;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
+using OpenSim.Framework.Utilities;
+using libsecondlife;
+using Db4objects.Db4o;
+using Db4objects.Db4o.Query;
+
+namespace OpenSim.GridInterfaces.Local
+{
+ public class LocalAssetPlugin : IAssetPlugin
+ {
+ public LocalAssetPlugin()
+ {
+
+ }
+
+ public IAssetServer GetAssetServer()
+ {
+ return (new LocalAssetServer());
+ }
+ }
+
+ public class LocalAssetServer : IAssetServer
+ {
+ private IAssetReceiver _receiver;
+ private BlockingQueue _assetRequests;
+ private IObjectContainer db;
+ private Thread _localAssetServerThread;
+
+ public LocalAssetServer()
+ {
+ bool yapfile;
+ this._assetRequests = new BlockingQueue();
+ yapfile = System.IO.File.Exists("assets.yap");
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Local Asset Server class created");
+ try
+ {
+ db = Db4oFactory.OpenFile("assets.yap");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Db4 Asset database creation");
+ }
+ catch (Exception e)
+ {
+ db.Close();
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Db4 Asset server :Constructor - Exception occured");
+ OpenSim.Framework.Console.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)
+ {
+ AssetStorage store = new AssetStorage();
+ store.Data = asset.Data;
+ store.Name = asset.Name;
+ store.UUID = asset.FullID;
+ db.Set(store);
+ db.Commit();
+ }
+
+ 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 = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005");
+ Image.Name = "Prim Base Texture";
+ this.LoadAsset(Image, true, "testpic2.jp2");
+ 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;
+ }
+ }
+}
diff --git a/src/LocalServers/LocalGridServers/LocalGrid.cs b/OpenSim.GridInterfaces/Local/LocalGridServer.cs
similarity index 59%
rename from src/LocalServers/LocalGridServers/LocalGrid.cs
rename to OpenSim.GridInterfaces/Local/LocalGridServer.cs
index bd377d3431..d70e989573 100644
--- a/src/LocalServers/LocalGridServers/LocalGrid.cs
+++ b/OpenSim.GridInterfaces/Local/LocalGridServer.cs
@@ -27,10 +27,14 @@
using System;
using System.Collections.Generic;
using System.Threading;
-using OpenSim.GridServers;
+using System.IO;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
using libsecondlife;
+using Db4objects.Db4o;
+using Db4objects.Db4o.Query;
-namespace LocalGridServers
+namespace OpenSim.GridInterfaces.Local
{
///
///
@@ -49,86 +53,26 @@ namespace LocalGridServers
}
}
- public class LocalAssetPlugin : IAssetPlugin
- {
- public LocalAssetPlugin()
- {
-
- }
-
- public IAssetServer GetAssetServer()
- {
- return(new LocalAssetServer());
- }
- }
-
- public class LocalAssetServer : IAssetServer
- {
- private IAssetReceiver _receiver;
- private BlockingQueue _assetRequests;
-
- public LocalAssetServer()
- {
- this._assetRequests = new BlockingQueue();
- ServerConsole.MainConsole.Instance.WriteLine("Local 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 SendKey)
- {
-
- }
-
- private void RunRequests()
- {
- while(true)
- {
- Thread.Sleep(1000);
- }
- }
- }
-
public class LocalGridServer : LocalGridBase
{
public List Sessions = new List();
-
+
public LocalGridServer()
{
Sessions = new List();
- ServerConsole.MainConsole.Instance.WriteLine("Local Grid Server class created");
- }
-
- public override string GetName()
- {
- return "Local";
+ OpenSim.Framework.Console.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
@@ -159,17 +103,22 @@ namespace LocalGridServers
UUIDBlock uuidBlock = new UUIDBlock();
return(uuidBlock);
}
-
- public override neighbourinfo[] RequestNeighbours(ulong regionhandle)
+
+ public override NeighbourInfo[] RequestNeighbours()
{
- return new neighbourinfo[8];
+ return null;
}
-
- public override void SetServerInfo(string GridServerUrl, string GridSendKey, string GridRecvKey, string UserServerUrl, string UserSendKey, string UserRecvKey)
+
+ public override void SetServerInfo(string ServerUrl, string SendKey, string RecvKey)
{
}
+ public override void Close()
+ {
+
+ }
+
///
/// used by the local login server to inform us of new sessions
///
@@ -182,30 +131,26 @@ namespace LocalGridServers
}
}
}
-
- public class BlockingQueue< T > {
- private Queue< T > _queue = new Queue< T >();
- private object _queueSync = new object();
- public void Enqueue(T value)
+ public class AssetUUIDQuery : Predicate
+ {
+ private LLUUID _findID;
+
+ public AssetUUIDQuery(LLUUID find)
{
- lock(_queueSync)
- {
- _queue.Enqueue(value);
- Monitor.Pulse(_queueSync);
- }
+ _findID = find;
}
-
- public T Dequeue()
+ public bool Match(AssetStorage asset)
{
- lock(_queueSync)
- {
- if( _queue.Count < 1)
- Monitor.Wait(_queueSync);
-
- return _queue.Dequeue();
- }
+ return (asset.UUID == _findID);
}
}
-
+
+ public class AssetStorage
+ {
+ public byte[] Data;
+ public sbyte Type;
+ public string Name;
+ public LLUUID UUID;
+ }
}
diff --git a/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj
new file mode 100644
index 0000000000..b3318afa75
--- /dev/null
+++ b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj
@@ -0,0 +1,104 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {FBF3DA4B-5176-4602-AA52-482D077EEC88}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.GridInterfaces.Local
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.GridInterfaces.Local
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \Db4objects.Db4o.dll.dll
+
+
+ \libsecondlife.dll.dll
+
+
+
+
+ OpenSim.Framework
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ OpenSim.Framework.Console
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build
new file mode 100644
index 0000000000..eff1fac7ae
--- /dev/null
+++ b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs b/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs
new file mode 100644
index 0000000000..0fa7d6ea66
--- /dev/null
+++ b/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs
@@ -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.*")]
diff --git a/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj
new file mode 100644
index 0000000000..37d1d12f2c
--- /dev/null
+++ b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj
@@ -0,0 +1,101 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {2AF1E37E-064D-4590-8D7E-B6390F721BAE}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.GridInterfaces.Remote
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.GridInterfaces.Remote
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \libsecondlife.dll.dll
+
+
+
+
+ OpenSim.Framework
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ OpenSim.Framework.Console
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build
new file mode 100644
index 0000000000..e0d24ffc22
--- /dev/null
+++ b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs b/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs
new file mode 100644
index 0000000000..528e9fa680
--- /dev/null
+++ b/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using libsecondlife;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
+using OpenSim.Framework.Utilities;
+
+namespace OpenSim.GridInterfaces.Remote
+{
+ public class RemoteAssetServer : IAssetServer
+ {
+ private IAssetReceiver _receiver;
+ private BlockingQueue _assetRequests;
+ private Thread _remoteAssetServerThread;
+ private string AssetServerUrl;
+ private string AssetSendKey;
+
+ public RemoteAssetServer()
+ {
+ this._assetRequests = new BlockingQueue();
+ this._remoteAssetServerThread = new Thread(new ThreadStart(RunRequests));
+ this._remoteAssetServerThread.IsBackground = true;
+ this._remoteAssetServerThread.Start();
+ OpenSim.Framework.Console.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;
+ OpenSim.Framework.Console.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 RemoteAssetPlugin : IAssetPlugin
+ {
+ public RemoteAssetPlugin()
+ {
+
+ }
+
+ public IAssetServer GetAssetServer()
+ {
+ return (new RemoteAssetServer());
+ }
+ }
+
+}
diff --git a/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs b/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs
new file mode 100644
index 0000000000..5f4891638a
--- /dev/null
+++ b/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs
@@ -0,0 +1,156 @@
+/*
+* 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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using libsecondlife;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
+
+namespace OpenSim.GridInterfaces.Remote
+{
+ public class RemoteGridServer : RemoteGridBase
+ {
+ private string GridServerUrl;
+ private string GridSendKey;
+ private string GridRecvKey;
+ private Dictionary AgentCircuits = new Dictionary();
+
+ public override Dictionary agentcircuits
+ {
+ get { return AgentCircuits; }
+ set { AgentCircuits = value; }
+ }
+
+ public RemoteGridServer()
+ {
+ OpenSim.Framework.Console.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.SecureSession = validcircuit.SecureSessionID;
+ 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 NeighbourInfo[] RequestNeighbours()
+ {
+ return null;
+ }
+
+ public override void SetServerInfo(string ServerUrl, string SendKey, string RecvKey)
+ {
+ this.GridServerUrl = ServerUrl;
+ this.GridSendKey = SendKey;
+ this.GridRecvKey = RecvKey;
+ }
+
+ public override string GetName()
+ {
+ return "Remote";
+ }
+
+ public override void Close()
+ {
+
+ }
+ }
+
+ public class RemoteGridPlugin : IGridPlugin
+ {
+ public RemoteGridPlugin()
+ {
+
+ }
+
+ public IGridServer GetGridServer()
+ {
+ return (new RemoteGridServer());
+ }
+ }
+
+}
diff --git a/OpenSim.Physics/BasicPhysicsPlugin/AssemblyInfo.cs b/OpenSim.Physics/BasicPhysicsPlugin/AssemblyInfo.cs
new file mode 100644
index 0000000000..0c9c06c43d
--- /dev/null
+++ b/OpenSim.Physics/BasicPhysicsPlugin/AssemblyInfo.cs
@@ -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("PhysXplugin")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PhysXplugin")]
+[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.*")]
diff --git a/src/physics/plugins/PhysXplugin.cs b/OpenSim.Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
similarity index 81%
rename from src/physics/plugins/PhysXplugin.cs
rename to OpenSim.Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
index 8c09dc8a89..deff80349c 100644
--- a/src/physics/plugins/PhysXplugin.cs
+++ b/OpenSim.Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
@@ -26,18 +26,18 @@
*/
using System;
using System.Collections.Generic;
-using PhysicsSystem;
+using OpenSim.Physics.Manager;
-namespace PhysXplugin
+namespace OpenSim.Physics.BasicPhysicsPlugin
{
///
/// Will be the PhysX plugin but for now will be a very basic physics engine
///
- public class PhysXPlugin : IPhysicsPlugin
+ public class BasicPhysicsPlugin : IPhysicsPlugin
{
- private PhysXScene _mScene;
+ private BasicScene _mScene;
- public PhysXPlugin()
+ public BasicPhysicsPlugin()
{
}
@@ -51,14 +51,14 @@ namespace PhysXplugin
{
if(_mScene == null)
{
- _mScene = new PhysXScene();
+ _mScene = new BasicScene();
}
return(_mScene);
}
public string GetName()
{
- return("PhysX");
+ return("basicphysics");
}
public void Dispose()
@@ -67,19 +67,19 @@ namespace PhysXplugin
}
}
- public class PhysXScene :PhysicsScene
+ public class BasicScene :PhysicsScene
{
- private List _actors = new List();
+ private List _actors = new List();
private float[] _heightMap;
- public PhysXScene()
+ public BasicScene()
{
}
public override PhysicsActor AddAvatar(PhysicsVector position)
{
- PhysXActor act = new PhysXActor();
+ BasicActor act = new BasicActor();
act.Position = position;
_actors.Add(act);
return act;
@@ -92,7 +92,7 @@ namespace PhysXplugin
public override void Simulate(float timeStep)
{
- foreach (PhysXActor actor in _actors)
+ foreach (BasicActor actor in _actors)
{
actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep);
actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep);
@@ -151,13 +151,13 @@ namespace PhysXplugin
}
}
- public class PhysXActor : PhysicsActor
+ public class BasicActor : PhysicsActor
{
private PhysicsVector _position;
private PhysicsVector _velocity;
private PhysicsVector _acceleration;
private bool flying;
- public PhysXActor()
+ public BasicActor()
{
_velocity = new PhysicsVector();
_position = new PhysicsVector();
@@ -200,6 +200,18 @@ namespace PhysXplugin
}
}
+ public override Axiom.MathLib.Quaternion Orientation
+ {
+ get
+ {
+ return Axiom.MathLib.Quaternion.Identity;
+ }
+ set
+ {
+
+ }
+ }
+
public override PhysicsVector Acceleration
{
get
@@ -208,6 +220,18 @@ namespace PhysXplugin
}
}
+
+ public override bool Kinematic
+ {
+ get
+ {
+ return true;
+ }
+ set
+ {
+
+ }
+ }
public void SetAcceleration (PhysicsVector accel)
{
this._acceleration = accel;
diff --git a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj
new file mode 100644
index 0000000000..dbfebd3523
--- /dev/null
+++ b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj
@@ -0,0 +1,90 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Physics.BasicPhysicsPlugin
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Physics.BasicPhysicsPlugin
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\Physics\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\Physics\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \Axiom.MathLib.dll.dll
+
+
+
+
+ OpenSim.Physics.Manager
+ {58360A80-9333-4E0F-8F83-3CF937E51633}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj.user b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj.user
new file mode 100644
index 0000000000..13e65a84bd
--- /dev/null
+++ b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj.user
@@ -0,0 +1,12 @@
+
+
+ Debug
+ AnyCPU
+ C:\Documents and Settings\Stefan\My Documents\Projects\source\opensim\branches\zircon\bin\
+ 8.0.50727
+ ProjectFiles
+ 0
+
+
+
+
diff --git a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build
new file mode 100644
index 0000000000..f14673337a
--- /dev/null
+++ b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Physics/Manager/AssemblyInfo.cs b/OpenSim.Physics/Manager/AssemblyInfo.cs
new file mode 100644
index 0000000000..57a8913d33
--- /dev/null
+++ b/OpenSim.Physics/Manager/AssemblyInfo.cs
@@ -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.*")]
diff --git a/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj
new file mode 100644
index 0000000000..728686e85d
--- /dev/null
+++ b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj
@@ -0,0 +1,102 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {58360A80-9333-4E0F-8F83-3CF937E51633}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Physics.Manager
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Physics.Manager
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \Axiom.MathLib.dll.dll
+
+
+
+
+ OpenSim.Framework.Console
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build
new file mode 100644
index 0000000000..0f6565bf50
--- /dev/null
+++ b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Physics/Manager/PhysicsActor.cs b/OpenSim.Physics/Manager/PhysicsActor.cs
new file mode 100644
index 0000000000..a0b6c21b56
--- /dev/null
+++ b/OpenSim.Physics/Manager/PhysicsActor.cs
@@ -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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Physics.Manager
+{
+ 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;
+ }
+ }
+}
diff --git a/OpenSim.Physics/Manager/PhysicsManager.cs b/OpenSim.Physics/Manager/PhysicsManager.cs
new file mode 100644
index 0000000000..616682b0da
--- /dev/null
+++ b/OpenSim.Physics/Manager/PhysicsManager.cs
@@ -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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+using System;
+using System.Collections.Generic;
+using System.Collections;
+using System.IO;
+using System.Reflection;
+using Axiom.MathLib;
+
+namespace OpenSim.Physics.Manager
+{
+ ///
+ /// Description of MyClass.
+ ///
+ public class PhysicsManager
+ {
+ private Dictionary _plugins=new Dictionary();
+
+ public PhysicsManager()
+ {
+
+ }
+
+ public PhysicsScene GetPhysicsScene(string engineName)
+ {
+ if (String.IsNullOrEmpty(engineName))
+ {
+ return new NullPhysicsScene();
+ }
+
+ if(_plugins.ContainsKey(engineName))
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("creating "+engineName);
+ return _plugins[engineName].GetScene();
+ }
+ else
+ {
+ string error = String.Format("couldn't find physicsEngine: {0}", engineName);
+ OpenSim.Framework.Console.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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Physics.Manager
+{
+ 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)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("NullPhysicsScene : AddAvatar({0})", position);
+ return PhysicsActor.Null;
+ }
+
+ public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("NullPhysicsScene : AddPrim({0},{1})", position, size);
+ return PhysicsActor.Null;
+ }
+
+ public override void Simulate(float timeStep)
+ {
+ m_workIndicator = (m_workIndicator + 1) % 10;
+
+ OpenSim.Framework.Console.MainConsole.Instance.SetStatus(m_workIndicator.ToString());
+ }
+
+ public override void GetResults()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("NullPhysicsScene : GetResults()");
+ }
+
+ public override void SetTerrain(float[] heightMap)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("NullPhysicsScene : SetTerrain({0} items)", heightMap.Length);
+ }
+
+ public override bool IsThreaded
+ {
+ get { return false; }
+ }
+ }
+}
diff --git a/OpenSim.Physics/Manager/PhysicsVector.cs b/OpenSim.Physics/Manager/PhysicsVector.cs
new file mode 100644
index 0000000000..3c824d010d
--- /dev/null
+++ b/OpenSim.Physics/Manager/PhysicsVector.cs
@@ -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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Physics.Manager
+{
+ 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);
+ }
+}
diff --git a/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs b/OpenSim.Physics/PhysXPlugin/AssemblyInfo.cs
similarity index 100%
rename from src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs
rename to OpenSim.Physics/PhysXPlugin/AssemblyInfo.cs
diff --git a/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj
new file mode 100644
index 0000000000..e1e8eea913
--- /dev/null
+++ b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj
@@ -0,0 +1,93 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {CBE1E31D-D7E3-4791-A616-F00173BBC26A}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Physics.PhysXPlugin
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Physics.PhysXPlugin
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\Physics\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\Physics\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \Axiom.MathLib.dll.dll
+
+
+ \PhysX_Wrapper_Dotnet.dll.dll
+
+
+
+
+ OpenSim.Physics.Manager
+ {58360A80-9333-4E0F-8F83-3CF937E51633}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build
new file mode 100644
index 0000000000..8f9e7dc80f
--- /dev/null
+++ b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs b/OpenSim.Physics/PhysXPlugin/PhysXPlugin.cs
similarity index 84%
rename from src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs
rename to OpenSim.Physics/PhysXPlugin/PhysXPlugin.cs
index 9576a40e91..043c2f1ec0 100644
--- a/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs
+++ b/OpenSim.Physics/PhysXPlugin/PhysXPlugin.cs
@@ -52,10 +52,10 @@
*/
using System;
using System.Collections.Generic;
-using PhysicsSystem;
+using OpenSim.Physics.Manager;
using PhysXWrapper;
-namespace PhysXplugin
+namespace OpenSim.Physics.PhysXPlugin
{
///
/// Will be the PhysX plugin but for now will be a very basic physics engine
@@ -105,6 +105,7 @@ namespace PhysXplugin
public PhysXScene()
{
mySdk = NxPhysicsSDK.CreateSDK();
+ Console.WriteLine("Sdk created - now creating scene");
scene = mySdk.CreateScene();
}
@@ -179,6 +180,7 @@ namespace PhysXplugin
private PhysicsVector _acceleration;
private NxCharacter _character;
private bool flying;
+ private float gravityAccel;
public PhysXCharacter(NxCharacter character)
{
@@ -224,6 +226,30 @@ namespace PhysXplugin
}
}
+ 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
@@ -258,9 +284,14 @@ namespace PhysXplugin
}
else
{
- vec.Z = (-9.8f + this._velocity.Z) * timeStep;
+ gravityAccel+= -9.8f;
+ vec.Z = (gravityAccel + this._velocity.Z) * timeStep;
+ }
+ int res = this._character.Move(vec);
+ if(res == 1)
+ {
+ gravityAccel = 0;
}
- this._character.Move(vec);
}
public void UpdatePosition()
@@ -332,6 +363,36 @@ namespace PhysXplugin
}
}
+ 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
diff --git a/OpenSim.RegionServer/Assets/AssetCache.cs b/OpenSim.RegionServer/Assets/AssetCache.cs
new file mode 100644
index 0000000000..f7f2e10dc3
--- /dev/null
+++ b/OpenSim.RegionServer/Assets/AssetCache.cs
@@ -0,0 +1,589 @@
+/*
+* 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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using libsecondlife;
+using libsecondlife.Packets;
+using OpenSim;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
+using OpenSim.Framework.Utilities;
+
+namespace OpenSim.Assets
+{
+ ///
+ /// Manages local cache of assets and their sending to viewers.
+ ///
+ public class AssetCache : IAssetReceiver
+ {
+ public Dictionary Assets;
+ public Dictionary Textures;
+
+ public List AssetRequests = new List(); //assets ready to be sent to viewers
+ public List TextureRequests = new List(); //textures ready to be sent
+
+ public Dictionary RequestedAssets = new Dictionary(); //Assets requested from the asset server
+ public Dictionary RequestedTextures = new Dictionary(); //Textures requested from the asset server
+
+ //private Dictionary IncomingAssets;
+
+ private IAssetServer _assetServer;
+ private Thread _assetCacheThread;
+ private LLUUID[] textureList = new LLUUID[2];
+
+ ///
+ ///
+ ///
+ public AssetCache(IAssetServer assetServer)
+ {
+ Console.WriteLine("Creating Asset cache");
+ _assetServer = assetServer;
+ _assetServer.SetReceiver(this);
+ Assets = new Dictionary();
+ Textures = new Dictionary();
+ //IncomingAssets = new Dictionary();
+ this._assetCacheThread = new Thread(new ThreadStart(RunAssetManager));
+ this._assetCacheThread.IsBackground = true;
+ this._assetCacheThread.Start();
+
+ }
+
+ ///
+ ///
+ ///
+ public void RunAssetManager()
+ {
+ while (true)
+ {
+ try
+ {
+ //Console.WriteLine("Asset cache loop");
+ this.ProcessAssetQueue();
+ this.ProcessTextureQueue();
+ Thread.Sleep(500);
+ }
+ 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);
+ this._assetServer.UploadNewAsset(image); //save the asset to the asset server
+ }
+ }
+ return inventorySet;
+ }
+
+ ///
+ ///
+ ///
+ 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;
+ Console.WriteLine("processing texture requests ( " + num + " )");
+ for (int i = 0; i < num; i++)
+ {
+ req = (AssetRequest)this.TextureRequests[i];
+ if (req.PacketCounter != req.NumPackets)
+ {
+ // if (req.ImageInfo.FullID == new LLUUID("00000000-0000-0000-5005-000000000005"))
+ Console.WriteLine("sending base texture ( " + req.ImageInfo.FullID + " ) in " + req.NumPackets + "number of packets");
+
+ 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++)
+ {
+ if (this.TextureRequests.Count > count)
+ {
+ req = (AssetRequest)this.TextureRequests[count];
+ if (req.PacketCounter == req.NumPackets)
+ {
+ this.TextureRequests.Remove(req);
+ }
+ else
+ {
+ count++;
+ }
+ }
+ }
+
+ }
+ public void AssetReceived(AssetBase asset, bool IsTexture)
+ {
+ Console.WriteLine("received asset from asset server ( " + asset.FullID + " )");
+ 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;
+ if (image.Data.LongLength > 600)
+ {
+ //over 600 bytes so split up file
+ req.NumPackets = 1 + (int)(image.Data.Length - 600 + 999) / 1000;
+ }
+ else
+ {
+ req.NumPackets = 1;
+ }
+ 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;
+ if (assetInf.Data.LongLength > 600)
+ {
+ //over 600 bytes so split up file
+ req.NumPackets = 1 + (int)(assetInf.Data.Length - 600 + 999) / 1000;
+ }
+ else
+ {
+ req.NumPackets = 1;
+ }
+ 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
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void AddAssetRequest(SimClient 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);
+ }
+
+ ///
+ ///
+ ///
+ 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
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void AddTextureRequest(SimClient userInfo, LLUUID imageID)
+ {
+ if (imageID == new LLUUID("00000000-0000-0000-5005-000000000005"))
+ Console.WriteLine("request base prim texture ");
+
+ //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, LLUUID assetID)
+ {
+
+ AssetBase asset = null;
+ if (pack.AssetBlock.Type == 0)
+ {
+ if (pack.AssetBlock.AssetData.Length > 0)
+ {
+ //first packet for transaction
+ asset = new AssetBase();
+ asset.FullID = assetID;
+ asset.Type = pack.AssetBlock.Type;
+ asset.InvType = asset.Type;
+ asset.Name = "UploadedTexture" + Util.RandomClass.Next(1, 1000).ToString("000");
+ asset.Data = pack.AssetBlock.AssetData;
+ this._assetServer.UploadNewAsset(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 SimClient 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;
+ }
+ }
+
+}
diff --git a/OpenSim.RegionServer/Assets/InventoryCache.cs b/OpenSim.RegionServer/Assets/InventoryCache.cs
new file mode 100644
index 0000000000..0788db2784
--- /dev/null
+++ b/OpenSim.RegionServer/Assets/InventoryCache.cs
@@ -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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using libsecondlife;
+using OpenSim;
+using libsecondlife.Packets;
+//using OpenSim.GridServers;
+using OpenSim.Framework.Inventory;
+using OpenSim.Framework.Assets;
+
+namespace OpenSim.Assets
+{
+ ///
+ /// Description of InventoryManager.
+ ///
+ public class InventoryCache
+ {
+ private Dictionary _agentsInventory;
+ private List _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 InventoryCache()
+ {
+ _agentsInventory = new Dictionary();
+ _serverRequests = new List();
+ }
+
+ 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(SimClient 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(SimClient 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(SimClient 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(SimClient 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()
+ {
+
+ }
+ }
+}
diff --git a/OpenSim.RegionServer/CAPS/SimHttp.cs b/OpenSim.RegionServer/CAPS/SimHttp.cs
new file mode 100644
index 0000000000..f5a87056ce
--- /dev/null
+++ b/OpenSim.RegionServer/CAPS/SimHttp.cs
@@ -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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+using System;
+using System.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 OpenSim.Framework.Console;
+using OpenSim.Framework.Interfaces;
+
+namespace OpenSim.CAPS
+{
+ // Dummy HTTP server, does nothing useful for now
+
+ public class SimCAPSHTTPServer
+ {
+ public Thread HTTPD;
+ public HttpListener Listener;
+
+ public SimCAPSHTTPServer()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting up HTTP Server");
+ HTTPD = new Thread(new ThreadStart(StartHTTP));
+ HTTPD.Start();
+ }
+
+ public void StartHTTP()
+ {
+ try
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimHttp.cs:StartHTTP() - Spawned main thread OK");
+ Listener = new HttpListener();
+
+ Listener.Prefixes.Add("http://+:" + OpenSimRoot.Instance.Cfg.IPListenPort + "/");
+ Listener.Start();
+
+ HttpListenerContext context;
+ while (true)
+ {
+ context = Listener.GetContext();
+ ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context);
+ }
+ }
+ catch (Exception e)
+ {
+ OpenSim.Framework.Console.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 (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Remote")
+ {
+ ((RemoteGridBase)OpenSimRoot.Instance.GridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
+ }
+ return "";
+ 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();
+ }
+ }
+
+
+}
diff --git a/OpenSim.RegionServer/Grid.cs b/OpenSim.RegionServer/Grid.cs
new file mode 100644
index 0000000000..b0df6a8088
--- /dev/null
+++ b/OpenSim.RegionServer/Grid.cs
@@ -0,0 +1,89 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using OpenSim.Framework.Interfaces;
+using OpenSim.UserServer;
+
+namespace OpenSim
+{
+ public class Grid
+ {
+ public IAssetServer AssetServer;
+ public IGridServer GridServer;
+ public string AssetDll = "";
+ public string GridDll = "";
+
+ public Grid()
+ {
+ }
+
+ public virtual void Initialise()
+ {
+ //load the dlls
+ this.AssetServer = this.LoadAssetDll(this.AssetDll);
+ this.GridServer = this.LoadGridDll(this.GridDll);
+ }
+ public virtual 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;
+ }
+ }
+}
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
new file mode 100644
index 0000000000..ebf2f87aff
--- /dev/null
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
@@ -0,0 +1,169 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.RegionServer
+ JScript
+ Grid
+ IE50
+ false
+ Exe
+
+ OpenSim.RegionServer
+ OpenSim.RegionServer
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \libsecondlife.dll.dll
+
+
+ \Axiom.MathLib.dll.dll
+
+
+ \Db4objects.Db4o.dll.dll
+
+
+
+
+ OpenSim.Framework.Console
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ OpenSim.Physics.Manager
+ {58360A80-9333-4E0F-8F83-3CF937E51633}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ OpenSim.Framework
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.exe.build b/OpenSim.RegionServer/OpenSim.RegionServer.exe.build
new file mode 100644
index 0000000000..c65f751dad
--- /dev/null
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.exe.build
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.RegionServer/OpenSimApplication.cs b/OpenSim.RegionServer/OpenSimApplication.cs
new file mode 100644
index 0000000000..abfdf45812
--- /dev/null
+++ b/OpenSim.RegionServer/OpenSimApplication.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+
+namespace OpenSim
+{
+ public abstract class OpenSimApplication
+ {
+ public abstract void StartUp();
+ public abstract void Shutdown();
+ public abstract void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode);// EndPoint packetSender);
+ public abstract void RemoveClientCircuit(uint circuitcode);
+ }
+}
diff --git a/OpenSim.RegionServer/OpenSimMain.cs b/OpenSim.RegionServer/OpenSimMain.cs
new file mode 100644
index 0000000000..b2bc0b3f75
--- /dev/null
+++ b/OpenSim.RegionServer/OpenSimMain.cs
@@ -0,0 +1,320 @@
+/*
+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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+using System;
+using System.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.UserServer;
+using OpenSim.Assets;
+using OpenSim.CAPS;
+using OpenSim.Framework.Console;
+using OpenSim.Physics.Manager;
+
+namespace OpenSim
+{
+ ///
+ ///
+ ///
+ public class OpenSimMain : OpenSimApplication
+ {
+ private Dictionary clientCircuits = new Dictionary();
+ private PhysicsManager physManager;
+
+ 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;
+
+ private System.Timers.Timer timer1 = new System.Timers.Timer();
+ private string ConfigDll = "OpenSim.Config.SimConfigDb4o.dll";
+ private string _physicsEngine = "basicphysics";
+ 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");
+ OpenSim.Framework.Console.MainConsole.Instance = new SimConsole(OpenSim.Framework.Console.ConsoleBase.ConsoleType.Local, "", 0);
+
+ //OpenSimRoot.instance = new OpenSimRoot();
+ OpenSimMain sim = new OpenSimMain();
+ OpenSimRoot.Instance.Application = sim;
+
+ sim.sandbox = false;
+ sim.loginserver = false;
+ sim._physicsEngine = "basicphysics";
+
+ for (int i = 0; i < args.Length; i++)
+ {
+ if (args[i] == "-sandbox")
+ {
+ sim.sandbox = true;
+ OpenSimRoot.Instance.Sandbox = true;
+ }
+
+ if (args[i] == "-loginserver")
+ {
+ sim.loginserver = true;
+ }
+ if (args[i] == "-realphysx")
+ {
+ sim._physicsEngine = "RealPhysX";
+ OpenSim.world.Avatar.PhysicsEngineFlying = true;
+ }
+ }
+
+
+ OpenSimRoot.Instance.GridServers = new Grid();
+ if (sim.sandbox)
+ {
+ OpenSimRoot.Instance.GridServers.AssetDll = "OpenSim.GridInterfaces.Local.dll";
+ OpenSimRoot.Instance.GridServers.GridDll = "OpenSim.GridInterfaces.Local.dll";
+ OpenSimRoot.Instance.GridServers.Initialise();
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting in Sandbox mode");
+ }
+ else
+ {
+ OpenSimRoot.Instance.GridServers.AssetDll = "OpenSim.GridInterfaces.Remote.dll";
+ OpenSimRoot.Instance.GridServers.GridDll = "OpenSim.GridInterfaces.Remote.dll";
+ OpenSimRoot.Instance.GridServers.Initialise();
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting in Grid mode");
+ }
+
+ if (sim.loginserver && sim.sandbox)
+ {
+ LoginServer loginServer = new LoginServer(OpenSimRoot.Instance.GridServers.GridServer);
+ loginServer.Startup();
+ }
+
+ OpenSimRoot.Instance.StartUp();
+
+ while (true)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.MainConsolePrompt();
+ }
+ }
+
+ private OpenSimMain()
+ {
+ }
+
+ public override void StartUp()
+ {
+ OpenSimRoot.Instance.startuptime = DateTime.Now;
+
+ OpenSimRoot.Instance.AssetCache = new AssetCache(OpenSimRoot.Instance.GridServers.AssetServer);
+ OpenSimRoot.Instance.InventoryCache = new InventoryCache();
+
+ // We check our local database first, then the grid for config options
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - Loading configuration");
+ OpenSimRoot.Instance.Cfg = this.LoadConfigDll(this.ConfigDll);
+ OpenSimRoot.Instance.Cfg.InitConfig(this.sandbox);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - Contacting gridserver");
+ OpenSimRoot.Instance.Cfg.LoadFromGrid();
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + OpenSimRoot.Instance.Cfg.RegionName + " at " + OpenSimRoot.Instance.Cfg.RegionLocX.ToString() + "," + OpenSimRoot.Instance.Cfg.RegionLocY.ToString());
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Initialising world");
+ OpenSimRoot.Instance.LocalWorld = new World();
+ OpenSimRoot.Instance.LocalWorld.LandMap = OpenSimRoot.Instance.Cfg.LoadWorld();
+
+ this.physManager = new OpenSim.Physics.Manager.PhysicsManager();
+ this.physManager.LoadPlugins();
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting up messaging system");
+ OpenSimRoot.Instance.LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this._physicsEngine); //should be reading from the config file what physics engine to use
+ OpenSimRoot.Instance.LocalWorld.PhysScene.SetTerrain(OpenSimRoot.Instance.LocalWorld.LandMap);
+
+ OpenSimRoot.Instance.GridServers.AssetServer.SetServerInfo(OpenSimRoot.Instance.Cfg.AssetURL, OpenSimRoot.Instance.Cfg.AssetSendKey);
+ OpenSimRoot.Instance.GridServers.GridServer.SetServerInfo(OpenSimRoot.Instance.Cfg.GridURL, OpenSimRoot.Instance.Cfg.GridSendKey, OpenSimRoot.Instance.Cfg.GridRecvKey);
+
+ OpenSimRoot.Instance.LocalWorld.LoadStorageDLL("OpenSim.Storage.LocalStorageDb4o.dll"); //all these dll names shouldn't be hard coded.
+ OpenSimRoot.Instance.LocalWorld.LoadPrimsFromStorage();
+
+ if (this.sandbox)
+ {
+ OpenSimRoot.Instance.AssetCache.LoadDefaultTextureSet();
+ }
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting CAPS HTTP server");
+ OpenSimRoot.Instance.HttpServer = 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 (OpenSimRoot.Instance.ClientThreads.ContainsKey(epSender))
+
+ // do we already have a circuit for this endpoint
+ if(this.clientCircuits.ContainsKey(epSender))
+ {
+ OpenSimRoot.Instance.ClientThreads[this.clientCircuits[epSender]].InPacket(packet);
+ }
+ else if (packet.Type == PacketType.UseCircuitCode)
+ { // new client
+ UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet;
+ this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code);
+ SimClient newuser = new SimClient(epSender, useCircuit);
+ //OpenSimRoot.Instance.ClientThreads.Add(epSender, newuser);
+ OpenSimRoot.Instance.ClientThreads.Add(useCircuit.CircuitCode.Code, 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()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - New thread started");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + OpenSimRoot.Instance.Cfg.IPListenAddr + ":" + OpenSimRoot.Instance.Cfg.IPListenPort);
+
+ ServerIncoming = new IPEndPoint(IPAddress.Any, OpenSimRoot.Instance.Cfg.IPListenPort);
+ Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
+ Server.Bind(ServerIncoming);
+
+ OpenSim.Framework.Console.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);
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Listening...");
+
+ }
+
+ public override void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode )//EndPoint packetSender)
+ {
+ // find the endpoint for this circuit
+ EndPoint sendto = null;
+ foreach(KeyValuePair p in this.clientCircuits)
+ {
+ if (p.Value == circuitcode)
+ {
+ sendto = p.Key;
+ break;
+ }
+ }
+ if (sendto != null)
+ {
+ //we found the endpoint so send the packet to it
+ this.Server.SendTo(buffer, size, flags, sendto);
+ }
+ }
+
+ public override void RemoveClientCircuit(uint circuitcode)
+ {
+ foreach (KeyValuePair p in this.clientCircuits)
+ {
+ if (p.Value == circuitcode)
+ {
+ this.clientCircuits.Remove(p.Key);
+ break;
+ }
+ }
+ }
+
+ public override void Shutdown()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing all threads");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing listener thread");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing clients");
+ // IMPLEMENT THIS
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing console and terminating");
+ OpenSimRoot.Instance.LocalWorld.Close();
+ OpenSimRoot.Instance.GridServers.Close();
+ OpenSim.Framework.Console.MainConsole.Instance.Close();
+ Environment.Exit(0);
+ }
+
+ void Timer1Tick(object sender, System.EventArgs e)
+ {
+ OpenSimRoot.Instance.LocalWorld.Update();
+ }
+ }
+
+
+}
diff --git a/OpenSim.RegionServer/OpenSimRoot.cs b/OpenSim.RegionServer/OpenSimRoot.cs
new file mode 100644
index 0000000000..3361e5d85b
--- /dev/null
+++ b/OpenSim.RegionServer/OpenSimRoot.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+//using System.Net.Sockets;
+using libsecondlife;
+using libsecondlife.Packets;
+using OpenSim.world;
+using OpenSim.Framework.Interfaces;
+using OpenSim.UserServer;
+using OpenSim.Assets;
+using OpenSim.CAPS;
+using OpenSim.Framework.Console;
+using OpenSim.Physics.Manager;
+
+namespace OpenSim
+{
+ public sealed class OpenSimRoot
+ {
+ private static OpenSimRoot instance = new OpenSimRoot();
+
+ public static OpenSimRoot Instance
+ {
+ get
+ {
+ return instance;
+ }
+ }
+
+ private OpenSimRoot()
+ {
+
+ }
+
+ public World LocalWorld;
+ public Grid GridServers;
+ public SimConfig Cfg;
+ public SimCAPSHTTPServer HttpServer;
+ public AssetCache AssetCache;
+ public InventoryCache InventoryCache;
+ //public Dictionary ClientThreads = new Dictionary();
+ public Dictionary ClientThreads = new Dictionary();
+ public DateTime startuptime;
+ public OpenSimApplication Application;
+ public bool Sandbox = false;
+
+ public void StartUp()
+ {
+ if (this.Application != null)
+ {
+ this.Application.StartUp();
+ }
+ }
+
+ public void Shutdown()
+ {
+ if (this.Application != null)
+ {
+ this.Application.Shutdown();
+ }
+ }
+ }
+}
diff --git a/OpenSim.RegionServer/QueItem.cs b/OpenSim.RegionServer/QueItem.cs
new file mode 100644
index 0000000000..747e026327
--- /dev/null
+++ b/OpenSim.RegionServer/QueItem.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife.Packets;
+
+namespace OpenSim
+{
+ public class QueItem
+ {
+ public QueItem()
+ {
+ }
+
+ public Packet Packet;
+ public bool Incoming;
+ }
+
+}
diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/SimClient.cs
new file mode 100644
index 0000000000..210e0d9154
--- /dev/null
+++ b/OpenSim.RegionServer/SimClient.cs
@@ -0,0 +1,621 @@
+/*
+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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+using System;
+using System.Collections;
+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
+{
+ ///
+ /// Handles new client connections
+ /// Constructor takes a single Packet and authenticates everything
+ ///
+ public class SimClient
+ {
+
+ public LLUUID AgentID;
+ public LLUUID SessionID;
+ public LLUUID SecureSessionID = LLUUID.Zero;
+ public uint CircuitCode;
+ public world.Avatar ClientAvatar;
+ private UseCircuitCodePacket cirpack;
+ private Thread ClientThread;
+ public EndPoint userEP;
+ private BlockingQueue PacketQueue;
+ private Dictionary PendingAcks = new Dictionary();
+ private Dictionary NeedAck = new Dictionary();
+ //private Dictionary UploadedAssets = new Dictionary();
+ 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;
+
+ private 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; }
+ }
+ }
+ }
+
+ protected virtual 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(OpenSimRoot.Instance.LocalWorld);
+ ClientAvatar.SendInitialPosition();
+ break;
+ case PacketType.RegionHandshakeReply:
+ OpenSimRoot.Instance.LocalWorld.SendLayerData(this);
+ break;
+ case PacketType.AgentWearablesRequest:
+ ClientAvatar.SendInitialAppearance();
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ if (client.AgentID != this.AgentID)
+ {
+ ObjectUpdatePacket objupdate = client.ClientAvatar.CreateUpdatePacket();
+ this.OutPacket(objupdate);
+ client.ClientAvatar.SendAppearanceToOtherAgent(this);
+ }
+ }
+ OpenSimRoot.Instance.LocalWorld.GetInitialPrims(this);
+ break;
+ case PacketType.ObjectAdd:
+ OpenSimRoot.Instance.LocalWorld.AddNewPrim((ObjectAddPacket)Pack, this);
+ break;
+ case PacketType.ObjectLink:
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(Pack.ToString());
+ break;
+ case PacketType.ObjectScale:
+ OpenSim.Framework.Console.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 OpenSimRoot.Instance.LocalWorld.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 OpenSimRoot.Instance.LocalWorld.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 OpenSimRoot.Instance.LocalWorld.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 OpenSimRoot.Instance.LocalWorld.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++)
+ {
+ OpenSimRoot.Instance.AssetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
+ }
+ break;
+ case PacketType.TransferRequest:
+ //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
+ TransferRequestPacket transfer = (TransferRequestPacket)Pack;
+ OpenSimRoot.Instance.AssetCache.AddAssetRequest(this, transfer);
+ break;
+ case PacketType.AgentUpdate:
+ ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack);
+ break;
+ case PacketType.LogoutRequest:
+ OpenSim.Framework.Console.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 (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(kill);
+ }
+ OpenSimRoot.Instance.GridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode);
+ lock (OpenSimRoot.Instance.LocalWorld.Entities)
+ {
+ OpenSimRoot.Instance.LocalWorld.Entities.Remove(this.AgentID);
+ }
+ //need to do other cleaning up here too
+ OpenSimRoot.Instance.ClientThreads.Remove(this.CircuitCode); //this.userEP);
+ OpenSimRoot.Instance.Application.RemoveClientCircuit(this.CircuitCode);
+ 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 (SimClient client in OpenSimRoot.Instance.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 OpenSimRoot.Instance.LocalWorld.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 OpenSimRoot.Instance.LocalWorld.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 = OpenSimRoot.Instance.AssetCache.UploadPacket(request, LLUUID.Random());
+ if (newAsset != null)
+ {
+ OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this, this.newAssetFolder, newAsset);
+ }
+ Console.WriteLine(request.ToString());
+ Console.WriteLine("combined uuid is " + request.AssetBlock.TransactionID.Combine(this.SecureSessionID).ToStringHyphenated());
+
+ AssetUploadCompletePacket response = new AssetUploadCompletePacket();
+ response.AssetBlock.Type =request.AssetBlock.Type;
+ response.AssetBlock.Success = true;
+ response.AssetBlock.UUID = request.AssetBlock.TransactionID.Combine(this.SecureSessionID);
+
+ this.OutPacket(response);
+ 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;
+ OpenSimRoot.Instance.InventoryCache.FetchInventory(this, FetchInventory);
+ break;
+ case PacketType.FetchInventoryDescendents:
+ FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack;
+ OpenSimRoot.Instance.InventoryCache.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))
+ {
+ OpenSim.Framework.Console.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
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Too many ACKs queued up!");
+ return;
+ }
+
+ OpenSim.Framework.Console.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();
+ }
+
+ protected virtual 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);
+ OpenSimRoot.Instance.Application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
+ }
+ else
+ {
+ OpenSimRoot.Instance.Application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
+ }
+ }
+ catch (Exception)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread");
+ ClientThread.Abort();
+ }
+
+ }
+
+ public virtual 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 virtual void OutPacket(Packet NewPack)
+ {
+ QueItem item = new QueItem();
+ item.Packet = NewPack;
+ item.Incoming = false;
+ this.PacketQueue.Enqueue(item);
+ }
+
+ public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request");
+ cirpack = initialcirpack;
+ userEP = remoteEP;
+ PacketQueue = new BlockingQueue();
+ 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();
+ }
+
+ protected virtual void ClientLoop()
+ {
+ OpenSim.Framework.Console.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);
+ }
+ }
+ }
+
+ protected virtual void InitNewClient()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world");
+ OpenSimRoot.Instance.LocalWorld.AddViewerAgent(this);
+ world.Entity tempent = OpenSimRoot.Instance.LocalWorld.Entities[this.AgentID];
+ this.ClientAvatar = (world.Avatar)tempent;
+ }
+
+ protected virtual void AuthUser()
+ {
+ AuthenticateResponse sessionInfo = OpenSimRoot.Instance.GridServers.GridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
+ if (!sessionInfo.Authorised)
+ {
+ //session/circuit not authorised
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:AuthUser() - New user request denied to " + userEP.ToString());
+ ClientThread.Abort();
+ }
+ else
+ {
+ OpenSim.Framework.Console.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(); //shouldn't be called here as we might be a child agent and not want a full avatar
+ this.ClientAvatar.firstname = sessionInfo.LoginInfo.First;
+ this.ClientAvatar.lastname = sessionInfo.LoginInfo.Last;
+ if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero)
+ {
+ this.SecureSessionID = sessionInfo.LoginInfo.SecureSession;
+ }
+
+ // Create Inventory, currently only works for sandbox mode
+ if (OpenSimRoot.Instance.Sandbox)
+ {
+ if (sessionInfo.LoginInfo.InventoryFolder != null)
+ {
+ this.CreateInventory(sessionInfo.LoginInfo.InventoryFolder);
+ if (sessionInfo.LoginInfo.BaseFolder != null)
+ {
+ OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder);
+ this.newAssetFolder = sessionInfo.LoginInfo.BaseFolder;
+ AssetBase[] inventorySet = OpenSimRoot.Instance.AssetCache.CreateNewInventorySet(this.AgentID);
+ if (inventorySet != null)
+ {
+ for (int i = 0; i < inventorySet.Length; i++)
+ {
+ if (inventorySet[i] != null)
+ {
+ OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ClientLoop();
+ }
+ }
+
+ private void CreateInventory(LLUUID baseFolder)
+ {
+ AgentInventory inventory = new AgentInventory();
+ inventory.AgentID = this.AgentID;
+ OpenSimRoot.Instance.InventoryCache.AddNewAgentsInventory(inventory);
+ OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, baseFolder);
+ }
+ }
+}
diff --git a/src/OpenSimConsole.cs b/OpenSim.RegionServer/SimConsole.cs
similarity index 86%
rename from src/OpenSimConsole.cs
rename to OpenSim.RegionServer/SimConsole.cs
index cf8b648330..d6d5e44210 100644
--- a/src/OpenSimConsole.cs
+++ b/OpenSim.RegionServer/SimConsole.cs
@@ -33,14 +33,14 @@ using System.IO;
using System.Net;
using libsecondlife;
using libsecondlife.Packets;
-using ServerConsole;
+using OpenSim.Framework.Console;
namespace OpenSim
{
///
/// Description of ServerConsole.
///
- public class MServerConsole : ConsoleBase
+ public class SimConsole : ConsoleBase
{
private ConsoleType ConsType;
@@ -57,7 +57,7 @@ namespace OpenSim
// 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) {
+ public SimConsole(ConsoleType constype, string sparam, int iparam) {
ConsType = constype;
switch(constype) {
case ConsoleType.Local:
@@ -156,11 +156,11 @@ namespace OpenSim
break;
case "regenerate":
- OpenSim_Main.local_world.RegenerateTerrain();
+ OpenSimRoot.Instance.LocalWorld.RegenerateTerrain();
break;
case "shutdown":
- OpenSim_Main.Shutdown();
+ OpenSimRoot.Instance.Shutdown();
break;
}
return null;
@@ -170,16 +170,16 @@ namespace OpenSim
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());
+ this.WriteLine("OpenSim has been running since " + OpenSimRoot.Instance.startuptime.ToString());
+ this.WriteLine("That is " + (DateTime.Now-OpenSimRoot.Instance.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")
+ foreach (libsecondlife.LLUUID UUID in OpenSimRoot.Instance.LocalWorld.Entities.Keys) {
+ if(OpenSimRoot.Instance.LocalWorld.Entities[UUID].ToString()== "OpenSim.world.Avatar")
{
- TempAv=(OpenSim.world.Avatar)OpenSim_Main.local_world.Entities[UUID];
+ TempAv=(OpenSim.world.Avatar)OpenSimRoot.Instance.LocalWorld.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()));
}
}
@@ -190,7 +190,7 @@ namespace OpenSim
// 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() + " # ");
+ string tempstr = this.CmdPrompt("OpenSim-" + OpenSimRoot.Instance.Cfg.RegionHandle.ToString() + " # ");
tempstrarray = tempstr.Split(' ');
string cmd=tempstrarray[0];
Array.Reverse(tempstrarray);
diff --git a/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs b/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs
new file mode 100644
index 0000000000..83e340b473
--- /dev/null
+++ b/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs
@@ -0,0 +1,76 @@
+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.UserServer
+{
+ class LocalUserProfileManager : UserProfileManager
+ {
+ private IGridServer _gridServer;
+
+ public LocalUserProfileManager(IGridServer gridServer)
+ {
+ _gridServer = gridServer;
+ }
+
+ public override void InitUserProfiles()
+ {
+ // TODO: need to load from database
+ }
+
+ 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"] = OpenSimRoot.Instance.Cfg.IPListenPort;
+ response["sim_ip"] = OpenSimRoot.Instance.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 (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Local")
+ {
+ ((LocalGridBase)this._gridServer).AddNewSession(_login);
+ }
+ }
+ }
+}
diff --git a/OpenSim.RegionServer/UserServer/LoginServer.cs b/OpenSim.RegionServer/UserServer/LoginServer.cs
new file mode 100644
index 0000000000..86b098a9ca
--- /dev/null
+++ b/OpenSim.RegionServer/UserServer/LoginServer.cs
@@ -0,0 +1,414 @@
+/*
+* 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 nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using 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;
+using OpenSim.Framework.Utilities;
+
+namespace OpenSim.UserServer
+{
+
+ ///
+ /// When running in local (default) mode , handles client logins.
+ ///
+ public class LoginServer : LoginService , IUserServer
+ {
+ private IGridServer _gridServer;
+ private ushort _loginPort = 8080;
+ public IPAddress clientAddress = IPAddress.Loopback;
+ public IPAddress remoteAddress = IPAddress.Any;
+ private Socket loginServer;
+ private int NumClients;
+ private string _defaultResponse;
+ private bool userAccounts = false;
+ private string _mpasswd;
+ private bool _needPasswd = false;
+ private LocalUserProfileManager userManager;
+
+ public LoginServer(IGridServer gridServer)
+ {
+ _gridServer = gridServer;
+ }
+
+ // 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);
+ userManager.InitUserProfiles();
+ userManager.SetKeys("", "", "", "Welcome to OpenSim");
+
+ 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)
+ {
+ //ask the UserProfile Manager to process the request
+ 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
+ {
+ //handle ourselves
+ XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(new String(content));
+ if (request.MethodName == "login_to_simulator")
+ {
+ this.ProcessXmlRequest(request, writer);
+ }
+ else
+ {
+ XmlRpcResponse PresenceErrorResp = new XmlRpcResponse();
+ Hashtable PresenceErrorRespData = new Hashtable();
+ PresenceErrorRespData["reason"] = "XmlRequest"; ;
+ PresenceErrorRespData["message"] = "Unknown Rpc request";
+ PresenceErrorRespData["login"] = "false";
+ PresenceErrorResp.Value = PresenceErrorRespData;
+ string reply = Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", "");
+ writer.WriteLine("HTTP/1.0 200 OK");
+ writer.WriteLine("Content-type: text/xml");
+ writer.WriteLine();
+ writer.WriteLine(reply);
+ }
+ }
+ }
+ }
+
+ public bool ProcessXmlRequest(XmlRpcRequest request, StreamWriter writer)
+ {
+ 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))
+ {
+ XmlRpcResponse PresenceErrorResp = new XmlRpcResponse();
+ Hashtable PresenceErrorRespData = new Hashtable();
+ PresenceErrorRespData["reason"] = "key"; ;
+ PresenceErrorRespData["message"] = "You have entered an invalid name/password combination. Check Caps/lock.";
+ PresenceErrorRespData["login"] = "false";
+ PresenceErrorResp.Value = PresenceErrorRespData;
+ string reply = Regex.Replace(XmlRpcResponseSerializer.Singleton.Serialize(PresenceErrorResp), " encoding=\"utf-16\"", "");
+ writer.WriteLine("HTTP/1.0 200 OK");
+ writer.WriteLine("Content-type: text/xml");
+ writer.WriteLine();
+ writer.WriteLine(reply);
+ return false;
+ }
+
+ NumClients++;
+
+ //create a agent and session LLUUID
+ Agent = GetAgentId(first, last);
+ int SessionRand = Util.RandomClass.Next(1, 999);
+ Session = new LLUUID("aaaabbbb-0200-" + SessionRand.ToString("0000") + "-8664-58f53e442797");
+ LLUUID secureSess = LLUUID.Random();
+ //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"] = OpenSimRoot.Instance.Cfg.IPListenPort;
+ responseData["sim_ip"] = OpenSimRoot.Instance.Cfg.IPListenAddr;
+ responseData["agent_id"] = Agent.ToStringHyphenated();
+ responseData["session_id"] = Session.ToStringHyphenated();
+ responseData["secure_session_id"]= secureSess.ToStringHyphenated();
+ responseData["circuit_code"] = (Int32)(Util.RandomClass.Next());
+ 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"] = 0;
+ 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);
+
+ Login _login = new Login();
+ //copy data to login object
+ _login.First = first;
+ _login.Last = last;
+ _login.Agent = Agent;
+ _login.Session = Session;
+ _login.SecureSession = secureSess;
+ _login.BaseFolder = BaseFolderID;
+ _login.InventoryFolder = InventoryFolderID;
+
+ //working on local computer if so lets add to the gridserver's list of sessions?
+ if (OpenSimRoot.Instance.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();
+
+ return true;
+ }
+
+ protected virtual void CustomiseLoginResponse(Hashtable responseData, string first, string last)
+ {
+ }
+
+ protected virtual LLUUID GetAgentId(string firstName, string lastName)
+ {
+ LLUUID Agent;
+ int AgentRand = Util.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();
+ }
+
+ //IUserServer implementation
+ public AgentInventory RequestAgentsInventory(LLUUID agentID)
+ {
+ AgentInventory aInventory = null;
+ if (this.userAccounts)
+ {
+ aInventory = this.userManager.GetUsersInventory(agentID);
+ }
+
+ return aInventory;
+ }
+
+ public void SetServerInfo(string ServerUrl, string SendKey, string RecvKey)
+ {
+
+ }
+
+ }
+
+
+}
diff --git a/src/VersionInfo.cs b/OpenSim.RegionServer/VersionInfo.cs
similarity index 88%
rename from src/VersionInfo.cs
rename to OpenSim.RegionServer/VersionInfo.cs
index 5cfd13635a..39767df665 100644
--- a/src/VersionInfo.cs
+++ b/OpenSim.RegionServer/VersionInfo.cs
@@ -28,10 +28,10 @@ using System;
namespace OpenSim
{
- ///
- ///
- public class VersionInfo
- {
- public static string Version = "0.1, Build 1174381410, Revision 240M";
- }
+ ///
+ ///
+ public class VersionInfo
+ {
+ public static string Version = "0.1, Build 1173843165, Revision 193:206M";
+ }
}
diff --git a/src/types/Mesh.cs b/OpenSim.RegionServer/types/Mesh.cs
similarity index 100%
rename from src/types/Mesh.cs
rename to OpenSim.RegionServer/types/Mesh.cs
diff --git a/src/types/Triangle.cs b/OpenSim.RegionServer/types/Triangle.cs
similarity index 100%
rename from src/types/Triangle.cs
rename to OpenSim.RegionServer/types/Triangle.cs
diff --git a/OpenSim.RegionServer/world/Avatar.cs b/OpenSim.RegionServer/world/Avatar.cs
new file mode 100644
index 0000000000..b4a3b82d85
--- /dev/null
+++ b/OpenSim.RegionServer/world/Avatar.cs
@@ -0,0 +1,501 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using libsecondlife;
+using libsecondlife.Packets;
+using OpenSim.Physics.Manager;
+using Axiom.MathLib;
+
+namespace OpenSim.world
+{
+ public class Avatar : Entity
+ {
+ public static bool PhysicsEngineFlying = false;
+ public string firstname;
+ public string lastname;
+ public SimClient ControllingClient;
+ private PhysicsActor _physActor;
+ private static libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate;
+ private bool updateflag = false;
+ private byte movementflag = 0;
+ private List forcesList = new List();
+ private short _updateCount = 0;
+ private Axiom.MathLib.Quaternion bodyRot;
+
+ public Avatar(SimClient TheClient)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)");
+ ControllingClient = TheClient;
+ localid = 8880000 + (OpenSimRoot.Instance.LocalWorld._localNumber++);
+ position = new LLVector3(100.0f, 100.0f, 30.0f);
+ position.Z = OpenSimRoot.Instance.LocalWorld.LandMap[(int)position.Y * 256 + (int)position.X] + 1;
+ }
+
+ public PhysicsActor PhysActor
+ {
+ set
+ {
+ this._physActor = value;
+ }
+ }
+
+ public override void addForces()
+ {
+ lock (this.forcesList)
+ {
+ if (this.forcesList.Count > 0)
+ {
+ for (int i = 0; i < this.forcesList.Count; i++)
+ {
+ NewForce force = this.forcesList[i];
+ PhysicsVector phyVector = new PhysicsVector(force.X, force.Y, force.Z);
+ this._physActor.Velocity = phyVector;
+ this.updateflag = true;
+ this.velocity = new LLVector3(force.X, force.Y, force.Z); //shouldn't really be doing this
+ // but as we are setting the velocity (rather than using real forces) at the moment it is okay.
+ }
+ for (int i = 0; i < this.forcesList.Count; i++)
+ {
+ this.forcesList.RemoveAt(0);
+ }
+ }
+ }
+ }
+
+ public override void update()
+ {
+
+ if (this.updateflag)
+ {
+ //need to send movement info
+ //so create the improvedterseobjectupdate packet
+ //use CreateTerseBlock()
+ ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
+ ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+ terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+ terse.RegionData.TimeDilation = 64096;
+ terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+ terse.ObjectData[0] = terseBlock;
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(terse);
+ }
+
+ updateflag = false;
+ //this._updateCount = 0;
+ }
+ else
+ {
+ //if((movementflag & 1) !=0)
+ //{
+ _updateCount++;
+ if (((!PhysicsEngineFlying) && (_updateCount > 3)) || (_updateCount > 0))
+ {
+ //It has been a while since last update was sent so lets send one.
+ ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
+ ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+ terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+ terse.RegionData.TimeDilation = 64096;
+ terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+ terse.ObjectData[0] = terseBlock;
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(terse);
+ }
+ _updateCount = 0;
+ }
+ //}
+ }
+ }
+
+ public static void SetupTemplate(string name)
+ {
+ int i = 0;
+ FileInfo fInfo = new FileInfo(name);
+ long numBytes = fInfo.Length;
+ FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read);
+ BinaryReader br = new BinaryReader(fStream);
+ byte[] data1 = br.ReadBytes((int)numBytes);
+ br.Close();
+ fStream.Close();
+
+ libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i);
+
+ System.Text.Encoding enc = System.Text.Encoding.ASCII;
+ libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16);
+ pos.X = 100f;
+ objdata.ID = 8880000;
+ objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0");
+ libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f);
+ //objdata.FullID=user.AgentID;
+ byte[] pb = pos.GetBytes();
+ Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length);
+
+ Avatar.AvatarTemplate = objdata;
+ }
+
+ public void CompleteMovement(World RegionInfo)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs:CompleteMovement() - Constructing AgentMovementComplete packet");
+ AgentMovementCompletePacket mov = new AgentMovementCompletePacket();
+ mov.AgentData.SessionID = this.ControllingClient.SessionID;
+ mov.AgentData.AgentID = this.ControllingClient.AgentID;
+ mov.Data.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+ // TODO - dynamicalise this stuff
+ mov.Data.Timestamp = 1172750370;
+ mov.Data.Position = new LLVector3(100f, 100f, 23f);
+ mov.Data.LookAt = new LLVector3(0.99f, 0.042f, 0);
+
+ ControllingClient.OutPacket(mov);
+ }
+
+ public void SendInitialPosition()
+ {
+
+ System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+ //send a objectupdate packet with information about the clients avatar
+ ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+ objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+ objupdate.RegionData.TimeDilation = 64096;
+ objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+
+ objupdate.ObjectData[0] = AvatarTemplate;
+ //give this avatar object a local id and assign the user a name
+ objupdate.ObjectData[0].ID = this.localid;
+ this.uuid = objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
+ objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
+
+ libsecondlife.LLVector3 pos2 = new LLVector3((float)this.position.X, (float)this.position.Y, (float)this.position.Z);
+
+ byte[] pb = pos2.GetBytes();
+
+ Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
+ OpenSimRoot.Instance.LocalWorld._localNumber++;
+
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(objupdate);
+ if (client.AgentID != ControllingClient.AgentID)
+ {
+ SendAppearanceToOtherAgent(client);
+ }
+ }
+ //this.ControllingClient.OutPacket(objupdate);
+ }
+
+ public void SendInitialAppearance()
+ {
+ AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
+ aw.AgentData.AgentID = this.ControllingClient.AgentID;
+ aw.AgentData.SerialNum = 0;
+ aw.AgentData.SessionID = ControllingClient.SessionID;
+
+ aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
+ AgentWearablesUpdatePacket.WearableDataBlock awb = new AgentWearablesUpdatePacket.WearableDataBlock();
+ awb.WearableType = (byte)0;
+ awb.AssetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
+ awb.ItemID = LLUUID.Random();
+ aw.WearableData[0] = awb;
+
+ for (int i = 1; i < 13; i++)
+ {
+ awb = new AgentWearablesUpdatePacket.WearableDataBlock();
+ awb.WearableType = (byte)i;
+ awb.AssetID = new LLUUID("00000000-0000-0000-0000-000000000000");
+ awb.ItemID = new LLUUID("00000000-0000-0000-0000-000000000000");
+ aw.WearableData[i] = awb;
+ }
+
+ ControllingClient.OutPacket(aw);
+ }
+
+ public ObjectUpdatePacket CreateUpdatePacket()
+ {
+ System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+ //send a objectupdate packet with information about the clients avatar
+ ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+ objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+ objupdate.RegionData.TimeDilation = 64096;
+ objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+
+ objupdate.ObjectData[0] = AvatarTemplate;
+ //give this avatar object a local id and assign the user a name
+ objupdate.ObjectData[0].ID = this.localid;
+ objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
+ objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
+
+ libsecondlife.LLVector3 pos2 = new LLVector3((float)this._physActor.Position.X, (float)this._physActor.Position.Y, (float)this._physActor.Position.Z);
+
+ byte[] pb = pos2.GetBytes();
+
+ Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
+ return objupdate;
+ }
+
+ public void SendAppearanceToOtherAgent(SimClient userInfo)
+ {
+ AvatarAppearancePacket avp = new AvatarAppearancePacket();
+
+
+ avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
+ //avp.ObjectData.TextureEntry=this.avatar_template.TextureEntry;// br.ReadBytes((int)numBytes);
+
+ LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-0000-000000000005"));
+ avp.ObjectData.TextureEntry = ntex.ToBytes();
+
+ AvatarAppearancePacket.VisualParamBlock avblock = null;
+ for (int i = 0; i < 218; i++)
+ {
+ avblock = new AvatarAppearancePacket.VisualParamBlock();
+ avblock.ParamValue = (byte)100;
+ avp.VisualParam[i] = avblock;
+ }
+
+ avp.Sender.IsTrial = false;
+ avp.Sender.ID = ControllingClient.AgentID;
+ userInfo.OutPacket(avp);
+
+ }
+
+ public void HandleUpdate(AgentUpdatePacket pack)
+ {
+ if (((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_FLY) != 0)
+ {
+ this._physActor.Flying = true;
+ }
+ else
+ {
+ this._physActor.Flying = false;
+ }
+ if (((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_POS) != 0)
+ {
+ Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z);
+ if (((movementflag & 1) == 0) || (q != this.bodyRot))
+ {
+ //we should add a new force to the list
+ // but for now we will deal with velocities
+ NewForce newVelocity = new NewForce();
+ Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0);
+ Axiom.MathLib.Vector3 direc = q * v3;
+ direc.Normalize();
+
+ //work out velocity for sim physics system
+ direc = direc * ((0.03f) * 128f);
+ if (this._physActor.Flying)
+ direc *= 2;
+
+ newVelocity.X = direc.x;
+ newVelocity.Y = direc.y;
+ newVelocity.Z = direc.z;
+ this.forcesList.Add(newVelocity);
+ movementflag = 1;
+ this.bodyRot = q;
+ }
+ }
+ else if ((((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_UP_POS) != 0) && (PhysicsEngineFlying))
+ {
+ if (((movementflag & 2) == 0) && this._physActor.Flying)
+ {
+ //we should add a new force to the list
+ // but for now we will deal with velocities
+ NewForce newVelocity = new NewForce();
+ Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(0, 0, 1);
+ Axiom.MathLib.Vector3 direc = v3;
+ direc.Normalize();
+
+ //work out velocity for sim physics system
+ direc = direc * ((0.03f) * 128f * 2);
+ newVelocity.X = direc.x;
+ newVelocity.Y = direc.y;
+ newVelocity.Z = direc.z;
+ this.forcesList.Add(newVelocity);
+ movementflag = 2;
+ }
+ }
+ else if ((((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_UP_NEG) != 0) && (PhysicsEngineFlying))
+ {
+ if (((movementflag & 4) == 0) && this._physActor.Flying)
+ {
+ //we should add a new force to the list
+ // but for now we will deal with velocities
+ NewForce newVelocity = new NewForce();
+ Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(0, 0, -1);
+ //Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z);
+ Axiom.MathLib.Vector3 direc = v3;
+ direc.Normalize();
+
+ //work out velocity for sim physics system
+ direc = direc * ((0.03f) * 128f * 2);
+ newVelocity.X = direc.x;
+ newVelocity.Y = direc.y;
+ newVelocity.Z = direc.z;
+ this.forcesList.Add(newVelocity);
+ movementflag = 4;
+ }
+ }
+ else if (((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_NEG) != 0)
+ {
+ Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z);
+ if (((movementflag & 8) == 0) || (q != this.bodyRot))
+ {
+ //we should add a new force to the list
+ // but for now we will deal with velocities
+ NewForce newVelocity = new NewForce();
+ Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(-1, 0, 0);
+ Axiom.MathLib.Vector3 direc = q * v3;
+ direc.Normalize();
+
+ //work out velocity for sim physics system
+ direc = direc * ((0.03f) * 128f);
+ if (this._physActor.Flying)
+ direc *= 2;
+
+ newVelocity.X = direc.x;
+ newVelocity.Y = direc.y;
+ newVelocity.Z = direc.z;
+ this.forcesList.Add(newVelocity);
+ movementflag = 8;
+ this.bodyRot = q;
+ }
+ }
+ else
+ {
+ if ((movementflag) != 0)
+ {
+ NewForce newVelocity = new NewForce();
+ newVelocity.X = 0;
+ newVelocity.Y = 0;
+ newVelocity.Z = 0;
+ this.forcesList.Add(newVelocity);
+ movementflag = 0;
+ }
+ }
+ }
+
+ //should be moved somewhere else
+ public void SendRegionHandshake(World RegionInfo)
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Creating empty RegionHandshake packet");
+ System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+ RegionHandshakePacket handshake = new RegionHandshakePacket();
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionhandshake() - Filling in RegionHandshake details");
+ handshake.RegionInfo.BillableFactor = 0;
+ handshake.RegionInfo.IsEstateManager = false;
+ handshake.RegionInfo.TerrainHeightRange00 = 60;
+ handshake.RegionInfo.TerrainHeightRange01 = 60;
+ handshake.RegionInfo.TerrainHeightRange10 = 60;
+ handshake.RegionInfo.TerrainHeightRange11 = 60;
+ handshake.RegionInfo.TerrainStartHeight00 = 10;
+ handshake.RegionInfo.TerrainStartHeight01 = 10;
+ handshake.RegionInfo.TerrainStartHeight10 = 10;
+ handshake.RegionInfo.TerrainStartHeight11 = 10;
+ handshake.RegionInfo.SimAccess = 13;
+ handshake.RegionInfo.WaterHeight = 20;
+ handshake.RegionInfo.RegionFlags = 72458694;
+ handshake.RegionInfo.SimName = _enc.GetBytes(OpenSimRoot.Instance.Cfg.RegionName + "\0");
+ handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000");
+ handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975");
+ handshake.RegionInfo.TerrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3");
+ handshake.RegionInfo.TerrainBase2 = new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f");
+ handshake.RegionInfo.TerrainBase3 = new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2");
+ handshake.RegionInfo.TerrainDetail0 = new LLUUID("00000000-0000-0000-0000-000000000000");
+ handshake.RegionInfo.TerrainDetail1 = new LLUUID("00000000-0000-0000-0000-000000000000");
+ handshake.RegionInfo.TerrainDetail2 = new LLUUID("00000000-0000-0000-0000-000000000000");
+ handshake.RegionInfo.TerrainDetail3 = new LLUUID("00000000-0000-0000-0000-000000000000");
+ handshake.RegionInfo.CacheID = new LLUUID("545ec0a5-5751-1026-8a0b-216e38a7ab37");
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Sending RegionHandshake packet");
+ this.ControllingClient.OutPacket(handshake);
+ }
+
+ public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateTerseBlock()
+ {
+ byte[] bytes = new byte[60];
+ int i = 0;
+ ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
+
+ dat.TextureEntry = AvatarTemplate.TextureEntry;
+ libsecondlife.LLVector3 pos2 = new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z);
+
+ uint ID = this.localid;
+
+ bytes[i++] = (byte)(ID % 256);
+ bytes[i++] = (byte)((ID >> 8) % 256);
+ bytes[i++] = (byte)((ID >> 16) % 256);
+ bytes[i++] = (byte)((ID >> 24) % 256);
+ bytes[i++] = 0;
+ bytes[i++] = 1;
+ i += 14;
+ bytes[i++] = 128;
+ bytes[i++] = 63;
+
+ byte[] pb = pos2.GetBytes();
+ Array.Copy(pb, 0, bytes, i, pb.Length);
+ i += 12;
+ ushort InternVelocityX;
+ ushort InternVelocityY;
+ ushort InternVelocityZ;
+
+ Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(this._physActor.Velocity.X, this._physActor.Velocity.Y, this._physActor.Velocity.Z);
+ internDirec = internDirec / 128.0f;
+ internDirec.x += 1;
+ internDirec.y += 1;
+ internDirec.z += 1;
+
+ InternVelocityX = (ushort)(32768 * internDirec.x);
+ InternVelocityY = (ushort)(32768 * internDirec.y);
+ InternVelocityZ = (ushort)(32768 * internDirec.z);
+
+ ushort ac = 32767;
+ bytes[i++] = (byte)(InternVelocityX % 256);
+ bytes[i++] = (byte)((InternVelocityX >> 8) % 256);
+ bytes[i++] = (byte)(InternVelocityY % 256);
+ bytes[i++] = (byte)((InternVelocityY >> 8) % 256);
+ bytes[i++] = (byte)(InternVelocityZ % 256);
+ bytes[i++] = (byte)((InternVelocityZ >> 8) % 256);
+
+ //accel
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+
+ //rot
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+
+ //rotation vel
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+
+ dat.Data = bytes;
+ return (dat);
+ }
+ }
+
+ public class NewForce
+ {
+ public float X;
+ public float Y;
+ public float Z;
+
+ public NewForce()
+ {
+
+ }
+ }
+}
diff --git a/src/world/Entity.cs b/OpenSim.RegionServer/world/Entity.cs
similarity index 90%
rename from src/world/Entity.cs
rename to OpenSim.RegionServer/world/Entity.cs
index ee4b2e4826..780f3a0449 100644
--- a/src/world/Entity.cs
+++ b/OpenSim.RegionServer/world/Entity.cs
@@ -20,7 +20,7 @@ namespace OpenSim.world
public Entity()
{
uuid = new libsecondlife.LLUUID();
- localid = 8880000 + (OpenSim_Main.local_world._localNumber++); // FIXME - race condition!
+ localid = 0;
position = new LLVector3();
velocity = new LLVector3();
rotation = new Quaternion();
diff --git a/OpenSim.RegionServer/world/Primitive.cs b/OpenSim.RegionServer/world/Primitive.cs
new file mode 100644
index 0000000000..b190d818df
--- /dev/null
+++ b/OpenSim.RegionServer/world/Primitive.cs
@@ -0,0 +1,485 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OpenSim.types;
+using libsecondlife;
+using libsecondlife.Packets;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Physics.Manager;
+using OpenSim.Framework.Assets;
+
+namespace OpenSim.world
+{
+ public class Primitive : Entity
+ {
+ protected float mesh_cutbegin;
+ protected float mesh_cutend;
+ protected PrimData primData;
+ protected bool newPrimFlag = false;
+ protected bool updateFlag = false;
+ protected bool dirtyFlag = false;
+ private ObjectUpdatePacket OurPacket;
+ private PhysicsActor _physActor;
+ private bool physicsEnabled = false;
+ private bool physicstest = false; //just added for testing
+
+ public bool PhysicsEnabled
+ {
+ get
+ {
+ return physicsEnabled;
+ }
+ set
+ {
+ physicsEnabled = value;
+ }
+ }
+ public bool UpdateFlag
+ {
+ get
+ {
+ return updateFlag;
+ }
+ set
+ {
+ updateFlag = value;
+ }
+ }
+ public LLVector3 Scale
+ {
+ set
+ {
+ this.primData.Scale = value;
+ this.dirtyFlag = true;
+ }
+ get
+ {
+ return this.primData.Scale;
+ }
+ }
+ public PhysicsActor PhysActor
+ {
+ set
+ {
+ this._physActor = value;
+ }
+ }
+
+ public Primitive()
+ {
+ mesh_cutbegin = 0.0f;
+ mesh_cutend = 1.0f;
+ }
+
+ public override Mesh getMesh()
+ {
+ Mesh mesh = new Mesh();
+ Triangle tri = new Triangle(
+ new Axiom.MathLib.Vector3(0.0f, 1.0f, 1.0f),
+ new Axiom.MathLib.Vector3(1.0f, 0.0f, 1.0f),
+ new Axiom.MathLib.Vector3(1.0f, 1.0f, 0.0f));
+
+ mesh.AddTri(tri);
+ mesh += base.getMesh();
+
+ return mesh;
+ }
+
+ public void UpdatePosition(LLVector3 pos)
+ {
+ this.position = pos;
+ if (this._physActor != null) // && this.physicsEnabled)
+ {
+ this._physActor.Position = new PhysicsVector(pos.X, pos.Y, pos.Z);
+ }
+ this.updateFlag = true;
+ }
+
+ public override void update()
+ {
+ if (this.newPrimFlag)
+ {
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(OurPacket);
+ }
+ this.newPrimFlag = false;
+ }
+ else if (this.updateFlag)
+ {
+ ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+ terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+ terse.RegionData.TimeDilation = 64096;
+ terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+ terse.ObjectData[0] = this.CreateImprovedBlock();
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(terse);
+ }
+ this.updateFlag = false;
+ }
+ else if (this.dirtyFlag)
+ {
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ UpdateClient(client);
+ }
+ this.dirtyFlag = false;
+ }
+ else
+ {
+ if (this._physActor != null && this.physicsEnabled)
+ {
+ ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+ terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME
+ terse.RegionData.TimeDilation = 64096;
+ terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+ terse.ObjectData[0] = this.CreateImprovedBlock();
+ foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
+ {
+ client.OutPacket(terse);
+ }
+ }
+ }
+
+ if (this.physicstest)
+ {
+ LLVector3 pos = this.position;
+ pos.Z += 0.0001f;
+ this.UpdatePosition(pos);
+ this.physicstest = false;
+ }
+ }
+
+ public void UpdateClient(SimClient RemoteClient)
+ {
+
+ LLVector3 lPos;
+ if (this._physActor != null && this.physicsEnabled)
+ {
+ PhysicsVector pPos = this._physActor.Position;
+ lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
+ }
+ else
+ {
+ lPos = this.position;
+ }
+ byte[] pb = lPos.GetBytes();
+ Array.Copy(pb, 0, OurPacket.ObjectData[0].ObjectData, 0, pb.Length);
+
+ // OurPacket should be update with the follwing in updateShape() rather than having to do it here
+ OurPacket.ObjectData[0].OwnerID = this.primData.OwnerID;
+ OurPacket.ObjectData[0].PCode = this.primData.PCode;
+ OurPacket.ObjectData[0].PathBegin = this.primData.PathBegin;
+ OurPacket.ObjectData[0].PathEnd = this.primData.PathEnd;
+ OurPacket.ObjectData[0].PathScaleX = this.primData.PathScaleX;
+ OurPacket.ObjectData[0].PathScaleY = this.primData.PathScaleY;
+ OurPacket.ObjectData[0].PathShearX = this.primData.PathShearX;
+ OurPacket.ObjectData[0].PathShearY = this.primData.PathShearY;
+ OurPacket.ObjectData[0].PathSkew = this.primData.PathSkew;
+ OurPacket.ObjectData[0].ProfileBegin = this.primData.ProfileBegin;
+ OurPacket.ObjectData[0].ProfileEnd = this.primData.ProfileEnd;
+ OurPacket.ObjectData[0].Scale = this.primData.Scale;
+ OurPacket.ObjectData[0].PathCurve = this.primData.PathCurve;
+ OurPacket.ObjectData[0].ProfileCurve = this.primData.ProfileCurve;
+ OurPacket.ObjectData[0].ParentID = 0;
+ OurPacket.ObjectData[0].ProfileHollow = this.primData.ProfileHollow;
+ //finish off copying rest of shape data
+ OurPacket.ObjectData[0].PathRadiusOffset = this.primData.PathRadiusOffset;
+ OurPacket.ObjectData[0].PathRevolutions = this.primData.PathRevolutions;
+ OurPacket.ObjectData[0].PathTaperX = this.primData.PathTaperX;
+ OurPacket.ObjectData[0].PathTaperY = this.primData.PathTaperY;
+ OurPacket.ObjectData[0].PathTwist = this.primData.PathTwist;
+ OurPacket.ObjectData[0].PathTwistBegin = this.primData.PathTwistBegin;
+
+ RemoteClient.OutPacket(OurPacket);
+ }
+
+ public void UpdateShape(ObjectShapePacket.ObjectDataBlock addPacket)
+ {
+ this.primData.PathBegin = addPacket.PathBegin;
+ this.primData.PathEnd = addPacket.PathEnd;
+ this.primData.PathScaleX = addPacket.PathScaleX;
+ this.primData.PathScaleY = addPacket.PathScaleY;
+ this.primData.PathShearX = addPacket.PathShearX;
+ this.primData.PathShearY = addPacket.PathShearY;
+ this.primData.PathSkew = addPacket.PathSkew;
+ this.primData.ProfileBegin = addPacket.ProfileBegin;
+ this.primData.ProfileEnd = addPacket.ProfileEnd;
+ this.primData.PathCurve = addPacket.PathCurve;
+ this.primData.ProfileCurve = addPacket.ProfileCurve;
+ this.primData.ProfileHollow = addPacket.ProfileHollow;
+ this.primData.PathRadiusOffset = addPacket.PathRadiusOffset;
+ this.primData.PathRevolutions = addPacket.PathRevolutions;
+ this.primData.PathTaperX = addPacket.PathTaperX;
+ this.primData.PathTaperY = addPacket.PathTaperY;
+ this.primData.PathTwist = addPacket.PathTwist;
+ this.primData.PathTwistBegin = addPacket.PathTwistBegin;
+ this.dirtyFlag = true;
+ }
+
+ public void UpdateTexture(byte[] tex)
+ {
+ this.primData.Texture = this.OurPacket.ObjectData[0].TextureEntry = tex;
+ this.dirtyFlag = true;
+ }
+
+ public void UpdateObjectFlags(ObjectFlagUpdatePacket pack)
+ {
+ if (this._physActor != null)
+ {
+ if (this._physActor.Kinematic == pack.AgentData.UsePhysics)
+ {
+ this._physActor.Kinematic = !pack.AgentData.UsePhysics; //if Usephysics = true, then Kinematic should = false
+ }
+ this.physicsEnabled = pack.AgentData.UsePhysics;
+ if (this._physActor.Kinematic == false)
+ {
+ LLVector3 pos = this.position;
+ this.UpdatePosition(pos);
+ pos.Z += 0.000001f;
+ this.UpdatePosition(pos);
+ this.physicstest = true;
+ }
+ else
+ {
+ PhysicsVector vec = this._physActor.Position;
+ LLVector3 pos = new LLVector3(vec.X, vec.Y, vec.Z);
+ this.position = pos;
+ this.updateFlag = true;
+ }
+ }
+ }
+
+ public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
+ {
+ ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+ objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+ objupdate.RegionData.TimeDilation = 64096;
+
+ objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+ PrimData PData = new PrimData();
+ this.primData = PData;
+ objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
+ objupdate.ObjectData[0].PSBlock = new byte[0];
+ objupdate.ObjectData[0].ExtraParams = new byte[1];
+ objupdate.ObjectData[0].MediaURL = new byte[0];
+ objupdate.ObjectData[0].NameValue = new byte[0];
+ objupdate.ObjectData[0].Text = new byte[0];
+ objupdate.ObjectData[0].TextColor = new byte[4];
+ objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0);
+ objupdate.ObjectData[0].JointPivot = new LLVector3(0, 0, 0);
+ objupdate.ObjectData[0].Material = 3;
+ objupdate.ObjectData[0].UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456;
+ objupdate.ObjectData[0].TextureAnim = new byte[0];
+ objupdate.ObjectData[0].Sound = LLUUID.Zero;
+ LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
+ objupdate.ObjectData[0].TextureEntry = ntex.ToBytes();
+ objupdate.ObjectData[0].State = 0;
+ objupdate.ObjectData[0].Data = new byte[0];
+ PData.OwnerID = objupdate.ObjectData[0].OwnerID = agentID;
+ PData.PCode = objupdate.ObjectData[0].PCode = addPacket.ObjectData.PCode;
+ PData.PathBegin = objupdate.ObjectData[0].PathBegin = addPacket.ObjectData.PathBegin;
+ PData.PathEnd = objupdate.ObjectData[0].PathEnd = addPacket.ObjectData.PathEnd;
+ PData.PathScaleX = objupdate.ObjectData[0].PathScaleX = addPacket.ObjectData.PathScaleX;
+ PData.PathScaleY = objupdate.ObjectData[0].PathScaleY = addPacket.ObjectData.PathScaleY;
+ PData.PathShearX = objupdate.ObjectData[0].PathShearX = addPacket.ObjectData.PathShearX;
+ PData.PathShearY = objupdate.ObjectData[0].PathShearY = addPacket.ObjectData.PathShearY;
+ PData.PathSkew = objupdate.ObjectData[0].PathSkew = addPacket.ObjectData.PathSkew;
+ PData.ProfileBegin = objupdate.ObjectData[0].ProfileBegin = addPacket.ObjectData.ProfileBegin;
+ PData.ProfileEnd = objupdate.ObjectData[0].ProfileEnd = addPacket.ObjectData.ProfileEnd;
+ PData.Scale = objupdate.ObjectData[0].Scale = addPacket.ObjectData.Scale;
+ PData.PathCurve = objupdate.ObjectData[0].PathCurve = addPacket.ObjectData.PathCurve;
+ PData.ProfileCurve = objupdate.ObjectData[0].ProfileCurve = addPacket.ObjectData.ProfileCurve;
+ PData.ParentID = objupdate.ObjectData[0].ParentID = 0;
+ PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow;
+
+ PData.PathRadiusOffset = objupdate.ObjectData[0].PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
+ PData.PathRevolutions = objupdate.ObjectData[0].PathRevolutions = addPacket.ObjectData.PathRevolutions;
+ PData.PathTaperX = objupdate.ObjectData[0].PathTaperX = addPacket.ObjectData.PathTaperX;
+ PData.PathTaperY = objupdate.ObjectData[0].PathTaperY = addPacket.ObjectData.PathTaperY;
+ PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist;
+ PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
+
+ objupdate.ObjectData[0].ID = (uint)(localID);
+ objupdate.ObjectData[0].FullID = new LLUUID("edba7151-5857-acc5-b30b-f01efef" + (localID - 702000).ToString("00000"));
+ objupdate.ObjectData[0].ObjectData = new byte[60];
+ objupdate.ObjectData[0].ObjectData[46] = 128;
+ objupdate.ObjectData[0].ObjectData[47] = 63;
+ LLVector3 pos1 = addPacket.ObjectData.RayEnd;
+ //update position
+ byte[] pb = pos1.GetBytes();
+ Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
+
+ this.newPrimFlag = true;
+ this.uuid = objupdate.ObjectData[0].FullID;
+ this.localid = objupdate.ObjectData[0].ID;
+ this.position = pos1;
+ this.OurPacket = objupdate;
+ }
+
+ public void CreateFromStorage(PrimData store)
+ {
+ //need to clean this up as it shares a lot of code with CreateFromPacket()
+ ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+ objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle;
+ objupdate.RegionData.TimeDilation = 64096;
+ objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+
+ this.primData = store;
+ objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
+ objupdate.ObjectData[0].PSBlock = new byte[0];
+ objupdate.ObjectData[0].ExtraParams = new byte[1];
+ objupdate.ObjectData[0].MediaURL = new byte[0];
+ objupdate.ObjectData[0].NameValue = new byte[0];
+ objupdate.ObjectData[0].Text = new byte[0];
+ objupdate.ObjectData[0].TextColor = new byte[4];
+ objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0);
+ objupdate.ObjectData[0].JointPivot = new LLVector3(0, 0, 0);
+ objupdate.ObjectData[0].Material = 3;
+ objupdate.ObjectData[0].UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456;
+ objupdate.ObjectData[0].TextureAnim = new byte[0];
+ objupdate.ObjectData[0].Sound = LLUUID.Zero;
+
+ if (store.Texture == null)
+ {
+ LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
+ objupdate.ObjectData[0].TextureEntry = ntex.ToBytes();
+ }
+ else
+ {
+ objupdate.ObjectData[0].TextureEntry = store.Texture;
+ }
+
+ objupdate.ObjectData[0].State = 0;
+ objupdate.ObjectData[0].Data = new byte[0];
+ objupdate.ObjectData[0].OwnerID = this.primData.OwnerID;
+ objupdate.ObjectData[0].PCode = this.primData.PCode;
+ objupdate.ObjectData[0].PathBegin = this.primData.PathBegin;
+ objupdate.ObjectData[0].PathEnd = this.primData.PathEnd;
+ objupdate.ObjectData[0].PathScaleX = this.primData.PathScaleX;
+ objupdate.ObjectData[0].PathScaleY = this.primData.PathScaleY;
+ objupdate.ObjectData[0].PathShearX = this.primData.PathShearX;
+ objupdate.ObjectData[0].PathShearY = this.primData.PathShearY;
+ objupdate.ObjectData[0].PathSkew = this.primData.PathSkew;
+ objupdate.ObjectData[0].ProfileBegin = this.primData.ProfileBegin;
+ objupdate.ObjectData[0].ProfileEnd = this.primData.ProfileEnd;
+ objupdate.ObjectData[0].Scale = this.primData.Scale;
+ objupdate.ObjectData[0].PathCurve = this.primData.PathCurve;
+ objupdate.ObjectData[0].ProfileCurve = this.primData.ProfileCurve;
+ objupdate.ObjectData[0].ParentID = 0;
+ objupdate.ObjectData[0].ProfileHollow = this.primData.ProfileHollow;
+ //finish off copying rest of shape data
+ objupdate.ObjectData[0].PathRadiusOffset = this.primData.PathRadiusOffset;
+ objupdate.ObjectData[0].PathRevolutions = this.primData.PathRevolutions;
+ objupdate.ObjectData[0].PathTaperX = this.primData.PathTaperX;
+ objupdate.ObjectData[0].PathTaperY = this.primData.PathTaperY;
+ objupdate.ObjectData[0].PathTwist = this.primData.PathTwist;
+ objupdate.ObjectData[0].PathTwistBegin = this.primData.PathTwistBegin;
+
+ objupdate.ObjectData[0].ID = (uint)store.LocalID;
+ objupdate.ObjectData[0].FullID = store.FullID;
+
+ objupdate.ObjectData[0].ObjectData = new byte[60];
+ objupdate.ObjectData[0].ObjectData[46] = 128;
+ objupdate.ObjectData[0].ObjectData[47] = 63;
+ LLVector3 pos1 = store.Position;
+ //update position
+ byte[] pb = pos1.GetBytes();
+ Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
+
+ this.uuid = objupdate.ObjectData[0].FullID;
+ this.localid = objupdate.ObjectData[0].ID;
+ this.position = pos1;
+ this.OurPacket = objupdate;
+
+ }
+ public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock()
+ {
+ uint ID = this.localid;
+ byte[] bytes = new byte[60];
+
+ int i = 0;
+ ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
+ dat.TextureEntry = this.OurPacket.ObjectData[0].TextureEntry;
+
+ bytes[i++] = (byte)(ID % 256);
+ bytes[i++] = (byte)((ID >> 8) % 256);
+ bytes[i++] = (byte)((ID >> 16) % 256);
+ bytes[i++] = (byte)((ID >> 24) % 256);
+ bytes[i++] = 0;
+ bytes[i++] = 0;
+
+ LLVector3 lPos;
+ Axiom.MathLib.Quaternion lRot;
+ if (this._physActor != null && this.physicsEnabled)
+ {
+ PhysicsVector pPos = this._physActor.Position;
+ lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
+ lRot = this._physActor.Orientation;
+ }
+ else
+ {
+ lPos = this.position;
+ lRot = this.rotation;
+ }
+ byte[] pb = lPos.GetBytes();
+ Array.Copy(pb, 0, bytes, i, pb.Length);
+ i += 12;
+ ushort ac = 32767;
+
+ //vel
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+
+ //accel
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+
+ ushort rw, rx, ry, rz;
+ rw = (ushort)(32768 * (lRot.w + 1));
+ rx = (ushort)(32768 * (lRot.x + 1));
+ ry = (ushort)(32768 * (lRot.y + 1));
+ rz = (ushort)(32768 * (lRot.z + 1));
+
+ //rot
+ bytes[i++] = (byte)(rx % 256);
+ bytes[i++] = (byte)((rx >> 8) % 256);
+ bytes[i++] = (byte)(ry % 256);
+ bytes[i++] = (byte)((ry >> 8) % 256);
+ bytes[i++] = (byte)(rz % 256);
+ bytes[i++] = (byte)((rz >> 8) % 256);
+ bytes[i++] = (byte)(rw % 256);
+ bytes[i++] = (byte)((rw >> 8) % 256);
+
+ //rotation vel
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+ bytes[i++] = (byte)(ac % 256);
+ bytes[i++] = (byte)((ac >> 8) % 256);
+
+ dat.Data = bytes;
+ return dat;
+ }
+
+ public override void BackUp()
+ {
+ this.primData.FullID = this.uuid;
+ this.primData.LocalID = this.localid;
+ this.primData.Position = this.position;
+ this.primData.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z, this.rotation.w);
+ OpenSimRoot.Instance.LocalWorld.localStorage.StorePrim(this.primData);
+ }
+ }
+
+}
diff --git a/src/world/ScriptEngine.cs b/OpenSim.RegionServer/world/ScriptEngine.cs
similarity index 100%
rename from src/world/ScriptEngine.cs
rename to OpenSim.RegionServer/world/ScriptEngine.cs
diff --git a/src/world/SurfacePatch.cs b/OpenSim.RegionServer/world/SurfacePatch.cs
similarity index 100%
rename from src/world/SurfacePatch.cs
rename to OpenSim.RegionServer/world/SurfacePatch.cs
diff --git a/src/world/World.cs b/OpenSim.RegionServer/world/World.cs
similarity index 69%
rename from src/world/World.cs
rename to OpenSim.RegionServer/world/World.cs
index e1c84bc09d..ba99233688 100644
--- a/src/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -5,8 +5,10 @@ using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
-using PhysicsSystem;
-using GridInterfaces;
+using OpenSim.Physics.Manager;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
+using OpenSim.Framework.Terrain;
namespace OpenSim.world
{
@@ -26,10 +28,10 @@ namespace OpenSim.world
public World()
{
- ServerConsole.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
Entities = new Dictionary();
- ServerConsole.MainConsole.Instance.WriteLine("World.cs - creating LandMap");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating LandMap");
TerrainManager = new TerrainManager(new SecondLife());
Avatar.SetupTemplate("avatar-template.dat");
// ServerConsole.MainConsole.Instance.WriteLine("World.cs - Creating script engine instance");
@@ -71,7 +73,7 @@ namespace OpenSim.world
//backup world data
this.storageCount++;
- if(storageCount> 300) //set to how often you want to backup
+ if(storageCount> 1200) //set to how often you want to backup
{
this.Backup();
storageCount =0;
@@ -112,15 +114,15 @@ namespace OpenSim.world
HeightmapGenHills hills = new HeightmapGenHills();
this.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false);
this.phyScene.SetTerrain(this.LandMap);
- OpenSim_Main.cfg.SaveMap();
+ OpenSimRoot.Instance.Cfg.SaveMap(this.LandMap);
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
+ foreach(SimClient client in OpenSimRoot.Instance.ClientThreads.Values) {
this.SendLayerData(client);
}
}
public void LoadPrimsFromStorage()
{
- ServerConsole.MainConsole.Instance.WriteLine("World.cs: LoadPrimsFromStorage() - Loading primitives");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: LoadPrimsFromStorage() - Loading primitives");
this.localStorage.LoadPrimitives(this);
}
@@ -130,7 +132,7 @@ namespace OpenSim.world
{
_primCount = prim.LocalID + 1;
}
- ServerConsole.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Reloading prim (localId "+ prim.LocalID+ " ) from storage");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Reloading prim (localId "+ prim.LocalID+ " ) from storage");
Primitive nPrim = new Primitive();
nPrim.CreateFromStorage(prim);
this.Entities.Add(nPrim.uuid, nPrim);
@@ -141,7 +143,7 @@ namespace OpenSim.world
this.localStorage.ShutDown();
}
- public void SendLayerData(OpenSimClient RemoteClient) {
+ public void SendLayerData(SimClient RemoteClient) {
int[] patches = new int[4];
for (int y = 0; y < 16; y++)
@@ -159,7 +161,7 @@ namespace OpenSim.world
}
}
- public void GetInitialPrims(OpenSimClient RemoteClient)
+ public void GetInitialPrims(SimClient RemoteClient)
{
foreach (libsecondlife.LLUUID UUID in Entities.Keys)
{
@@ -170,33 +172,36 @@ namespace OpenSim.world
}
}
- public void AddViewerAgent(OpenSimClient AgentClient) {
- ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
+ public void AddViewerAgent(SimClient AgentClient) {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
Avatar NewAvatar = new Avatar(AgentClient);
- ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world");
- ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake ");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake ");
NewAvatar.SendRegionHandshake(this);
PhysicsVector pVec = new PhysicsVector(NewAvatar.position.X, NewAvatar.position.Y, NewAvatar.position.Z);
NewAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
this.Entities.Add(AgentClient.AgentID, NewAvatar);
}
- public void AddNewPrim(ObjectAddPacket addPacket, OpenSimClient AgentClient)
+ public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient)
{
- ServerConsole.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim");
Primitive prim = new Primitive();
prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount);
PhysicsVector pVec = new PhysicsVector(prim.position.X, prim.position.Y, prim.position.Z);
- PhysicsVector pSize = new PhysicsVector( 0.25f, 0.25f, 0.25f);
- //prim.PhysActor = this.phyScene.AddPrim(pVec, pSize );
+ PhysicsVector pSize = new PhysicsVector( 0.255f, 0.255f, 0.255f);
+ if(OpenSim.world.Avatar.PhysicsEngineFlying)
+ {
+ prim.PhysActor = this.phyScene.AddPrim(pVec, pSize );
+ }
//prim.PhysicsEnabled = true;
this.Entities.Add(prim.uuid, prim);
this._primCount++;
}
public bool Backup() {
- /* TODO: Save the current world entities state. */
- ServerConsole.MainConsole.Instance.WriteLine("World.cs: Backup() - Backing up Primitives");
+
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: Backup() - Backing up Primitives");
foreach (libsecondlife.LLUUID UUID in Entities.Keys)
{
Entities[UUID].BackUp();
diff --git a/src/world/scripting/IScript.cs b/OpenSim.RegionServer/world/scripting/IScript.cs
similarity index 100%
rename from src/world/scripting/IScript.cs
rename to OpenSim.RegionServer/world/scripting/IScript.cs
diff --git a/OpenSim.Storage/LocalStorageDb4o/AssemblyInfo.cs b/OpenSim.Storage/LocalStorageDb4o/AssemblyInfo.cs
new file mode 100644
index 0000000000..66106068df
--- /dev/null
+++ b/OpenSim.Storage/LocalStorageDb4o/AssemblyInfo.cs
@@ -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.*")]
diff --git a/src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs b/OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs
similarity index 82%
rename from src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs
rename to OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs
index bb9825c29f..93ed9cc860 100644
--- a/src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs
+++ b/OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs
@@ -29,9 +29,10 @@ using System.Collections.Generic;
using Db4objects.Db4o;
using Db4objects.Db4o.Query;
using libsecondlife;
-using GridInterfaces;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
-namespace Db4LocalStorage
+namespace OpenSim.Storage.LocalStorageDb4o
{
///
///
@@ -45,13 +46,13 @@ namespace Db4LocalStorage
try
{
db = Db4oFactory.OpenFile("localworld.yap");
- ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage creation");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Db4LocalStorage creation");
}
catch(Exception e)
{
db.Close();
- ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage :Constructor - Exception occured");
- ServerConsole.MainConsole.Instance.WriteLine(e.ToString());
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Db4LocalStorage :Constructor - Exception occured");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(e.ToString());
}
}
@@ -84,6 +85,7 @@ namespace Db4LocalStorage
found.ProfileHollow = prim.ProfileHollow;
found.Position = prim.Position;
found.Rotation = prim.Rotation;
+ found.Texture = prim.Texture;
db.Set(found);
db.Commit();
}
@@ -109,7 +111,7 @@ namespace Db4LocalStorage
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);
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Db4LocalStorage.cs: LoadPrimitives() - number of prims in storages is "+result.Count);
foreach (PrimData prim in result) {
receiver.PrimFromStorage(prim);
}
@@ -121,19 +123,4 @@ namespace Db4LocalStorage
db.Close();
}
}
-
- public class UUIDQuery : Predicate
- {
- private LLUUID _findID;
-
- public UUIDQuery(LLUUID find)
- {
- _findID = find;
- }
- public bool Match(PrimData prim)
- {
- return (prim.FullID == _findID);
- }
- }
-
}
diff --git a/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj
new file mode 100644
index 0000000000..5c2ffa5f55
--- /dev/null
+++ b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj
@@ -0,0 +1,104 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.Storage.LocalStorageDb4o
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.Storage.LocalStorageDb4o
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ \System.dll
+
+
+ \System.Xml.dll.dll
+
+
+ \Db4objects.Db4o.dll.dll
+
+
+ \libsecondlife.dll.dll
+
+
+
+
+ OpenSim.Framework
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ OpenSim.Framework.Console
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build
new file mode 100644
index 0000000000..752d0ab9b0
--- /dev/null
+++ b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs b/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs
new file mode 100644
index 0000000000..16b6685c3b
--- /dev/null
+++ b/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Db4objects.Db4o;
+using Db4objects.Db4o.Query;
+using libsecondlife;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Assets;
+
+namespace OpenSim.Storage.LocalStorageDb4o
+{
+ public class UUIDQuery : Predicate
+ {
+ private LLUUID _findID;
+
+ public UUIDQuery(LLUUID find)
+ {
+ _findID = find;
+ }
+ public bool Match(PrimData prim)
+ {
+ return (prim.FullID == _findID);
+ }
+ }
+}
diff --git a/OpenSim.build b/OpenSim.build
new file mode 100644
index 0000000000..6013f9db7e
--- /dev/null
+++ b/OpenSim.build
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim.sln b/OpenSim.sln
new file mode 100644
index 0000000000..94007714a4
--- /dev/null
+++ b/OpenSim.sln
@@ -0,0 +1,89 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.PhysXPlugin", "OpenSim.Physics\PhysXPlugin\OpenSim.Physics.PhysXPlugin.csproj", "{CBE1E31D-D7E3-4791-A616-F00173BBC26A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework.Console", "OpenSim.Framework.Console\OpenSim.Framework.Console.csproj", "{C8405E1A-EC19-48B6-9C8C-CA03624B9916}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Config.SimConfigDb4o", "OpenSim.Config\SimConfigDb4o\OpenSim.Config.SimConfigDb4o.csproj", "{C077B28B-2F8D-4BD9-8E47-84C51B3A7358}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.BasicPhysicsPlugin", "OpenSim.Physics\BasicPhysicsPlugin\OpenSim.Physics.BasicPhysicsPlugin.csproj", "{00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GridInterfaces.Remote", "OpenSim.GridInterfaces\Remote\OpenSim.GridInterfaces.Remote.csproj", "{2AF1E37E-064D-4590-8D7E-B6390F721BAE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Storage.LocalStorageDb4o", "OpenSim.Storage\LocalStorageDb4o\OpenSim.Storage.LocalStorageDb4o.csproj", "{2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "OpenSim.Framework\OpenSim.Framework.csproj", "{1D2865A9-CF8E-45F7-B96D-91ED128A32CF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.RegionServer", "OpenSim.RegionServer\OpenSim.RegionServer.csproj", "{B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.Manager", "OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj", "{58360A80-9333-4E0F-8F83-3CF937E51633}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GridInterfaces.Local", "OpenSim.GridInterfaces\Local\OpenSim.GridInterfaces.Local.csproj", "{FBF3DA4B-5176-4602-AA52-482D077EEC88}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectDependencies) = postSolution
+ ({CBE1E31D-D7E3-4791-A616-F00173BBC26A}).3 = ({58360A80-9333-4E0F-8F83-3CF937E51633})
+ ({C077B28B-2F8D-4BD9-8E47-84C51B3A7358}).5 = ({1D2865A9-CF8E-45F7-B96D-91ED128A32CF})
+ ({C077B28B-2F8D-4BD9-8E47-84C51B3A7358}).6 = ({C8405E1A-EC19-48B6-9C8C-CA03624B9916})
+ ({00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}).2 = ({58360A80-9333-4E0F-8F83-3CF937E51633})
+ ({2AF1E37E-064D-4590-8D7E-B6390F721BAE}).3 = ({1D2865A9-CF8E-45F7-B96D-91ED128A32CF})
+ ({2AF1E37E-064D-4590-8D7E-B6390F721BAE}).4 = ({C8405E1A-EC19-48B6-9C8C-CA03624B9916})
+ ({2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}).4 = ({1D2865A9-CF8E-45F7-B96D-91ED128A32CF})
+ ({2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}).5 = ({C8405E1A-EC19-48B6-9C8C-CA03624B9916})
+ ({B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}).5 = ({C8405E1A-EC19-48B6-9C8C-CA03624B9916})
+ ({B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}).6 = ({58360A80-9333-4E0F-8F83-3CF937E51633})
+ ({B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}).7 = ({1D2865A9-CF8E-45F7-B96D-91ED128A32CF})
+ ({58360A80-9333-4E0F-8F83-3CF937E51633}).3 = ({C8405E1A-EC19-48B6-9C8C-CA03624B9916})
+ ({FBF3DA4B-5176-4602-AA52-482D077EEC88}).4 = ({1D2865A9-CF8E-45F7-B96D-91ED128A32CF})
+ ({FBF3DA4B-5176-4602-AA52-482D077EEC88}).5 = ({C8405E1A-EC19-48B6-9C8C-CA03624B9916})
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CBE1E31D-D7E3-4791-A616-F00173BBC26A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CBE1E31D-D7E3-4791-A616-F00173BBC26A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CBE1E31D-D7E3-4791-A616-F00173BBC26A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CBE1E31D-D7E3-4791-A616-F00173BBC26A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8405E1A-EC19-48B6-9C8C-CA03624B9916}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C077B28B-2F8D-4BD9-8E47-84C51B3A7358}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C077B28B-2F8D-4BD9-8E47-84C51B3A7358}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C077B28B-2F8D-4BD9-8E47-84C51B3A7358}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C077B28B-2F8D-4BD9-8E47-84C51B3A7358}.Release|Any CPU.Build.0 = Release|Any CPU
+ {00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {00594B9E-29A5-4B9C-AEBD-0AD08C73CFE8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2AF1E37E-064D-4590-8D7E-B6390F721BAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2AF1E37E-064D-4590-8D7E-B6390F721BAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2AF1E37E-064D-4590-8D7E-B6390F721BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2AF1E37E-064D-4590-8D7E-B6390F721BAE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2B5E9FF0-DE71-41DA-AC6A-B8E2D2D0AE09}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1D2865A9-CF8E-45F7-B96D-91ED128A32CF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B48F0D82-2DE5-42B0-9F1D-0F4353FA243A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58360A80-9333-4E0F-8F83-3CF937E51633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58360A80-9333-4E0F-8F83-3CF937E51633}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58360A80-9333-4E0F-8F83-3CF937E51633}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58360A80-9333-4E0F-8F83-3CF937E51633}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FBF3DA4B-5176-4602-AA52-482D077EEC88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FBF3DA4B-5176-4602-AA52-482D077EEC88}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FBF3DA4B-5176-4602-AA52-482D077EEC88}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FBF3DA4B-5176-4602-AA52-482D077EEC88}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Prebuild/Prebuild.build b/Prebuild/Prebuild.build
new file mode 100644
index 0000000000..395fb31e54
--- /dev/null
+++ b/Prebuild/Prebuild.build
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Prebuild/Prebuild.sln b/Prebuild/Prebuild.sln
new file mode 100644
index 0000000000..a0bea09ea4
--- /dev/null
+++ b/Prebuild/Prebuild.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prebuild", "src\Prebuild.csproj", "{A5CC8344-BEE4-442E-92F1-FBCB05D6AB78}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{468F1D07-AD17-4CC3-ABD0-2CA268E4E1A6}"
+ ProjectSection(SolutionItems) = preProject
+ prebuild = prebuild
+ prebuild.xml = prebuild.xml
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A5CC8344-BEE4-442E-92F1-FBCB05D6AB78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5CC8344-BEE4-442E-92F1-FBCB05D6AB78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5CC8344-BEE4-442E-92F1-FBCB05D6AB78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5CC8344-BEE4-442E-92F1-FBCB05D6AB78}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Prebuild/README b/Prebuild/README
new file mode 100644
index 0000000000..eca6be17e2
--- /dev/null
+++ b/Prebuild/README
@@ -0,0 +1,230 @@
+Prebuild Instructions
+
+Prebuild is an XML-driven pre-build tool allowing developers to easily generate project or make files for major IDE's and .NET development tools including: Visual Studio 2005, Visual Studio 2003, Visual Studio 2002, SharpDevelop, SharpDevelop2, MonoDevelop, and NAnt.
+
+_________________________________________________________________________________
+Overview
+
+Prebuild can be either be run from the command line to generate the project and make files or you can execute the included batch (*.bat) and Unix Shell script (*.sh) files.
+The Prebuild file
+
+_________________________________________________________________________________
+The currently supported developement tools and their associated batch and shell script files.
+
+Visual Studio .NET 2005 (VS2005.bat)
+Visual Studio .NET 2003 (VS2003.bat)
+Visual Studio .NET 2002 (VS2002.bat)
+SharpDevelop (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
+SharpDevelop2 (SharpDevelop.bat) - http://www.icsharpcode.net/OpenSource/SD/
+MonoDevelop (MonoDevelop.sh) - http://www.monodevelop.com/
+NAnt (nant.sh and nant.bat) - http://nant.sourceforge.net/
+Autotools (autotools.bat and autotools.sh) http://www.gnu.org. Only partial support
+
+Notes:
+A Unix Shell script is provided for MonoDevelop, as this is more appropriate than a windows batch file.
+Visual Studio .NET 2005 and the Visual Express IDE's can import solutions from older versions of Visual Studio .NET.
+Makefiles are not currently supported.
+
+_________________________________________________________________________________
+Command Line Syntax:
+
+Example:
+>Prebuild /target vs2003
+
+This will generate the project files for Visual Studio.NET 2003 and place the redirect the log to a file named PrebuildLog.txt in the parent directory
+
+
+The syntax structure is as below, where commandParameter is optional depending on the command and you can provide several option-value pairs.
+Note: The '>' signified the command line, do not actually enter this manually
+
+>Prebuild /
\ No newline at end of file
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj
deleted file mode 100644
index 554df5e62e..0000000000
--- a/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
- Library
- RealPhysXplugin
- RealPhysXplugin
- Debug
- AnyCPU
- {56C1D214-F389-4228-921A-0A3A0712C159}
-
-
- ..\..\..\..\bin\Physics\
- False
- DEBUG;TRACE
- True
- Full
- True
-
-
- ..\..\..\..\bin\Physics\
- True
- TRACE
- False
- None
- False
-
-
-
-
-
- ..\..\..\..\bin\PhysX_Wrapper_Dotnet.dll
- False
- False
-
-
-
-
-
-
-
- {3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}
- PhysicsManager
- False
-
-
-
-
\ No newline at end of file
diff --git a/src/physics/default.build b/src/physics/default.build
deleted file mode 100644
index 01d2415b9d..0000000000
--- a/src/physics/default.build
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- nant buildfile for OpenSim
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/physics/plugins/AssemblyInfo.cs b/src/physics/plugins/AssemblyInfo.cs
deleted file mode 100644
index 4cd5558a20..0000000000
--- a/src/physics/plugins/AssemblyInfo.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// ------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Mono Runtime Version: 2.0.50727.42
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-// ------------------------------------------------------------------------------
-
-[assembly: ComVisibleAttribute(false)]
-[assembly: CLSCompliantAttribute(false)]
-[assembly: AssemblyVersionAttribute("0.1.0.240")]
-[assembly: AssemblyTitleAttribute("opensim-physicsmanager-physx")]
-[assembly: AssemblyDescriptionAttribute("PhysX plugin for OpenSim")]
-[assembly: AssemblyCopyrightAttribute("Copyright © OGS development team 2007")]
-
diff --git a/src/physics/plugins/BasicPhysicsplugin.csproj b/src/physics/plugins/BasicPhysicsplugin.csproj
deleted file mode 100644
index b3f47d330e..0000000000
--- a/src/physics/plugins/BasicPhysicsplugin.csproj
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
- Debug
- AnyCPU
- 8.0.50727
- 2.0
- {52BCCE7B-69EA-4AC3-9DBC-D571B96C2EA1}
- Library
- Properties
- BasicPhysicsplugin
- BasicPhysicsplugin
-
-
- true
- full
- false
- ..\..\..\bin\Physics\
- DEBUG;TRACE
- prompt
- 4
-
-
- pdbonly
- true
- ..\..\..\bin\Physics\
- TRACE
- prompt
- 4
-
-
-
- False
- ..\..\..\bin\Axiom.MathLib.dll
- False
-
-
-
-
-
-
-
-
-
-
- {3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}
- PhysicsManager
- False
-
-
-
-
\ No newline at end of file
diff --git a/src/physics/plugins/default.build b/src/physics/plugins/default.build
deleted file mode 100644
index 66056a55fd..0000000000
--- a/src/physics/plugins/default.build
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
- nant buildfile for OpenSim
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/world/Avatar.cs b/src/world/Avatar.cs
deleted file mode 100644
index facfeee1db..0000000000
--- a/src/world/Avatar.cs
+++ /dev/null
@@ -1,487 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using libsecondlife;
-using libsecondlife.Packets;
-using PhysicsSystem;
-using Axiom.MathLib;
-
-namespace OpenSim.world
-{
- public class Avatar : Entity
- {
- public static bool PhysicsEngineFlying;
- public string firstname;
- public string lastname;
- public OpenSimClient ControllingClient;
- private PhysicsActor _physActor;
- private static libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate;
- private bool updateflag;
- private byte movementflag;
- private List forcesList = new List();
- private short _updateCount;
- private Axiom.MathLib.Quaternion bodyRot;
-
- public Avatar(OpenSimClient TheClient) {
- ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)");
- ControllingClient=TheClient;
- position = new LLVector3(100.0f,100.0f,30.0f);
- position.Z = OpenSim_Main.local_world.LandMap[(int)position.Y * 256 + (int)position.X]+1;
- }
-
- public PhysicsActor PhysActor
- {
- set
- {
- this._physActor = value;
- }
- }
- public override void addForces()
- {
- lock(this.forcesList)
- {
- if(this.forcesList.Count>0)
- {
- for(int i=0 ; i < this.forcesList.Count; i++)
- {
- NewForce force = this.forcesList[i];
- PhysicsVector phyVector = new PhysicsVector(force.X, force.Y, force.Z);
- this._physActor.Velocity = phyVector;
- this.updateflag = true;
- this.velocity = new LLVector3(force.X, force.Y, force.Z); //shouldn't really be doing this
- // but as we are setting the velocity (rather than using real forces) at the moment it is okay.
- }
- for(int i=0 ; i < this.forcesList.Count; i++)
- {
- this.forcesList.RemoveAt(0);
- }
- }
- }
- }
-
- public override void update()
- {
-
- if(this.updateflag)
- {
- //need to send movement info
- //so create the improvedterseobjectupdate packet
- //use CreateTerseBlock()
- ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
- ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
- terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME
- terse.RegionData.TimeDilation = 64096;
- terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
- terse.ObjectData[0] = terseBlock;
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
- client.OutPacket(terse);
- }
-
- updateflag =false;
- //this._updateCount = 0;
- }
- else
- {
- //if((movementflag & 1) !=0)
- //{
- _updateCount++;
- if(( (!PhysicsEngineFlying) && (_updateCount>3)) || (_updateCount>0))
- {
- //It has been a while since last update was sent so lets send one.
- ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
- ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
- terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME
- terse.RegionData.TimeDilation = 64096;
- terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
- terse.ObjectData[0] = terseBlock;
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
- client.OutPacket(terse);
- }
- _updateCount = 0;
- }
- //}
- }
- }
-
- public static void SetupTemplate(string name)
- {
- int i = 0;
- FileInfo fInfo = new FileInfo(name);
- long numBytes = fInfo.Length;
- FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read);
- BinaryReader br = new BinaryReader(fStream);
- byte [] data1 = br.ReadBytes((int)numBytes);
- br.Close();
- fStream.Close();
-
- libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i);
-
- System.Text.Encoding enc = System.Text.Encoding.ASCII;
- libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16);
- pos.X = 100f;
- objdata.ID = 8880000;
- objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0");
- libsecondlife.LLVector3 pos2 = new LLVector3(100f,100f,23f);
- //objdata.FullID=user.AgentID;
- byte[] pb = pos.GetBytes();
- Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length);
-
- Avatar.AvatarTemplate = objdata;
- }
-
- public void CompleteMovement(World RegionInfo) {
- ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:CompleteMovement() - Constructing AgentMovementComplete packet");
- AgentMovementCompletePacket mov = new AgentMovementCompletePacket();
- mov.AgentData.SessionID = this.ControllingClient.SessionID;
- mov.AgentData.AgentID = this.ControllingClient.AgentID;
- mov.Data.RegionHandle = OpenSim_Main.cfg.RegionHandle;
- // TODO - dynamicalise this stuff
- mov.Data.Timestamp = 1172750370;
- mov.Data.Position = new LLVector3(100f, 100f, 23f);
- mov.Data.LookAt = new LLVector3(0.99f, 0.042f, 0);
-
- ControllingClient.OutPacket(mov);
- }
-
- public void SendInitialPosition() {
-
- System.Text.Encoding _enc = System.Text.Encoding.ASCII;
- //send a objectupdate packet with information about the clients avatar
- ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
- objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle;
- objupdate.RegionData.TimeDilation = 64096;
- objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
-
- objupdate.ObjectData[0] = AvatarTemplate;
- //give this avatar object a local id and assign the user a name
- objupdate.ObjectData[0].ID = this.localid;
- objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
- objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
-
- libsecondlife.LLVector3 pos2 = new LLVector3((float)this.position.X, (float)this.position.Y, (float)this.position.Z);
-
- byte[] pb = pos2.GetBytes();
-
- Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
- OpenSim_Main.local_world._localNumber++;
-
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values)
- {
- client.OutPacket(objupdate);
- if(client.AgentID != ControllingClient.AgentID)
- {
- SendAppearanceToOtherAgent(client);
- }
- }
- //this.ControllingClient.OutPacket(objupdate);
- }
-
- public void SendInitialAppearance() {
- AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
- aw.AgentData.AgentID = this.ControllingClient.AgentID;
- aw.AgentData.SerialNum = 0;
- aw.AgentData.SessionID = ControllingClient.SessionID;
-
- aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
- AgentWearablesUpdatePacket.WearableDataBlock awb = new AgentWearablesUpdatePacket.WearableDataBlock();
- awb.WearableType = (byte)0;
- awb.AssetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
- awb.ItemID = LLUUID.Random();
- aw.WearableData[0] = awb;
-
- for(int i=1; i<13; i++)
- {
- awb = new AgentWearablesUpdatePacket.WearableDataBlock();
- awb.WearableType = (byte)i;
- awb.AssetID = new LLUUID("00000000-0000-0000-0000-000000000000");
- awb.ItemID = new LLUUID("00000000-0000-0000-0000-000000000000");
- aw.WearableData[i] = awb;
- }
-
- ControllingClient.OutPacket(aw);
- }
-
- public ObjectUpdatePacket CreateUpdatePacket()
- {
- System.Text.Encoding _enc = System.Text.Encoding.ASCII;
- //send a objectupdate packet with information about the clients avatar
- ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
- objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle;
- objupdate.RegionData.TimeDilation = 64096;
- objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
-
- objupdate.ObjectData[0] = AvatarTemplate;
- //give this avatar object a local id and assign the user a name
- objupdate.ObjectData[0].ID = this.localid;
- objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
- objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
-
- libsecondlife.LLVector3 pos2 = new LLVector3((float)this._physActor.Position.X, (float)this._physActor.Position.Y, (float)this._physActor.Position.Z);
-
- byte[] pb = pos2.GetBytes();
-
- Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
- return objupdate;
- }
-
- public void SendAppearanceToOtherAgent(OpenSimClient userInfo)
- {
- AvatarAppearancePacket avp = new AvatarAppearancePacket();
-
-
- avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
- //avp.ObjectData.TextureEntry=this.avatar_template.TextureEntry;// br.ReadBytes((int)numBytes);
-
- LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-0000-000000000005"));
- avp.ObjectData.TextureEntry = ntex.ToBytes();
-
- AvatarAppearancePacket.VisualParamBlock avblock = null;
- for(int i = 0; i < 218; i++)
- {
- avblock = new AvatarAppearancePacket.VisualParamBlock();
- avblock.ParamValue = (byte)100;
- avp.VisualParam[i] = avblock;
- }
-
- avp.Sender.IsTrial = false;
- avp.Sender.ID = ControllingClient.AgentID;
- userInfo.OutPacket(avp);
-
- }
-
- public void HandleUpdate(AgentUpdatePacket pack) {
- if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_FLY) !=0)
- {
- this._physActor.Flying = true;
- }
- else
- {
- this._physActor.Flying = false;
- }
- if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_POS) !=0) {
- Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z);
- if(((movementflag & 1) ==0) || (q!= this.bodyRot))
- {
- //we should add a new force to the list
- // but for now we will deal with velocities
- NewForce newVelocity = new NewForce();
- Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0);
- Axiom.MathLib.Vector3 direc = q * v3;
- direc.Normalize();
-
- //work out velocity for sim physics system
- direc = direc * ((0.03f) * 128f);
- if(this._physActor.Flying)
- direc *=2;
-
- newVelocity.X = direc.x;
- newVelocity.Y = direc.y;
- newVelocity.Z = direc.z;
- this.forcesList.Add(newVelocity);
- movementflag = 1;
- this.bodyRot = q;
- }
- }
- else if((((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_UP_POS) !=0) &&(PhysicsEngineFlying)) {
- if(((movementflag & 2) ==0) && this._physActor.Flying)
- {
- //we should add a new force to the list
- // but for now we will deal with velocities
- NewForce newVelocity = new NewForce();
- Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(0, 0, 1);
- Axiom.MathLib.Vector3 direc = v3;
- direc.Normalize();
-
- //work out velocity for sim physics system
- direc = direc * ((0.03f) * 128f *2);
- newVelocity.X = direc.x;
- newVelocity.Y = direc.y;
- newVelocity.Z = direc.z;
- this.forcesList.Add(newVelocity);
- movementflag = 2;
- }
- }
- else if((((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_UP_NEG) !=0) && (PhysicsEngineFlying)) {
- if(((movementflag & 4) ==0) && this._physActor.Flying)
- {
- //we should add a new force to the list
- // but for now we will deal with velocities
- NewForce newVelocity = new NewForce();
- Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(0, 0, -1);
- //Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z);
- Axiom.MathLib.Vector3 direc = v3;
- direc.Normalize();
-
- //work out velocity for sim physics system
- direc = direc * ((0.03f) * 128f *2);
- newVelocity.X = direc.x;
- newVelocity.Y = direc.y;
- newVelocity.Z = direc.z;
- this.forcesList.Add(newVelocity);
- movementflag = 4;
- }
- }
- else if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_NEG) !=0) {
- Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z);
- if(((movementflag & 8) ==0) || (q!= this.bodyRot))
- {
- //we should add a new force to the list
- // but for now we will deal with velocities
- NewForce newVelocity = new NewForce();
- Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(-1, 0, 0);
- Axiom.MathLib.Vector3 direc = q * v3;
- direc.Normalize();
-
- //work out velocity for sim physics system
- direc = direc * ((0.03f) * 128f);
- if(this._physActor.Flying)
- direc *=2;
-
- newVelocity.X = direc.x;
- newVelocity.Y = direc.y;
- newVelocity.Z = direc.z;
- this.forcesList.Add(newVelocity);
- movementflag = 8;
- this.bodyRot = q;
- }
- }
- else
- {
- if((movementflag) !=0)
- {
- NewForce newVelocity = new NewForce();
- newVelocity.X = 0;
- newVelocity.Y = 0;
- newVelocity.Z = 0;
- this.forcesList.Add(newVelocity);
- movementflag = 0;
- }
- }
- }
-
- //should be moved somewhere else
- public void SendRegionHandshake(World RegionInfo) {
- ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Creating empty RegionHandshake packet");
- System.Text.Encoding _enc = System.Text.Encoding.ASCII;
- RegionHandshakePacket handshake = new RegionHandshakePacket();
-
- ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionhandshake() - Filling in RegionHandshake details");
- handshake.RegionInfo.BillableFactor = 0;
- handshake.RegionInfo.IsEstateManager = false;
- handshake.RegionInfo.TerrainHeightRange00 = 60;
- handshake.RegionInfo.TerrainHeightRange01 = 60;
- handshake.RegionInfo.TerrainHeightRange10 = 60;
- handshake.RegionInfo.TerrainHeightRange11 = 60;
- handshake.RegionInfo.TerrainStartHeight00 = 10;
- handshake.RegionInfo.TerrainStartHeight01 = 10;
- handshake.RegionInfo.TerrainStartHeight10 = 10;
- handshake.RegionInfo.TerrainStartHeight11 = 10;
- handshake.RegionInfo.SimAccess = 13;
- handshake.RegionInfo.WaterHeight = 20;
- handshake.RegionInfo.RegionFlags = 72458694;
- handshake.RegionInfo.SimName = _enc.GetBytes(OpenSim_Main.cfg.RegionName + "\0");
- handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000");
- handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975");
- handshake.RegionInfo.TerrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3");
- handshake.RegionInfo.TerrainBase2 = new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f");
- handshake.RegionInfo.TerrainBase3 = new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2");
- handshake.RegionInfo.TerrainDetail0 = new LLUUID("00000000-0000-0000-0000-000000000000");
- handshake.RegionInfo.TerrainDetail1 = new LLUUID("00000000-0000-0000-0000-000000000000");
- handshake.RegionInfo.TerrainDetail2 = new LLUUID("00000000-0000-0000-0000-000000000000");
- handshake.RegionInfo.TerrainDetail3 = new LLUUID("00000000-0000-0000-0000-000000000000");
- handshake.RegionInfo.CacheID = new LLUUID("545ec0a5-5751-1026-8a0b-216e38a7ab37");
-
- ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Sending RegionHandshake packet");
- this.ControllingClient.OutPacket(handshake);
- }
-
- public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateTerseBlock()
- {
- byte[] bytes = new byte[60];
- int i=0;
- ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
-
- dat.TextureEntry = AvatarTemplate.TextureEntry;
- libsecondlife.LLVector3 pos2 = new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z);
-
- uint ID = this.localid;
-
- bytes[i++] = (byte)(ID % 256);
- bytes[i++] = (byte)((ID >> 8) % 256);
- bytes[i++] = (byte)((ID >> 16) % 256);
- bytes[i++] = (byte)((ID >> 24) % 256);
- bytes[i++] = 0;
- bytes[i++] = 1;
- i += 14;
- bytes[i++] = 128;
- bytes[i++] = 63;
-
- byte[] pb = pos2.GetBytes();
- Array.Copy(pb, 0, bytes, i, pb.Length);
- i += 12;
- ushort InternVelocityX;
- ushort InternVelocityY;
- ushort InternVelocityZ;
-
- Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(this._physActor.Velocity.X, this._physActor.Velocity.Y, this._physActor.Velocity.Z);
- internDirec = internDirec /128.0f;
- internDirec.x += 1;
- internDirec.y += 1;
- internDirec.z += 1;
-
- InternVelocityX = (ushort)(32768 * internDirec.x);
- InternVelocityY = (ushort)(32768 * internDirec.y);
- InternVelocityZ = (ushort)(32768 * internDirec.z);
-
- ushort ac = 32767;
- bytes[i++] = (byte)(InternVelocityX % 256);
- bytes[i++] = (byte)((InternVelocityX >> 8) % 256);
- bytes[i++] = (byte)(InternVelocityY % 256);
- bytes[i++] = (byte)((InternVelocityY>> 8) % 256);
- bytes[i++] = (byte)(InternVelocityZ % 256);
- bytes[i++] = (byte)((InternVelocityZ >> 8) % 256);
-
- //accel
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
-
- //rot
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
-
- //rotation vel
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
-
- dat.Data=bytes;
- return(dat);
- }
- }
-
- public class NewForce
- {
- public float X;
- public float Y;
- public float Z;
-
- public NewForce()
- {
-
- }
- }
-}
diff --git a/src/world/Primitive.cs b/src/world/Primitive.cs
deleted file mode 100644
index 6be33ef853..0000000000
--- a/src/world/Primitive.cs
+++ /dev/null
@@ -1,429 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using OpenSim.types;
-using libsecondlife;
-using libsecondlife.Packets;
-using GridInterfaces;
-using PhysicsSystem;
-
-namespace OpenSim.world
-{
- public class Primitive : Entity
- {
- protected float mesh_cutbegin;
- protected float mesh_cutend;
- protected PrimData primData;
- protected bool newPrimFlag;
- protected bool updateFlag;
- protected bool dirtyFlag;
- private ObjectUpdatePacket OurPacket;
- private PhysicsActor _physActor;
- private bool physicsEnabled;
-
- public bool PhysicsEnabled
- {
- get
- {
- return physicsEnabled;
- }
- set
- {
- physicsEnabled = value;
- }
- }
- public bool UpdateFlag
- {
- get
- {
- return updateFlag;
- }
- set
- {
- updateFlag = value;
- }
- }
- public LLVector3 Scale
- {
- set
- {
- this.primData.Scale = value;
- this.dirtyFlag = true;
- }
- get
- {
- return this.primData.Scale;
- }
- }
- public PhysicsActor PhysActor
- {
- set
- {
- this._physActor = value;
- }
- }
-
- public Primitive()
- {
- mesh_cutbegin = 0.0f;
- mesh_cutend = 1.0f;
- }
-
- public override Mesh getMesh()
- {
- Mesh mesh = new Mesh();
- Triangle tri = new Triangle(
- new Axiom.MathLib.Vector3(0.0f, 1.0f, 1.0f),
- new Axiom.MathLib.Vector3(1.0f, 0.0f, 1.0f),
- new Axiom.MathLib.Vector3(1.0f, 1.0f, 0.0f));
-
- mesh.AddTri(tri);
- mesh += base.getMesh();
-
- return mesh;
- }
-
- public void UpdatePosition( LLVector3 pos)
- {
- this.position = pos;
- if(this._physActor != null && this.physicsEnabled)
- {
- this._physActor.Position = new PhysicsVector(pos.X, pos.Y, pos.Z);
- }
- this.updateFlag = true;
- }
-
- public override void update()
- {
- if(this.newPrimFlag)
- {
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
- client.OutPacket(OurPacket);
- }
- this.newPrimFlag = false;
- }
- else if(this.updateFlag)
- {
- ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
- terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME
- terse.RegionData.TimeDilation = 64096;
- terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
- terse.ObjectData[0] = this.CreateImprovedBlock();
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
- client.OutPacket(terse);
- }
- this.updateFlag = false;
- }
- else if(this.dirtyFlag)
- {
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
- UpdateClient(client);
- }
- this.dirtyFlag = false;
- }
- else
- {
- if(this._physActor != null && this.physicsEnabled)
- {
- ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
- terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME
- terse.RegionData.TimeDilation = 64096;
- terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
- terse.ObjectData[0] = this.CreateImprovedBlock();
- foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) {
- client.OutPacket(terse);
- }
- }
- }
- }
-
- public void UpdateClient(OpenSimClient RemoteClient)
- {
-
- LLVector3 lPos;
- if( this._physActor != null && this.physicsEnabled)
- {
- PhysicsVector pPos = this._physActor.Position;
- lPos = new LLVector3( pPos.X, pPos.Y, pPos.Z);
- }
- else
- {
- lPos = this.position;
- }
- byte[] pb = lPos.GetBytes();
- Array.Copy(pb, 0, OurPacket.ObjectData[0].ObjectData, 0, pb.Length);
-
- // OurPacket should be update with the follwing in updateShape() rather than having to do it here
- OurPacket.ObjectData[0].OwnerID = this.primData.OwnerID;
- OurPacket.ObjectData[0].PCode = this.primData.PCode;
- OurPacket.ObjectData[0].PathBegin = this.primData.PathBegin;
- OurPacket.ObjectData[0].PathEnd = this.primData.PathEnd;
- OurPacket.ObjectData[0].PathScaleX = this.primData.PathScaleX;
- OurPacket.ObjectData[0].PathScaleY = this.primData.PathScaleY;
- OurPacket.ObjectData[0].PathShearX = this.primData.PathShearX;
- OurPacket.ObjectData[0].PathShearY = this.primData.PathShearY;
- OurPacket.ObjectData[0].PathSkew = this.primData.PathSkew;
- OurPacket.ObjectData[0].ProfileBegin = this.primData.ProfileBegin;
- OurPacket.ObjectData[0].ProfileEnd = this.primData.ProfileEnd;
- OurPacket.ObjectData[0].Scale = this.primData.Scale;
- OurPacket.ObjectData[0].PathCurve = this.primData.PathCurve;
- OurPacket.ObjectData[0].ProfileCurve = this.primData.ProfileCurve;
- OurPacket.ObjectData[0].ParentID = 0;
- OurPacket.ObjectData[0].ProfileHollow = this.primData.ProfileHollow;
- //finish off copying rest of shape data
- OurPacket.ObjectData[0].PathRadiusOffset = this.primData.PathRadiusOffset;
- OurPacket.ObjectData[0].PathRevolutions = this.primData.PathRevolutions;
- OurPacket.ObjectData[0].PathTaperX = this.primData.PathTaperX;
- OurPacket.ObjectData[0].PathTaperY = this.primData.PathTaperY;
- OurPacket.ObjectData[0].PathTwist = this.primData.PathTwist;
- OurPacket.ObjectData[0].PathTwistBegin= this.primData.PathTwistBegin;
-
- RemoteClient.OutPacket(OurPacket);
- }
-
- public void UpdateShape(ObjectShapePacket.ObjectDataBlock addPacket)
- {
- this.primData.PathBegin = addPacket.PathBegin;
- this.primData.PathEnd = addPacket.PathEnd;
- this.primData.PathScaleX = addPacket.PathScaleX;
- this.primData.PathScaleY = addPacket.PathScaleY;
- this.primData.PathShearX = addPacket.PathShearX;
- this.primData.PathShearY = addPacket.PathShearY;
- this.primData.PathSkew = addPacket.PathSkew;
- this.primData.ProfileBegin = addPacket.ProfileBegin;
- this.primData.ProfileEnd = addPacket.ProfileEnd;
- this.primData.PathCurve = addPacket.PathCurve;
- this.primData.ProfileCurve = addPacket.ProfileCurve;
- this.primData.ProfileHollow = addPacket.ProfileHollow;
- this.primData.PathRadiusOffset = addPacket.PathRadiusOffset;
- this.primData.PathRevolutions = addPacket.PathRevolutions;
- this.primData.PathTaperX = addPacket.PathTaperX;
- this.primData.PathTaperY = addPacket.PathTaperY;
- this.primData.PathTwist = addPacket.PathTwist;
- this.primData.PathTwistBegin =addPacket.PathTwistBegin;
- this.dirtyFlag = true;
- }
-
- public void CreateFromPacket( ObjectAddPacket addPacket, LLUUID agentID, uint localID)
- {
- ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
- objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle;
- objupdate.RegionData.TimeDilation = 64096;
-
- objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
- PrimData PData = new PrimData();
- this.primData = PData;
- objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
- objupdate.ObjectData[0].PSBlock = new byte[0];
- objupdate.ObjectData[0].ExtraParams = new byte[1];
- objupdate.ObjectData[0].MediaURL = new byte[0];
- objupdate.ObjectData[0].NameValue = new byte[0];
- objupdate.ObjectData[0].Text = new byte[0];
- objupdate.ObjectData[0].TextColor = new byte[4];
- objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0,0,0);
- objupdate.ObjectData[0].JointPivot = new LLVector3(0,0,0);
- objupdate.ObjectData[0].Material = 3;
- objupdate.ObjectData[0].UpdateFlags=32+65536+131072+256+4+8+2048+524288+268435456;
- objupdate.ObjectData[0].TextureAnim = new byte[0];
- objupdate.ObjectData[0].Sound = LLUUID.Zero;
- LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
- objupdate.ObjectData[0].TextureEntry = ntex.ToBytes();
- objupdate.ObjectData[0].State = 0;
- objupdate.ObjectData[0].Data = new byte[0];
- PData.OwnerID = objupdate.ObjectData[0].OwnerID = agentID;
- PData.PCode = objupdate.ObjectData[0].PCode = addPacket.ObjectData.PCode;
- PData.PathBegin = objupdate.ObjectData[0].PathBegin = addPacket.ObjectData.PathBegin;
- PData.PathEnd = objupdate.ObjectData[0].PathEnd = addPacket.ObjectData.PathEnd;
- PData.PathScaleX = objupdate.ObjectData[0].PathScaleX = addPacket.ObjectData.PathScaleX;
- PData.PathScaleY = objupdate.ObjectData[0].PathScaleY = addPacket.ObjectData.PathScaleY;
- PData.PathShearX = objupdate.ObjectData[0].PathShearX = addPacket.ObjectData.PathShearX;
- PData.PathShearY = objupdate.ObjectData[0].PathShearY = addPacket.ObjectData.PathShearY;
- PData.PathSkew = objupdate.ObjectData[0].PathSkew = addPacket.ObjectData.PathSkew;
- PData.ProfileBegin = objupdate.ObjectData[0].ProfileBegin = addPacket.ObjectData.ProfileBegin;
- PData.ProfileEnd = objupdate.ObjectData[0].ProfileEnd = addPacket.ObjectData.ProfileEnd;
- PData.Scale = objupdate.ObjectData[0].Scale = addPacket.ObjectData.Scale;
- PData.PathCurve = objupdate.ObjectData[0].PathCurve = addPacket.ObjectData.PathCurve;
- PData.ProfileCurve = objupdate.ObjectData[0].ProfileCurve = addPacket.ObjectData.ProfileCurve;
- PData.ParentID = objupdate.ObjectData[0].ParentID = 0;
- PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow;
-
- PData.PathRadiusOffset = objupdate.ObjectData[0].PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
- PData.PathRevolutions = objupdate.ObjectData[0].PathRevolutions = addPacket.ObjectData.PathRevolutions;
- PData.PathTaperX = objupdate.ObjectData[0].PathTaperX = addPacket.ObjectData.PathTaperX;
- PData.PathTaperY = objupdate.ObjectData[0].PathTaperY = addPacket.ObjectData.PathTaperY;
- PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist;
- PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
-
- //finish off copying rest of shape data
-
- objupdate.ObjectData[0].ID = (uint)(localID);
- objupdate.ObjectData[0].FullID = new LLUUID("edba7151-5857-acc5-b30b-f01efef" + (localID- 702000).ToString("00000"));
- objupdate.ObjectData[0].ObjectData = new byte[60];
- objupdate.ObjectData[0].ObjectData[46] = 128;
- objupdate.ObjectData[0].ObjectData[47] = 63;
- LLVector3 pos1= addPacket.ObjectData.RayEnd;
- //update position
- byte[] pb = pos1.GetBytes();
- Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
-
- this.newPrimFlag = true;
- this.uuid = objupdate.ObjectData[0].FullID;
- this.localid = objupdate.ObjectData[0].ID;
- this.position = pos1;
- this.OurPacket = objupdate;
- }
-
- public void CreateFromStorage(PrimData store)
- {
- //need to clean this up as it shares a lot of code with CreateFromPacket()
- ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
- objupdate.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle;
- objupdate.RegionData.TimeDilation = 64096;
- objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
-
- this.primData = store;
- objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
- objupdate.ObjectData[0].PSBlock = new byte[0];
- objupdate.ObjectData[0].ExtraParams = new byte[1];
- objupdate.ObjectData[0].MediaURL = new byte[0];
- objupdate.ObjectData[0].NameValue = new byte[0];
- objupdate.ObjectData[0].Text = new byte[0];
- objupdate.ObjectData[0].TextColor = new byte[4];
- objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0,0,0);
- objupdate.ObjectData[0].JointPivot = new LLVector3(0,0,0);
- objupdate.ObjectData[0].Material = 3;
- objupdate.ObjectData[0].UpdateFlags=32+65536+131072+256+4+8+2048+524288+268435456;
- objupdate.ObjectData[0].TextureAnim = new byte[0];
- objupdate.ObjectData[0].Sound = LLUUID.Zero;
- LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
- objupdate.ObjectData[0].TextureEntry = ntex.ToBytes();
- objupdate.ObjectData[0].State = 0;
- objupdate.ObjectData[0].Data = new byte[0];
- objupdate.ObjectData[0].OwnerID = this.primData.OwnerID;
- objupdate.ObjectData[0].PCode = this.primData.PCode;
- objupdate.ObjectData[0].PathBegin = this.primData.PathBegin;
- objupdate.ObjectData[0].PathEnd = this.primData.PathEnd;
- objupdate.ObjectData[0].PathScaleX = this.primData.PathScaleX;
- objupdate.ObjectData[0].PathScaleY = this.primData.PathScaleY;
- objupdate.ObjectData[0].PathShearX = this.primData.PathShearX;
- objupdate.ObjectData[0].PathShearY = this.primData.PathShearY;
- objupdate.ObjectData[0].PathSkew = this.primData.PathSkew;
- objupdate.ObjectData[0].ProfileBegin = this.primData.ProfileBegin;
- objupdate.ObjectData[0].ProfileEnd = this.primData.ProfileEnd;
- objupdate.ObjectData[0].Scale = this.primData.Scale;
- objupdate.ObjectData[0].PathCurve = this.primData.PathCurve;
- objupdate.ObjectData[0].ProfileCurve = this.primData.ProfileCurve;
- objupdate.ObjectData[0].ParentID = 0;
- objupdate.ObjectData[0].ProfileHollow = this.primData.ProfileHollow;
- //finish off copying rest of shape data
- objupdate.ObjectData[0].PathRadiusOffset = this.primData.PathRadiusOffset;
- objupdate.ObjectData[0].PathRevolutions = this.primData.PathRevolutions;
- objupdate.ObjectData[0].PathTaperX = this.primData.PathTaperX;
- objupdate.ObjectData[0].PathTaperY = this.primData.PathTaperY;
- objupdate.ObjectData[0].PathTwist = this.primData.PathTwist;
- objupdate.ObjectData[0].PathTwistBegin= this.primData.PathTwistBegin;
-
- objupdate.ObjectData[0].ID = (uint)store.LocalID;
- objupdate.ObjectData[0].FullID = store.FullID;
-
- objupdate.ObjectData[0].ObjectData = new byte[60];
- objupdate.ObjectData[0].ObjectData[46] = 128;
- objupdate.ObjectData[0].ObjectData[47] = 63;
- LLVector3 pos1= store.Position;
- //update position
- byte[] pb = pos1.GetBytes();
- Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
-
- this.uuid = objupdate.ObjectData[0].FullID;
- this.localid = objupdate.ObjectData[0].ID;
- this.position = pos1;
- this.OurPacket = objupdate;
-
- }
- public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock()
- {
- uint ID = this.localid;
- byte[] bytes = new byte[60];
-
- int i = 0;
- ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
- dat.TextureEntry = this.OurPacket.ObjectData[0].TextureEntry;
-
- bytes[i++] = (byte)(ID % 256);
- bytes[i++] = (byte)((ID >> 8) % 256);
- bytes[i++] = (byte)((ID >> 16) % 256);
- bytes[i++] = (byte)((ID >> 24) % 256);
- bytes[i++]= 0;
- bytes[i++]= 0;
-
- LLVector3 lPos;
- if( this._physActor != null && this.physicsEnabled)
- {
- PhysicsVector pPos = this._physActor.Position;
- lPos = new LLVector3( pPos.X, pPos.Y, pPos.Z);
- }
- else
- {
- lPos = this.position;
- }
- byte[] pb = lPos.GetBytes();
- Array.Copy(pb, 0, bytes, i, pb.Length);
- i += 12;
- ushort ac = 32767;
-
- //vel
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
-
- //accel
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
-
- ushort rw, rx,ry,rz;
- rw = (ushort)(32768 * (this.rotation.w+1));
- rx = (ushort)(32768 * (this.rotation.x+1));
- ry = (ushort)(32768 * (this.rotation.y+1));
- rz = (ushort)(32768 * (this.rotation.z+1));
-
- //rot
- bytes[i++] = (byte)(rx % 256);
- bytes[i++] = (byte)((rx >> 8) % 256);
- bytes[i++] = (byte)(ry % 256);
- bytes[i++] = (byte)((ry >> 8) % 256);
- bytes[i++] = (byte)(rz % 256);
- bytes[i++] = (byte)((rz >> 8) % 256);
- bytes[i++] = (byte)(rw % 256);
- bytes[i++] = (byte)((rw >> 8) % 256);
-
- //rotation vel
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
- bytes[i++] = (byte)(ac % 256);
- bytes[i++] = (byte)((ac >> 8) % 256);
-
- dat.Data=bytes;
- return dat;
- }
-
- public override void BackUp()
- {
-
- this.primData.FullID = this.uuid;
- this.primData.LocalID = this.localid;
- this.primData.Position = this.position;
- this.primData.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z , this.rotation.w);
- OpenSim_Main.local_world.localStorage.StorePrim(this.primData);
- }
- }
-
-}