mirror of
https://github.com/opensim/opensim.git
synced 2026-07-31 05:45:37 +08:00
* Introduced BaseHttpServer (doing nothing at the moment)
* Removed OpenSimRoot dependencies from SimClient and AgentAssetUpload. 2 down, 7 left to go.
This commit is contained in:
@@ -71,6 +71,13 @@ namespace OpenSim
|
||||
private AgentAssetUpload UploadAssets;
|
||||
private LLUUID newAssetFolder = LLUUID.Zero;
|
||||
private bool debug = false;
|
||||
private World m_world;
|
||||
private Dictionary<uint, SimClient> m_clientThreads;
|
||||
private AssetCache m_assetCache;
|
||||
private IGridServer m_gridServer;
|
||||
private OpenSimApplication m_application;
|
||||
private InventoryCache m_inventoryCache;
|
||||
private bool m_sandboxMode;
|
||||
|
||||
private void ack_pack(Packet Pack)
|
||||
{
|
||||
@@ -105,15 +112,15 @@ namespace OpenSim
|
||||
switch (Pack.Type)
|
||||
{
|
||||
case PacketType.CompleteAgentMovement:
|
||||
ClientAvatar.CompleteMovement(OpenSimRoot.Instance.LocalWorld);
|
||||
ClientAvatar.CompleteMovement(m_world);
|
||||
ClientAvatar.SendInitialPosition();
|
||||
break;
|
||||
case PacketType.RegionHandshakeReply:
|
||||
OpenSimRoot.Instance.LocalWorld.SendLayerData(this);
|
||||
m_world.SendLayerData(this);
|
||||
break;
|
||||
case PacketType.AgentWearablesRequest:
|
||||
ClientAvatar.SendInitialAppearance();
|
||||
foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
|
||||
foreach (SimClient client in m_clientThreads.Values)
|
||||
{
|
||||
if (client.AgentID != this.AgentID)
|
||||
{
|
||||
@@ -122,7 +129,7 @@ namespace OpenSim
|
||||
client.ClientAvatar.SendAppearanceToOtherAgent(this);
|
||||
}
|
||||
}
|
||||
OpenSimRoot.Instance.LocalWorld.GetInitialPrims(this);
|
||||
m_world.GetInitialPrims(this);
|
||||
break;
|
||||
case PacketType.AgentIsNowWearing:
|
||||
AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack;
|
||||
@@ -134,7 +141,7 @@ namespace OpenSim
|
||||
this.ClientAvatar.SetAppearance(appear);
|
||||
break;
|
||||
case PacketType.ObjectAdd:
|
||||
OpenSimRoot.Instance.LocalWorld.AddNewPrim((ObjectAddPacket)Pack, this);
|
||||
m_world.AddNewPrim((ObjectAddPacket)Pack, this);
|
||||
break;
|
||||
case PacketType.ObjectLink:
|
||||
OpenSim.Framework.Console.MainConsole.Instance.WriteLine(Pack.ToString());
|
||||
@@ -146,7 +153,7 @@ namespace OpenSim
|
||||
ObjectShapePacket shape = (ObjectShapePacket)Pack;
|
||||
for (int i = 0; i < shape.ObjectData.Length; i++)
|
||||
{
|
||||
foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
|
||||
foreach (Entity ent in m_world.Entities.Values)
|
||||
{
|
||||
if (ent.localid == shape.ObjectData[i].ObjectLocalID)
|
||||
{
|
||||
@@ -163,7 +170,7 @@ namespace OpenSim
|
||||
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)
|
||||
foreach (Entity ent in m_world.Entities.Values)
|
||||
{
|
||||
if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
|
||||
{
|
||||
@@ -177,7 +184,7 @@ namespace OpenSim
|
||||
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)
|
||||
foreach (Entity ent in m_world.Entities.Values)
|
||||
{
|
||||
if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
|
||||
{
|
||||
@@ -190,7 +197,7 @@ namespace OpenSim
|
||||
{
|
||||
|
||||
libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12);
|
||||
foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
|
||||
foreach (Entity ent in m_world.Entities.Values)
|
||||
{
|
||||
if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID)
|
||||
{
|
||||
@@ -204,13 +211,13 @@ namespace OpenSim
|
||||
RequestImagePacket imageRequest = (RequestImagePacket)Pack;
|
||||
for (int i = 0; i < imageRequest.RequestImage.Length; i++)
|
||||
{
|
||||
OpenSimRoot.Instance.AssetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
|
||||
m_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);
|
||||
m_assetCache.AddAssetRequest(this, transfer);
|
||||
break;
|
||||
case PacketType.AgentUpdate:
|
||||
ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack);
|
||||
@@ -230,18 +237,18 @@ namespace OpenSim
|
||||
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)
|
||||
foreach (SimClient client in m_clientThreads.Values)
|
||||
{
|
||||
client.OutPacket(kill);
|
||||
}
|
||||
OpenSimRoot.Instance.GridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode);
|
||||
lock (OpenSimRoot.Instance.LocalWorld.Entities)
|
||||
m_gridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode);
|
||||
lock (m_world.Entities)
|
||||
{
|
||||
OpenSimRoot.Instance.LocalWorld.Entities.Remove(this.AgentID);
|
||||
m_world.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);
|
||||
m_clientThreads.Remove(this.CircuitCode); //this.userEP);
|
||||
m_application.RemoveClientCircuit(this.CircuitCode);
|
||||
this.ClientThread.Abort();
|
||||
break;
|
||||
case PacketType.ChatFromViewer:
|
||||
@@ -258,7 +265,7 @@ namespace OpenSim
|
||||
reply.ChatData.FromName = _enc.GetBytes(this.ClientAvatar.firstname + " " + this.ClientAvatar.lastname + "\0");
|
||||
reply.ChatData.OwnerID = this.AgentID;
|
||||
reply.ChatData.SourceID = this.AgentID;
|
||||
foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
|
||||
foreach (SimClient client in m_clientThreads.Values)
|
||||
{
|
||||
client.OutPacket(reply);
|
||||
}
|
||||
@@ -267,7 +274,7 @@ namespace OpenSim
|
||||
ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
|
||||
for (int i = 0; i < imagePack.ObjectData.Length; i++)
|
||||
{
|
||||
foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
|
||||
foreach (Entity ent in m_world.Entities.Values)
|
||||
{
|
||||
if (ent.localid == imagePack.ObjectData[i].ObjectLocalID)
|
||||
{
|
||||
@@ -278,7 +285,7 @@ namespace OpenSim
|
||||
break;
|
||||
case PacketType.ObjectFlagUpdate:
|
||||
ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack;
|
||||
foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values)
|
||||
foreach (Entity ent in m_world.Entities.Values)
|
||||
{
|
||||
if (ent.localid == flags.AgentData.ObjectLocalID)
|
||||
{
|
||||
@@ -306,7 +313,7 @@ namespace OpenSim
|
||||
break;
|
||||
case PacketType.CreateInventoryFolder:
|
||||
CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack;
|
||||
OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type);
|
||||
m_inventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type);
|
||||
Console.WriteLine(Pack.ToString());
|
||||
break;
|
||||
case PacketType.CreateInventoryItem:
|
||||
@@ -320,11 +327,11 @@ namespace OpenSim
|
||||
case PacketType.FetchInventory:
|
||||
//Console.WriteLine("fetch item packet");
|
||||
FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack;
|
||||
OpenSimRoot.Instance.InventoryCache.FetchInventory(this, FetchInventory);
|
||||
m_inventoryCache.FetchInventory(this, FetchInventory);
|
||||
break;
|
||||
case PacketType.FetchInventoryDescendents:
|
||||
FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack;
|
||||
OpenSimRoot.Instance.InventoryCache.FetchInventoryDescendents(this, Fetch);
|
||||
m_inventoryCache.FetchInventoryDescendents(this, Fetch);
|
||||
break;
|
||||
case PacketType.UpdateInventoryItem:
|
||||
UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack;
|
||||
@@ -332,17 +339,17 @@ namespace OpenSim
|
||||
{
|
||||
if (update.InventoryData[i].TransactionID != LLUUID.Zero)
|
||||
{
|
||||
AssetBase asset = OpenSimRoot.Instance.AssetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID));
|
||||
AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID));
|
||||
if (asset != null)
|
||||
{
|
||||
OpenSimRoot.Instance.InventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
|
||||
m_inventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
|
||||
}
|
||||
else
|
||||
{
|
||||
asset = this.UploadAssets.AddUploadToAssetCache(update.InventoryData[i].TransactionID);
|
||||
if (asset != null)
|
||||
{
|
||||
OpenSimRoot.Instance.InventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
|
||||
m_inventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -350,7 +357,7 @@ namespace OpenSim
|
||||
break;
|
||||
case PacketType.ViewerEffect:
|
||||
ViewerEffectPacket viewer = (ViewerEffectPacket)Pack;
|
||||
foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values)
|
||||
foreach (SimClient client in m_clientThreads.Values)
|
||||
{
|
||||
if (client.AgentID != this.AgentID)
|
||||
{
|
||||
@@ -362,7 +369,7 @@ namespace OpenSim
|
||||
break;
|
||||
case PacketType.DeRezObject:
|
||||
//OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Received DeRezObject packet");
|
||||
OpenSimRoot.Instance.LocalWorld.DeRezObject((DeRezObjectPacket)Pack, this);
|
||||
m_world.DeRezObject((DeRezObjectPacket)Pack, this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -501,11 +508,11 @@ namespace OpenSim
|
||||
if (Pack.Header.Zerocoded)
|
||||
{
|
||||
int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
|
||||
OpenSimRoot.Instance.Application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
|
||||
m_application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
|
||||
}
|
||||
else
|
||||
{
|
||||
OpenSimRoot.Instance.Application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
|
||||
m_application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -569,14 +576,22 @@ namespace OpenSim
|
||||
this.PacketQueue.Enqueue(item);
|
||||
}
|
||||
|
||||
public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack)
|
||||
public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimApplication application, InventoryCache inventoryCache, bool sandboxMode)
|
||||
{
|
||||
m_world = world;
|
||||
m_clientThreads = clientThreads;
|
||||
m_assetCache = assetCache;
|
||||
m_gridServer = gridServer;
|
||||
m_application = application;
|
||||
m_inventoryCache = inventoryCache;
|
||||
m_sandboxMode = sandboxMode;
|
||||
|
||||
OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request");
|
||||
cirpack = initialcirpack;
|
||||
userEP = remoteEP;
|
||||
PacketQueue = new BlockingQueue<QueItem>();
|
||||
|
||||
this.UploadAssets = new AgentAssetUpload(this);
|
||||
this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache );
|
||||
AckTimer = new System.Timers.Timer(500);
|
||||
AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed);
|
||||
AckTimer.Start();
|
||||
@@ -608,14 +623,16 @@ namespace OpenSim
|
||||
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];
|
||||
|
||||
m_world.AddViewerAgent(this);
|
||||
world.Entity tempent = m_world.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);
|
||||
AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
|
||||
if (!sessionInfo.Authorised)
|
||||
{
|
||||
//session/circuit not authorised
|
||||
@@ -638,23 +655,23 @@ namespace OpenSim
|
||||
}
|
||||
|
||||
// Create Inventory, currently only works for sandbox mode
|
||||
if (OpenSimRoot.Instance.Sandbox)
|
||||
if (m_sandboxMode)
|
||||
{
|
||||
if (sessionInfo.LoginInfo.InventoryFolder != null)
|
||||
{
|
||||
this.CreateInventory(sessionInfo.LoginInfo.InventoryFolder);
|
||||
if (sessionInfo.LoginInfo.BaseFolder != null)
|
||||
{
|
||||
OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder);
|
||||
m_inventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder);
|
||||
this.newAssetFolder = sessionInfo.LoginInfo.BaseFolder;
|
||||
AssetBase[] inventorySet = OpenSimRoot.Instance.AssetCache.CreateNewInventorySet(this.AgentID);
|
||||
AssetBase[] inventorySet = m_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]);
|
||||
m_inventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -670,8 +687,8 @@ namespace OpenSim
|
||||
{
|
||||
AgentInventory inventory = new AgentInventory();
|
||||
inventory.AgentID = this.AgentID;
|
||||
OpenSimRoot.Instance.InventoryCache.AddNewAgentsInventory(inventory);
|
||||
OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, baseFolder);
|
||||
m_inventoryCache.AddNewAgentsInventory(inventory);
|
||||
m_inventoryCache.CreateNewInventoryFolder(this, baseFolder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user