mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 18:55:58 +08:00
W00t! multiple sims!
Misc bugfixes Child agents!!!!!! General sexy stuff
This commit is contained in:
@@ -48,7 +48,7 @@ using OpenSim.Framework.Console;
|
||||
using OpenSim.Physics.Manager;
|
||||
using Nwc.XmlRpc;
|
||||
using OpenSim.Servers;
|
||||
using OpenSim.GenericConfig;
|
||||
using OpenSim.GenericConfig;
|
||||
|
||||
namespace OpenSim
|
||||
{
|
||||
@@ -164,6 +164,18 @@ namespace OpenSim
|
||||
GridServers.AssetServer.SetServerInfo(regionData.AssetURL, regionData.AssetSendKey);
|
||||
IGridServer gridServer = GridServers.GridServer;
|
||||
gridServer.SetServerInfo(regionData.GridURL, regionData.GridSendKey, regionData.GridRecvKey);
|
||||
|
||||
if(!m_sandbox) {
|
||||
if(GridServers.GridServer.RequestConnection(regionData.SimUUID,regionData.IPListenAddr,(uint)regionData.IPListenPort)) {
|
||||
m_console.WriteLine("Main.cs:Startup() - Got a grid connection OK!");
|
||||
} else {
|
||||
m_console.WriteLine("AAAAAAAAAAAAARRRRRRRRRRGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!!!!!");
|
||||
m_console.WriteLine("I LOST MY GRID!!!!!!!!!!!!! AAAAAAAARRRRRRRRGGGGGGGGHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!");
|
||||
Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
GridServers.AssetServer.SetServerInfo((string)((RemoteGridBase)GridServers.GridServer).GridData["asset_url"], (string)((RemoteGridBase)GridServers.GridServer).GridData["asset_sendkey"]);
|
||||
|
||||
LocalWorld.LoadPrimsFromStorage();
|
||||
|
||||
@@ -190,9 +202,11 @@ namespace OpenSim
|
||||
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"]);
|
||||
|
||||
((RemoteGridBase)gridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
|
||||
agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
|
||||
if(requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1")) {
|
||||
agent_data.child=true;
|
||||
}
|
||||
((RemoteGridBase)gridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data);
|
||||
|
||||
return new XmlRpcResponse();
|
||||
});
|
||||
@@ -288,15 +302,52 @@ namespace OpenSim
|
||||
}
|
||||
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, LocalWorld, _packetServer.ClientThreads, AssetCache, GridServers.GridServer, this, InventoryCache, m_sandbox);
|
||||
SimClient newuser = new SimClient(epSender, useCircuit, LocalWorld, _packetServer.ClientThreads, AssetCache, GridServers.GridServer, this, InventoryCache, m_sandbox,((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].child);
|
||||
if ((this.GridServers.UserServer != null) && (user_accounts))
|
||||
{
|
||||
newuser.UserServer = this.GridServers.UserServer;
|
||||
}
|
||||
//OpenSimRoot.Instance.ClientThreads.Add(epSender, newuser);
|
||||
this._packetServer.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser);
|
||||
|
||||
if(!((RemoteGridBase)GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].child) {
|
||||
Hashtable SimParams;
|
||||
ArrayList SendParams;
|
||||
XmlRpcRequest GridReq;
|
||||
XmlRpcResponse GridResp;
|
||||
foreach (Hashtable neighbour in ((RemoteGridBase)this.GridServers.GridServer).neighbours) {
|
||||
m_console.WriteLine("http://" + neighbour["sim_ip"] + ":" + neighbour["sim_port"]);
|
||||
SimParams = new Hashtable();
|
||||
SimParams["session_id"] = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].SessionID.ToString();
|
||||
SimParams["secure_session_id"] = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].SecureSessionID.ToString();
|
||||
SimParams["firstname"] = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].firstname;
|
||||
SimParams["lastname"] = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].lastname;
|
||||
SimParams["agent_id"] = ((RemoteGridBase)this.GridServers.GridServer).agentcircuits[useCircuit.CircuitCode.Code].AgentID.ToString();
|
||||
SimParams["circuit_code"] = (Int32)useCircuit.CircuitCode.Code;
|
||||
SimParams["child_agent"]="1";
|
||||
SendParams = new ArrayList();
|
||||
SendParams.Add(SimParams);
|
||||
|
||||
GridReq = new XmlRpcRequest("expect_user", SendParams);
|
||||
GridResp = GridReq.Send("http://" + neighbour["sim_ip"] + ":" + neighbour["sim_port"], 3000);
|
||||
EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket();
|
||||
enablesimpacket.SimulatorInfo = new EnableSimulatorPacket.SimulatorInfoBlock();
|
||||
enablesimpacket.SimulatorInfo.Handle=Helpers.UIntsToLong((uint)(Convert.ToInt32(neighbour["region_locx"]) * 256), (uint)(Convert.ToInt32(neighbour["region_locy"]) * 256));
|
||||
System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse((string)neighbour["sim_ip"]);
|
||||
byte[] byteIP = neighbourIP.GetAddressBytes();
|
||||
enablesimpacket.SimulatorInfo.IP=(uint)byteIP[3]<<24;
|
||||
enablesimpacket.SimulatorInfo.IP+=(uint)byteIP[2]<<16;
|
||||
enablesimpacket.SimulatorInfo.IP+=(uint)byteIP[1]<<8;
|
||||
enablesimpacket.SimulatorInfo.IP+=(uint)byteIP[0];
|
||||
enablesimpacket.SimulatorInfo.Port=(ushort)Convert.ToInt32(neighbour["sim_port"]);
|
||||
Thread.Sleep(3000);
|
||||
_packetServer.ClientThreads[useCircuit.CircuitCode.Code].OutPacket(enablesimpacket);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{ // invalid client
|
||||
|
||||
@@ -54,6 +54,7 @@ namespace OpenSim
|
||||
public LLUUID AgentID;
|
||||
public LLUUID SessionID;
|
||||
public LLUUID SecureSessionID = LLUUID.Zero;
|
||||
public bool m_child;
|
||||
public uint CircuitCode;
|
||||
public world.Avatar ClientAvatar;
|
||||
private UseCircuitCodePacket cirpack;
|
||||
@@ -94,7 +95,7 @@ namespace OpenSim
|
||||
}
|
||||
}
|
||||
|
||||
public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimNetworkHandler application, InventoryCache inventoryCache, bool sandboxMode)
|
||||
public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimNetworkHandler application, InventoryCache inventoryCache, bool sandboxMode, bool child)
|
||||
{
|
||||
m_world = world;
|
||||
m_clientThreads = clientThreads;
|
||||
@@ -103,6 +104,7 @@ namespace OpenSim
|
||||
m_application = application;
|
||||
m_inventoryCache = inventoryCache;
|
||||
m_sandboxMode = sandboxMode;
|
||||
m_child=child;
|
||||
|
||||
OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request");
|
||||
cirpack = initialcirpack;
|
||||
@@ -228,8 +230,10 @@ namespace OpenSim
|
||||
switch (Pack.Type)
|
||||
{
|
||||
case PacketType.CompleteAgentMovement:
|
||||
ClientAvatar.CompleteMovement(m_world);
|
||||
ClientAvatar.SendInitialPosition();
|
||||
if(!m_child) {
|
||||
ClientAvatar.CompleteMovement(m_world);
|
||||
ClientAvatar.SendInitialPosition();
|
||||
}
|
||||
break;
|
||||
case PacketType.RegionHandshakeReply:
|
||||
m_world.SendLayerData(this);
|
||||
@@ -476,16 +480,18 @@ namespace OpenSim
|
||||
}
|
||||
break;
|
||||
case PacketType.AgentAnimation:
|
||||
AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
|
||||
for (int i = 0; i < AgentAni.AnimationList.Length; i++)
|
||||
{
|
||||
if (AgentAni.AnimationList[i].StartAnim)
|
||||
{
|
||||
ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID;
|
||||
ClientAvatar.anim_seq = 1;
|
||||
ClientAvatar.SendAnimPack();
|
||||
}
|
||||
}
|
||||
if(!m_child) {
|
||||
AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
|
||||
for (int i = 0; i < AgentAni.AnimationList.Length; i++)
|
||||
{
|
||||
if (AgentAni.AnimationList[i].StartAnim)
|
||||
{
|
||||
ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID;
|
||||
ClientAvatar.anim_seq = 1;
|
||||
ClientAvatar.SendAnimPack();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PacketType.ObjectSelect:
|
||||
ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
|
||||
|
||||
@@ -89,7 +89,8 @@ namespace OpenSim.world
|
||||
{
|
||||
System.Text.Encoding _enc = System.Text.Encoding.ASCII;
|
||||
//send a objectupdate packet with information about the clients avatar
|
||||
ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
|
||||
|
||||
ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
|
||||
objupdate.RegionData.RegionHandle = m_regionHandle;
|
||||
objupdate.RegionData.TimeDilation = 64096;
|
||||
objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
|
||||
|
||||
@@ -371,19 +371,22 @@ namespace OpenSim.world
|
||||
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.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z);
|
||||
lock (this.LockPhysicsEngine)
|
||||
{
|
||||
newAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
|
||||
}
|
||||
lock (Entities)
|
||||
{
|
||||
this.Entities.Add(agentClient.AgentID, newAvatar);
|
||||
}
|
||||
lock (Avatars)
|
||||
{
|
||||
this.Avatars.Add(agentClient.AgentID, newAvatar);
|
||||
}
|
||||
if(!agentClient.m_child) {
|
||||
PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z);
|
||||
lock (this.LockPhysicsEngine)
|
||||
{
|
||||
newAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
|
||||
}
|
||||
}
|
||||
lock (Entities)
|
||||
{
|
||||
this.Entities.Add(agentClient.AgentID, newAvatar);
|
||||
}
|
||||
lock (Avatars)
|
||||
{
|
||||
this.Avatars.Add(agentClient.AgentID, newAvatar);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void RemoveViewerAgent(SimClient agentClient)
|
||||
|
||||
Reference in New Issue
Block a user