* HttpRequestSignature uses regular expressions for the path now
* Added a simplified HttpListener.AddHandler() overload * Lots of improvements in ExtensionLoader, simplified interface * Updated Simian to latest ExtensionLoader git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2316 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
@@ -6,18 +6,18 @@ using OpenMetaverse.StructuredData;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class AccountManager : IExtension, IAccountProvider, IPersistable
|
||||
public class AccountManager : IExtension<Simian>, IAccountProvider, IPersistable
|
||||
{
|
||||
Simian server;
|
||||
DoubleDictionary<string, UUID, Agent> accounts = new DoubleDictionary<string, UUID, Agent>();
|
||||
|
||||
public AccountManager(Simian server)
|
||||
public AccountManager()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
|
||||
@@ -8,28 +8,29 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class AssetManager : IExtension, IAssetProvider
|
||||
public class AssetManager : IExtension<Simian>, IAssetProvider
|
||||
{
|
||||
public const string UPLOAD_DIR = "uploadedAssets";
|
||||
|
||||
Simian Server;
|
||||
Simian server;
|
||||
Dictionary<UUID, Asset> AssetStore = new Dictionary<UUID, Asset>();
|
||||
Dictionary<ulong, Asset> CurrentUploads = new Dictionary<ulong, Asset>();
|
||||
string UploadDir;
|
||||
|
||||
public AssetManager(Simian server)
|
||||
public AssetManager()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
UploadDir = Path.Combine(Server.DataDir, UPLOAD_DIR);
|
||||
this.server = server;
|
||||
|
||||
UploadDir = Path.Combine(server.DataDir, UPLOAD_DIR);
|
||||
|
||||
// Try to create the data directories if they don't already exist
|
||||
if (!Directory.Exists(Server.DataDir))
|
||||
if (!Directory.Exists(server.DataDir))
|
||||
{
|
||||
try { Directory.CreateDirectory(Server.DataDir); }
|
||||
try { Directory.CreateDirectory(server.DataDir); }
|
||||
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Warning, ex); }
|
||||
}
|
||||
if (!Directory.Exists(UploadDir))
|
||||
@@ -38,13 +39,13 @@ namespace Simian.Extensions
|
||||
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Warning, ex); }
|
||||
}
|
||||
|
||||
LoadAssets(Server.DataDir);
|
||||
LoadAssets(server.DataDir);
|
||||
LoadAssets(UploadDir);
|
||||
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AssetUploadRequest, new PacketCallback(AssetUploadRequestHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.SendXferPacket, new PacketCallback(SendXferPacketHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AbortXfer, new PacketCallback(AbortXferHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.TransferRequest, new PacketCallback(TransferRequestHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AssetUploadRequest, new PacketCallback(AssetUploadRequestHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.SendXferPacket, new PacketCallback(SendXferPacketHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AbortXfer, new PacketCallback(AbortXferHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.TransferRequest, new PacketCallback(TransferRequestHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -122,7 +123,7 @@ namespace Simian.Extensions
|
||||
complete.AssetBlock.Success = true;
|
||||
complete.AssetBlock.Type = request.AssetBlock.Type;
|
||||
complete.AssetBlock.UUID = assetID;
|
||||
Server.UDP.SendPacket(agent.AgentID, complete, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, complete, PacketCategory.Inventory);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -151,7 +152,7 @@ namespace Simian.Extensions
|
||||
lock (CurrentUploads)
|
||||
CurrentUploads[xfer.XferID.ID] = asset;
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, xfer, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, xfer, PacketCategory.Inventory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +181,7 @@ namespace Simian.Extensions
|
||||
ConfirmXferPacketPacket confirm = new ConfirmXferPacketPacket();
|
||||
confirm.XferID.ID = xfer.XferID.ID;
|
||||
confirm.XferID.Packet = xfer.XferID.Packet;
|
||||
Server.UDP.SendPacket(agent.AgentID, confirm, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, confirm, PacketCategory.Asset);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -191,7 +192,7 @@ namespace Simian.Extensions
|
||||
ConfirmXferPacketPacket confirm = new ConfirmXferPacketPacket();
|
||||
confirm.XferID.ID = xfer.XferID.ID;
|
||||
confirm.XferID.Packet = xfer.XferID.Packet;
|
||||
Server.UDP.SendPacket(agent.AgentID, confirm, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, confirm, PacketCategory.Asset);
|
||||
|
||||
if ((xfer.XferID.Packet & (uint)0x80000000) != 0)
|
||||
{
|
||||
@@ -207,7 +208,7 @@ namespace Simian.Extensions
|
||||
complete.AssetBlock.Success = true;
|
||||
complete.AssetBlock.Type = (sbyte)asset.AssetType;
|
||||
complete.AssetBlock.UUID = asset.AssetID;
|
||||
Server.UDP.SendPacket(agent.AgentID, complete, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, complete, PacketCategory.Asset);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -283,7 +284,7 @@ namespace Simian.Extensions
|
||||
response.TransferInfo.Status = (int)StatusCode.OK;
|
||||
response.TransferInfo.TargetType = (int)TargetType.Unknown; // Doesn't seem to be used by the client
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, response, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, response, PacketCategory.Asset);
|
||||
|
||||
// Transfer system does not wait for ACKs, just sends all of the
|
||||
// packets for this transfer out
|
||||
@@ -307,7 +308,7 @@ namespace Simian.Extensions
|
||||
else
|
||||
transfer.TransferData.Status = (int)StatusCode.OK;
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, transfer, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, transfer, PacketCategory.Asset);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -327,7 +328,7 @@ namespace Simian.Extensions
|
||||
response.TransferInfo.Status = (int)StatusCode.UnknownSource;
|
||||
response.TransferInfo.TargetType = (int)TargetType.Unknown;
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, response, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, response, PacketCategory.Asset);
|
||||
}
|
||||
}
|
||||
else if (source == SourceType.SimEstate)
|
||||
|
||||
@@ -4,17 +4,17 @@ using OpenMetaverse;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class AuthFreeForAll : IExtension, IAuthenticationProvider
|
||||
public class AuthFreeForAll : IExtension<Simian>, IAuthenticationProvider
|
||||
{
|
||||
Simian server;
|
||||
|
||||
public AuthFreeForAll(Simian server)
|
||||
public AuthFreeForAll()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
|
||||
@@ -8,28 +8,29 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
class AvatarManager : IExtension, IAvatarProvider
|
||||
class AvatarManager : IExtension<Simian>, IAvatarProvider
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
int currentWearablesSerialNum = -1;
|
||||
int currentAnimSequenceNum = 0;
|
||||
|
||||
public AvatarManager(Simian server)
|
||||
public AvatarManager()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AvatarPropertiesRequest, new PacketCallback(AvatarPropertiesRequestHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AgentWearablesRequest, new PacketCallback(AgentWearablesRequestHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AgentIsNowWearing, new PacketCallback(AgentIsNowWearingHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AgentSetAppearance, new PacketCallback(AgentSetAppearanceHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AgentCachedTexture, new PacketCallback(AgentCachedTextureHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.AgentAnimation, new PacketCallback(AgentAnimationHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.SoundTrigger, new PacketCallback(SoundTriggerHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ViewerEffect, new PacketCallback(ViewerEffectHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.UUIDNameRequest, new PacketCallback(UUIDNameRequestHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.AvatarPropertiesRequest, new PacketCallback(AvatarPropertiesRequestHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentWearablesRequest, new PacketCallback(AgentWearablesRequestHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentIsNowWearing, new PacketCallback(AgentIsNowWearingHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentSetAppearance, new PacketCallback(AgentSetAppearanceHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentCachedTexture, new PacketCallback(AgentCachedTextureHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentAnimation, new PacketCallback(AgentAnimationHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.SoundTrigger, new PacketCallback(SoundTriggerHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ViewerEffect, new PacketCallback(ViewerEffectHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.UUIDNameRequest, new PacketCallback(UUIDNameRequestHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -71,13 +72,13 @@ namespace Simian.Extensions
|
||||
sendAnim.AnimationList[i].AnimSequenceID = sequenceNums[i];
|
||||
}
|
||||
|
||||
Server.UDP.BroadcastPacket(sendAnim, PacketCategory.State);
|
||||
server.UDP.BroadcastPacket(sendAnim, PacketCategory.State);
|
||||
}
|
||||
|
||||
public void TriggerSound(Agent agent, UUID soundID, float gain)
|
||||
{
|
||||
SoundTriggerPacket sound = new SoundTriggerPacket();
|
||||
sound.SoundData.Handle = Server.RegionHandle;
|
||||
sound.SoundData.Handle = server.RegionHandle;
|
||||
sound.SoundData.ObjectID = agent.AgentID;
|
||||
sound.SoundData.ParentID = agent.AgentID;
|
||||
sound.SoundData.OwnerID = agent.AgentID;
|
||||
@@ -85,7 +86,7 @@ namespace Simian.Extensions
|
||||
sound.SoundData.SoundID = soundID;
|
||||
sound.SoundData.Gain = gain;
|
||||
|
||||
Server.UDP.BroadcastPacket(sound, PacketCategory.State);
|
||||
server.UDP.BroadcastPacket(sound, PacketCategory.State);
|
||||
}
|
||||
|
||||
void AgentAnimationHandler(Packet packet, Agent agent)
|
||||
@@ -120,7 +121,7 @@ namespace Simian.Extensions
|
||||
effect.AgentData.AgentID = UUID.Zero;
|
||||
effect.AgentData.SessionID = UUID.Zero;
|
||||
|
||||
Server.UDP.BroadcastPacket(effect, PacketCategory.State);
|
||||
server.UDP.BroadcastPacket(effect, PacketCategory.State);
|
||||
}
|
||||
|
||||
void AvatarPropertiesRequestHandler(Packet packet, Agent agent)
|
||||
@@ -128,7 +129,7 @@ namespace Simian.Extensions
|
||||
AvatarPropertiesRequestPacket request = (AvatarPropertiesRequestPacket)packet;
|
||||
|
||||
Agent foundAgent;
|
||||
if (Server.Agents.TryGetValue(request.AgentData.AvatarID, out foundAgent))
|
||||
if (server.Agents.TryGetValue(request.AgentData.AvatarID, out foundAgent))
|
||||
{
|
||||
AvatarPropertiesReplyPacket reply = new AvatarPropertiesReplyPacket();
|
||||
reply.AgentData.AgentID = agent.AgentID;
|
||||
@@ -143,7 +144,7 @@ namespace Simian.Extensions
|
||||
reply.PropertiesData.PartnerID = foundAgent.PartnerID;
|
||||
reply.PropertiesData.ProfileURL = Utils.StringToBytes(foundAgent.ProfileURL);
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Transaction);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -155,7 +156,7 @@ namespace Simian.Extensions
|
||||
bool TryAddWearable(UUID agentID, Dictionary<WearableType, InventoryItem> wearables, WearableType type, UUID itemID)
|
||||
{
|
||||
InventoryObject obj;
|
||||
if (itemID != UUID.Zero && Server.Inventory.TryGetInventory(agentID, itemID, out obj) &&
|
||||
if (itemID != UUID.Zero && server.Inventory.TryGetInventory(agentID, itemID, out obj) &&
|
||||
obj is InventoryItem)
|
||||
{
|
||||
wearables.Add(type, (InventoryItem)obj);
|
||||
@@ -212,7 +213,7 @@ namespace Simian.Extensions
|
||||
|
||||
Logger.DebugLog(String.Format("Sending info about {0} wearables", wearables.Count));
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, update, PacketCategory.Asset);
|
||||
server.UDP.SendPacket(agent.AgentID, update, PacketCategory.Asset);
|
||||
}
|
||||
|
||||
void AgentWearablesRequestHandler(Packet packet, Agent agent)
|
||||
@@ -304,7 +305,7 @@ namespace Simian.Extensions
|
||||
for (int i = 0; i < set.VisualParam.Length; i++)
|
||||
visualParams[i] = set.VisualParam[i].ParamValue;
|
||||
|
||||
Server.Scene.AvatarAppearance(this, agent, textureEntry, visualParams);
|
||||
server.Scene.AvatarAppearance(this, agent, textureEntry, visualParams);
|
||||
}
|
||||
|
||||
void AgentCachedTextureHandler(Packet packet, Agent agent)
|
||||
@@ -328,7 +329,7 @@ namespace Simian.Extensions
|
||||
|
||||
response.Header.Zerocoded = true;
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, response, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(agent.AgentID, response, PacketCategory.Transaction);
|
||||
}
|
||||
|
||||
void SoundTriggerHandler(Packet packet, Agent agent)
|
||||
@@ -352,7 +353,7 @@ namespace Simian.Extensions
|
||||
reply.UUIDNameBlock[i].ID = id;
|
||||
|
||||
Agent foundAgent;
|
||||
if (Server.Agents.TryGetValue(id, out foundAgent))
|
||||
if (server.Agents.TryGetValue(id, out foundAgent))
|
||||
{
|
||||
reply.UUIDNameBlock[i].FirstName = Utils.StringToBytes(foundAgent.FirstName);
|
||||
reply.UUIDNameBlock[i].LastName = Utils.StringToBytes(foundAgent.LastName);
|
||||
@@ -364,7 +365,7 @@ namespace Simian.Extensions
|
||||
}
|
||||
}
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Transaction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,18 +8,19 @@ using System.Threading;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class CoarseLocationUpdates : IExtension
|
||||
public class CoarseLocationUpdates : IExtension<Simian>
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
Timer CoarseLocationTimer;
|
||||
|
||||
public CoarseLocationUpdates(Simian server)
|
||||
public CoarseLocationUpdates()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
if (CoarseLocationTimer != null) CoarseLocationTimer = null;
|
||||
CoarseLocationTimer = new Timer(new TimerCallback(CoarseLocationTimer_Elapsed));
|
||||
CoarseLocationTimer.Change(1000, 1000);
|
||||
@@ -32,9 +33,9 @@ namespace Simian.Extensions
|
||||
|
||||
void CoarseLocationTimer_Elapsed(object sender)
|
||||
{
|
||||
lock (Server.Agents)
|
||||
lock (server.Agents)
|
||||
{
|
||||
foreach (Agent recipient in Server.Agents.Values)
|
||||
foreach (Agent recipient in server.Agents.Values)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
@@ -42,8 +43,8 @@ namespace Simian.Extensions
|
||||
update.Index.Prey = -1;
|
||||
update.Index.You = 0;
|
||||
|
||||
update.AgentData = new CoarseLocationUpdatePacket.AgentDataBlock[Server.Agents.Count];
|
||||
update.Location = new CoarseLocationUpdatePacket.LocationBlock[Server.Agents.Count];
|
||||
update.AgentData = new CoarseLocationUpdatePacket.AgentDataBlock[server.Agents.Count];
|
||||
update.Location = new CoarseLocationUpdatePacket.LocationBlock[server.Agents.Count];
|
||||
|
||||
// Fill in this avatar
|
||||
update.AgentData[0] = new CoarseLocationUpdatePacket.AgentDataBlock();
|
||||
@@ -54,7 +55,7 @@ namespace Simian.Extensions
|
||||
update.Location[0].Z = (byte)((int)recipient.Avatar.Position.Z / 4);
|
||||
++i;
|
||||
|
||||
foreach (Agent agent in Server.Agents.Values)
|
||||
foreach (Agent agent in server.Agents.Values)
|
||||
{
|
||||
if (agent != recipient)
|
||||
{
|
||||
@@ -68,7 +69,7 @@ namespace Simian.Extensions
|
||||
}
|
||||
}
|
||||
|
||||
Server.UDP.SendPacket(recipient.AgentID, update, PacketCategory.State);
|
||||
server.UDP.SendPacket(recipient.AgentID, update, PacketCategory.State);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,17 +5,18 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class ConnectionManagement : IExtension
|
||||
public class ConnectionManagement : IExtension<Simian>
|
||||
{
|
||||
Simian server;
|
||||
|
||||
public ConnectionManagement(Simian server)
|
||||
public ConnectionManagement()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.UseCircuitCode, new PacketCallback(UseCircuitCodeHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.StartPingCheck, new PacketCallback(StartPingCheckHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.LogoutRequest, new PacketCallback(LogoutRequestHandler));
|
||||
|
||||
@@ -6,18 +6,20 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class FriendManager : IExtension
|
||||
public class FriendManager : IExtension<Simian>
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
|
||||
public FriendManager(Simian server)
|
||||
public FriendManager()
|
||||
{
|
||||
Server = server;
|
||||
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ImprovedInstantMessage, new PacketCallback(ImprovedInstantMessageHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.ImprovedInstantMessage, new PacketCallback(ImprovedInstantMessageHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -31,9 +33,9 @@ namespace Simian.Extensions
|
||||
|
||||
if (dialog == InstantMessageDialog.FriendshipOffered || dialog == InstantMessageDialog.FriendshipAccepted || dialog == InstantMessageDialog.FriendshipDeclined)
|
||||
{
|
||||
lock (Server.Agents)
|
||||
lock (server.Agents)
|
||||
{
|
||||
foreach (Agent recipient in Server.Agents.Values)
|
||||
foreach (Agent recipient in server.Agents.Values)
|
||||
{
|
||||
if (recipient.AgentID == im.MessageBlock.ToAgentID)
|
||||
{
|
||||
@@ -53,12 +55,12 @@ namespace Simian.Extensions
|
||||
|
||||
sendIM.AgentData.AgentID = agent.AgentID;
|
||||
|
||||
Server.UDP.SendPacket(recipient.AgentID, sendIM, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(recipient.AgentID, sendIM, PacketCategory.Transaction);
|
||||
|
||||
if (dialog == InstantMessageDialog.FriendshipAccepted)
|
||||
{
|
||||
bool receiverOnline = Server.Agents.ContainsKey(agent.AgentID);
|
||||
bool senderOnline = Server.Agents.ContainsKey(recipient.AgentID);
|
||||
bool receiverOnline = server.Agents.ContainsKey(agent.AgentID);
|
||||
bool senderOnline = server.Agents.ContainsKey(recipient.AgentID);
|
||||
|
||||
if (receiverOnline)
|
||||
{
|
||||
@@ -68,7 +70,7 @@ namespace Simian.Extensions
|
||||
notify.AgentBlock = new OnlineNotificationPacket.AgentBlockBlock[0];
|
||||
notify.AgentBlock[0] = new OnlineNotificationPacket.AgentBlockBlock();
|
||||
notify.AgentBlock[0].AgentID = agent.AgentID;
|
||||
Server.UDP.SendPacket(recipient.AgentID, notify, PacketCategory.State);
|
||||
server.UDP.SendPacket(recipient.AgentID, notify, PacketCategory.State);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -76,7 +78,7 @@ namespace Simian.Extensions
|
||||
notify.AgentBlock = new OfflineNotificationPacket.AgentBlockBlock[0];
|
||||
notify.AgentBlock[0] = new OfflineNotificationPacket.AgentBlockBlock();
|
||||
notify.AgentBlock[0].AgentID = agent.AgentID;
|
||||
Server.UDP.SendPacket(recipient.AgentID, notify, PacketCategory.State);
|
||||
server.UDP.SendPacket(recipient.AgentID, notify, PacketCategory.State);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +90,7 @@ namespace Simian.Extensions
|
||||
notify.AgentBlock = new OnlineNotificationPacket.AgentBlockBlock[0];
|
||||
notify.AgentBlock[0] = new OnlineNotificationPacket.AgentBlockBlock();
|
||||
notify.AgentBlock[0].AgentID = recipient.AgentID;
|
||||
Server.UDP.SendPacket(agent.AgentID, notify, PacketCategory.State);
|
||||
server.UDP.SendPacket(agent.AgentID, notify, PacketCategory.State);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -96,7 +98,7 @@ namespace Simian.Extensions
|
||||
notify.AgentBlock = new OfflineNotificationPacket.AgentBlockBlock[0];
|
||||
notify.AgentBlock[0] = new OfflineNotificationPacket.AgentBlockBlock();
|
||||
notify.AgentBlock[0].AgentID = recipient.AgentID;
|
||||
Server.UDP.SendPacket(agent.AgentID, notify, PacketCategory.State);
|
||||
server.UDP.SendPacket(agent.AgentID, notify, PacketCategory.State);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -81,20 +81,21 @@ namespace Simian.Extensions
|
||||
}
|
||||
}
|
||||
|
||||
public class ImageDelivery : IExtension
|
||||
public class ImageDelivery : IExtension<Simian>
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
Dictionary<UUID, ImageDownload> CurrentDownloads = new Dictionary<UUID, ImageDownload>();
|
||||
BlockingQueue<ImageDownload> CurrentDownloadQueue = new BlockingQueue<ImageDownload>();
|
||||
|
||||
public ImageDelivery(Simian server)
|
||||
public ImageDelivery()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.RequestImage, new PacketCallback(RequestImageHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.RequestImage, new PacketCallback(RequestImageHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -150,7 +151,7 @@ namespace Simian.Extensions
|
||||
|
||||
// New download, check if we have this image
|
||||
Asset asset;
|
||||
if (Server.Assets.TryGetAsset(block.Image, out asset) && asset is AssetTexture)
|
||||
if (server.Assets.TryGetAsset(block.Image, out asset) && asset is AssetTexture)
|
||||
{
|
||||
download = new ImageDownload((AssetTexture)asset, block.DiscardLevel, block.DownloadPriority,
|
||||
(int)block.Packet);
|
||||
@@ -174,7 +175,7 @@ namespace Simian.Extensions
|
||||
data.ImageData.Data = new byte[imageDataSize];
|
||||
Buffer.BlockCopy(download.Texture.AssetData, 0, data.ImageData.Data, 0, imageDataSize);
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, data, PacketCategory.Texture);
|
||||
server.UDP.SendPacket(agent.AgentID, data, PacketCategory.Texture);
|
||||
|
||||
// Check if ImagePacket packets need to be sent to complete this transfer
|
||||
if (download.CurrentPacket <= download.StopPacket)
|
||||
@@ -204,7 +205,7 @@ namespace Simian.Extensions
|
||||
Buffer.BlockCopy(download.Texture.AssetData, download.CurrentBytePosition(),
|
||||
transfer.ImageData.Data, 0, imagePacketSize);
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, transfer, PacketCategory.Texture);
|
||||
server.UDP.SendPacket(agent.AgentID, transfer, PacketCategory.Texture);
|
||||
|
||||
++download.CurrentPacket;
|
||||
}
|
||||
@@ -225,7 +226,7 @@ namespace Simian.Extensions
|
||||
|
||||
ImageNotInDatabasePacket notfound = new ImageNotInDatabasePacket();
|
||||
notfound.ImageID.ID = block.Image;
|
||||
Server.UDP.SendPacket(agent.AgentID, notfound, PacketCategory.Texture);
|
||||
server.UDP.SendPacket(agent.AgentID, notfound, PacketCategory.Texture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,9 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class InventoryManager : IExtension, IInventoryProvider, IPersistable
|
||||
public class InventoryManager : IExtension<Simian>, IInventoryProvider, IPersistable
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
/// <summary>Dictionary of inventories for each agent. Each inventory
|
||||
/// is also a dictionary itself</summary>
|
||||
Dictionary<UUID, Dictionary<UUID, InventoryObject>> Inventory =
|
||||
@@ -17,22 +17,23 @@ namespace Simian.Extensions
|
||||
/// <summary>Global shared inventory for all agent</summary>
|
||||
Dictionary<UUID, InventoryObject> Library = new Dictionary<UUID, InventoryObject>();
|
||||
|
||||
public InventoryManager(Simian server)
|
||||
public InventoryManager()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.CreateInventoryItem, new PacketCallback(CreateInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.CreateInventoryFolder, new PacketCallback(CreateInventoryFolderHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.UpdateInventoryItem, new PacketCallback(UpdateInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.FetchInventoryDescendents, new PacketCallback(FetchInventoryDescendentsHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.FetchInventory, new PacketCallback(FetchInventoryHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.CopyInventoryItem, new PacketCallback(CopyInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MoveInventoryItem, new PacketCallback(MoveInventoryItemHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MoveInventoryFolder, new PacketCallback(MoveInventoryFolderHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.PurgeInventoryDescendents, new PacketCallback(PurgeInventoryDescendentsHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.CreateInventoryItem, new PacketCallback(CreateInventoryItemHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.CreateInventoryFolder, new PacketCallback(CreateInventoryFolderHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.UpdateInventoryItem, new PacketCallback(UpdateInventoryItemHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.FetchInventoryDescendents, new PacketCallback(FetchInventoryDescendentsHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.FetchInventory, new PacketCallback(FetchInventoryHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.CopyInventoryItem, new PacketCallback(CopyInventoryItemHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.MoveInventoryItem, new PacketCallback(MoveInventoryItemHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.MoveInventoryFolder, new PacketCallback(MoveInventoryFolderHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.PurgeInventoryDescendents, new PacketCallback(PurgeInventoryDescendentsHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -281,7 +282,7 @@ namespace Simian.Extensions
|
||||
for (int j = 0; j < count; j++)
|
||||
descendents.FolderData[j] = folderBlocks[splitPoints[i] + j];
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, descendents, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, descendents, PacketCategory.Inventory);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -297,7 +298,7 @@ namespace Simian.Extensions
|
||||
descendents.FolderData = new InventoryDescendentsPacket.FolderDataBlock[0];
|
||||
descendents.ItemData = new InventoryDescendentsPacket.ItemDataBlock[0];
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, descendents, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, descendents, PacketCategory.Inventory);
|
||||
}
|
||||
|
||||
if (itemBlocks.Length > 0)
|
||||
@@ -323,7 +324,7 @@ namespace Simian.Extensions
|
||||
for (int j = 0; j < count; j++)
|
||||
descendents.ItemData[j] = itemBlocks[splitPoints[i] + j];
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, descendents, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, descendents, PacketCategory.Inventory);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -403,7 +404,7 @@ namespace Simian.Extensions
|
||||
for (int j = 0; j < count; j++)
|
||||
reply.InventoryData[j] = blocks[splitPoints[i] + j];
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Inventory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -540,7 +541,7 @@ namespace Simian.Extensions
|
||||
|
||||
Logger.DebugLog("Sending bulk update for inventory object " + obj.ID);
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, update, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agent.AgentID, update, PacketCategory.Inventory);
|
||||
}
|
||||
|
||||
void MoveInventory(Agent agent, Dictionary<UUID, InventoryObject> agentInventory, UUID objectID,
|
||||
@@ -784,7 +785,7 @@ namespace Simian.Extensions
|
||||
update.InventoryData[0].Type = (sbyte)item.AssetType;
|
||||
|
||||
if (sendPacket)
|
||||
Server.UDP.SendPacket(agentID, update, PacketCategory.Inventory);
|
||||
server.UDP.SendPacket(agentID, update, PacketCategory.Inventory);
|
||||
|
||||
return item.ID;
|
||||
}
|
||||
|
||||
@@ -6,19 +6,20 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class Messaging : IExtension
|
||||
public class Messaging : IExtension<Simian>
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
|
||||
public Messaging(Simian server)
|
||||
public Messaging()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ChatFromViewer, new PacketCallback(ChatFromViewerHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ImprovedInstantMessage, new PacketCallback(ImprovedInstantMessageHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.ChatFromViewer, new PacketCallback(ChatFromViewerHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ImprovedInstantMessage, new PacketCallback(ImprovedInstantMessageHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -45,7 +46,7 @@ namespace Simian.Extensions
|
||||
chat.ChatData.FromName = Utils.StringToBytes(agent.Avatar.Name);
|
||||
chat.ChatData.Message = viewerChat.ChatData.Message;
|
||||
|
||||
Server.UDP.BroadcastPacket(chat, PacketCategory.Transaction);
|
||||
server.UDP.BroadcastPacket(chat, PacketCategory.Transaction);
|
||||
}
|
||||
|
||||
void ImprovedInstantMessageHandler(Packet packet, Agent agent)
|
||||
@@ -55,9 +56,9 @@ namespace Simian.Extensions
|
||||
|
||||
if (dialog == InstantMessageDialog.MessageFromAgent)
|
||||
{
|
||||
lock (Server.Agents)
|
||||
lock (server.Agents)
|
||||
{
|
||||
foreach (Agent recipient in Server.Agents.Values)
|
||||
foreach (Agent recipient in server.Agents.Values)
|
||||
{
|
||||
if (recipient.AgentID == im.MessageBlock.ToAgentID)
|
||||
{
|
||||
@@ -77,7 +78,7 @@ namespace Simian.Extensions
|
||||
|
||||
sendIM.AgentData.AgentID = agent.AgentID;
|
||||
|
||||
Server.UDP.SendPacket(recipient.AgentID, sendIM, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(recipient.AgentID, sendIM, PacketCategory.Transaction);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -6,19 +6,21 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
class Money : IExtension
|
||||
class Money : IExtension<Simian>
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
|
||||
public Money(Simian server)
|
||||
public Money()
|
||||
{
|
||||
Server = server;
|
||||
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MoneyBalanceRequest, new PacketCallback(MoneyBalanceRequestHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MoneyTransferRequest, new PacketCallback(MoneyTransferRequestHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.MoneyBalanceRequest, new PacketCallback(MoneyBalanceRequestHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.MoneyTransferRequest, new PacketCallback(MoneyTransferRequestHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -33,7 +35,7 @@ namespace Simian.Extensions
|
||||
reply.MoneyData.TransactionID = transactionID;
|
||||
reply.MoneyData.Description = Utils.StringToBytes(message);
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(agent.AgentID, reply, PacketCategory.Transaction);
|
||||
}
|
||||
|
||||
void MoneyBalanceRequestHandler(Packet packet, Agent agent)
|
||||
@@ -50,9 +52,9 @@ namespace Simian.Extensions
|
||||
if (request.MoneyData.Amount < 0 || request.MoneyData.Amount > agent.Balance)
|
||||
return;
|
||||
|
||||
lock (Server.Agents)
|
||||
lock (server.Agents)
|
||||
{
|
||||
foreach (Agent recipient in Server.Agents.Values)
|
||||
foreach (Agent recipient in server.Agents.Values)
|
||||
{
|
||||
if (recipient.AgentID == request.MoneyData.DestID)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class Movement : IExtension
|
||||
public class Movement : IExtension<Simian>
|
||||
{
|
||||
const int UPDATE_ITERATION = 100; //rate in milliseconds to send ObjectUpdate
|
||||
const bool ENVIRONMENT_SOUNDS = true; //collision sounds, splashing, etc
|
||||
@@ -23,7 +23,7 @@ namespace Simian.Extensions
|
||||
const float PREJUMP_DELAY = 0.25f; //seconds before actually jumping
|
||||
const float AVATAR_TERMINAL_VELOCITY = 54f; //~120mph
|
||||
|
||||
UUID BIG_SPLASH_SOUND = new UUID("486475b9-1460-4969-871e-fad973b38015");
|
||||
static readonly UUID BIG_SPLASH_SOUND = new UUID("486475b9-1460-4969-871e-fad973b38015");
|
||||
|
||||
const float SQRT_TWO = 1.41421356f;
|
||||
|
||||
@@ -37,13 +37,14 @@ namespace Simian.Extensions
|
||||
set { Interlocked.Exchange(ref lastTick, value); }
|
||||
}
|
||||
|
||||
public Movement(Simian server)
|
||||
public Movement()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentUpdate, new PacketCallback(AgentUpdateHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.AgentHeightWidth, new PacketCallback(AgentHeightWidthHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.SetAlwaysRun, new PacketCallback(SetAlwaysRunHandler));
|
||||
|
||||
@@ -8,31 +8,32 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class ObjectManager : IExtension
|
||||
public class ObjectManager : IExtension<Simian>
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
|
||||
|
||||
public ObjectManager(Simian server)
|
||||
public ObjectManager()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectAdd, new PacketCallback(ObjectAddHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectDuplicate, new PacketCallback(ObjectDuplicateHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectSelect, new PacketCallback(ObjectSelectHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectDeselect, new PacketCallback(ObjectDeselectHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectLink, new PacketCallback(ObjectLinkHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectDelink, new PacketCallback(ObjectDelinkHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectShape, new PacketCallback(ObjectShapeHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectFlagUpdate, new PacketCallback(ObjectFlagUpdateHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectExtraParams, new PacketCallback(ObjectExtraParamsHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.ObjectImage, new PacketCallback(ObjectImageHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.DeRezObject, new PacketCallback(DeRezObjectHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.MultipleObjectUpdate, new PacketCallback(MultipleObjectUpdateHandler));
|
||||
Server.UDP.RegisterPacketCallback(PacketType.RequestObjectPropertiesFamily, new PacketCallback(RequestObjectPropertiesFamilyHandler));
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectAdd, new PacketCallback(ObjectAddHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectDuplicate, new PacketCallback(ObjectDuplicateHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectSelect, new PacketCallback(ObjectSelectHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectDeselect, new PacketCallback(ObjectDeselectHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectLink, new PacketCallback(ObjectLinkHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectDelink, new PacketCallback(ObjectDelinkHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectShape, new PacketCallback(ObjectShapeHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectFlagUpdate, new PacketCallback(ObjectFlagUpdateHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectExtraParams, new PacketCallback(ObjectExtraParamsHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.ObjectImage, new PacketCallback(ObjectImageHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.DeRezObject, new PacketCallback(DeRezObjectHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.MultipleObjectUpdate, new PacketCallback(MultipleObjectUpdateHandler));
|
||||
server.UDP.RegisterPacketCallback(PacketType.RequestObjectPropertiesFamily, new PacketCallback(RequestObjectPropertiesFamilyHandler));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
@@ -62,7 +63,7 @@ namespace Simian.Extensions
|
||||
if (add.ObjectData.RayTargetID != UUID.Zero)
|
||||
{
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(add.ObjectData.RayTargetID, out obj))
|
||||
if (server.Scene.TryGetObject(add.ObjectData.RayTargetID, out obj))
|
||||
{
|
||||
// Test for a collision with the specified object
|
||||
position = ObjectCollisionTest(add.ObjectData.RayStart, add.ObjectData.RayEnd, obj);
|
||||
@@ -159,15 +160,15 @@ namespace Simian.Extensions
|
||||
prim.Properties.Permissions = Permissions.FullPermissions;
|
||||
prim.Properties.SalePrice = 10;
|
||||
|
||||
prim.RegionHandle = Server.RegionHandle;
|
||||
prim.RegionHandle = server.RegionHandle;
|
||||
prim.Rotation = add.ObjectData.Rotation;
|
||||
prim.Scale = scale;
|
||||
prim.Textures = new Primitive.TextureEntry(Primitive.TextureEntry.WHITE_TEXTURE);
|
||||
prim.TextColor = Color4.Black;
|
||||
|
||||
// Add this prim to the object database
|
||||
SimulationObject simObj = new SimulationObject(prim, Server);
|
||||
Server.Scene.ObjectAdd(this, agent, simObj, flags);
|
||||
SimulationObject simObj = new SimulationObject(prim, server);
|
||||
server.Scene.ObjectAdd(this, agent, simObj, flags);
|
||||
}
|
||||
|
||||
void ObjectDuplicateHandler(Packet packet, Agent agent)
|
||||
@@ -182,13 +183,13 @@ namespace Simian.Extensions
|
||||
uint dupeID = duplicate.ObjectData[i].ObjectLocalID;
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(dupeID, out obj))
|
||||
if (server.Scene.TryGetObject(dupeID, out obj))
|
||||
{
|
||||
SimulationObject newObj = new SimulationObject(obj);
|
||||
newObj.Prim.Position += offset;
|
||||
newObj.Prim.ID = UUID.Random();
|
||||
|
||||
Server.Scene.ObjectAdd(this, agent, newObj, flags);
|
||||
server.Scene.ObjectAdd(this, agent, newObj, flags);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -199,7 +200,7 @@ namespace Simian.Extensions
|
||||
kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
|
||||
kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
|
||||
kill.ObjectData[0].ID = dupeID;
|
||||
Server.UDP.SendPacket(agent.AgentID, kill, PacketCategory.State);
|
||||
server.UDP.SendPacket(agent.AgentID, kill, PacketCategory.State);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -215,7 +216,7 @@ namespace Simian.Extensions
|
||||
properties.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(select.ObjectData[i].ObjectLocalID, out obj))
|
||||
if (server.Scene.TryGetObject(select.ObjectData[i].ObjectLocalID, out obj))
|
||||
{
|
||||
//Logger.DebugLog("Selecting object " + obj.Prim.LocalID);
|
||||
|
||||
@@ -239,7 +240,7 @@ namespace Simian.Extensions
|
||||
properties.ObjectData[0].TextureID = new byte[0];
|
||||
properties.ObjectData[0].TouchName = new byte[0];
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, properties, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(agent.AgentID, properties, PacketCategory.Transaction);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -256,7 +257,7 @@ namespace Simian.Extensions
|
||||
kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
|
||||
kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
|
||||
kill.ObjectData[0].ID = select.ObjectData[i].ObjectLocalID;
|
||||
Server.UDP.SendPacket(agent.AgentID, kill, PacketCategory.State);
|
||||
server.UDP.SendPacket(agent.AgentID, kill, PacketCategory.State);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -271,7 +272,7 @@ namespace Simian.Extensions
|
||||
uint localID = deselect.ObjectData[i].ObjectLocalID;
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(localID, out obj))
|
||||
if (server.Scene.TryGetObject(localID, out obj))
|
||||
{
|
||||
//Logger.DebugLog("Deselecting object " + obj.Prim.LocalID);
|
||||
}
|
||||
@@ -287,7 +288,7 @@ namespace Simian.Extensions
|
||||
for (int i = 0; i < link.ObjectData.Length; i++)
|
||||
{
|
||||
SimulationObject obj;
|
||||
if (!Server.Scene.TryGetObject(link.ObjectData[i].ObjectLocalID, out obj))
|
||||
if (!server.Scene.TryGetObject(link.ObjectData[i].ObjectLocalID, out obj))
|
||||
{
|
||||
//TODO: send an error message
|
||||
return;
|
||||
@@ -309,19 +310,19 @@ namespace Simian.Extensions
|
||||
|
||||
ObjectUpdatePacket update = new ObjectUpdatePacket();
|
||||
|
||||
update.RegionData.RegionHandle = Server.RegionHandle;
|
||||
update.RegionData.RegionHandle = server.RegionHandle;
|
||||
update.RegionData.TimeDilation = UInt16.MaxValue;
|
||||
|
||||
update.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
|
||||
|
||||
update.ObjectData[0] = SimulationObject.BuildUpdateBlock(linkSet[i].Prim, Server.RegionHandle,
|
||||
update.ObjectData[0] = SimulationObject.BuildUpdateBlock(linkSet[i].Prim, server.RegionHandle,
|
||||
linkSet[i].Prim.PrimData.State, linkSet[i].Prim.Flags);
|
||||
|
||||
if (linkSet[i].Prim.ParentID > 0)
|
||||
{
|
||||
//previously linked children
|
||||
SimulationObject parent;
|
||||
if (Server.Scene.TryGetObject(linkSet[i].Prim.ParentID, out parent))
|
||||
if (server.Scene.TryGetObject(linkSet[i].Prim.ParentID, out parent))
|
||||
{
|
||||
//re-add old root orientation
|
||||
linkSet[i].Prim.Position = parent.Prim.Position + Vector3.Transform(linkSet[i].Prim.Position, Matrix4.CreateFromQuaternion(parent.Prim.Rotation));
|
||||
@@ -348,7 +349,7 @@ namespace Simian.Extensions
|
||||
linkSet[i].Prim.Position, linkSet[i].Prim.Rotation,
|
||||
Vector3.Zero, Vector3.Zero, Vector3.Zero);
|
||||
|
||||
Server.UDP.BroadcastPacket(update, PacketCategory.State);
|
||||
server.UDP.BroadcastPacket(update, PacketCategory.State);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -361,7 +362,7 @@ namespace Simian.Extensions
|
||||
for (int i = 0; i < delink.ObjectData.Length; i++)
|
||||
{
|
||||
SimulationObject obj;
|
||||
if (!Server.Scene.TryGetObject(delink.ObjectData[i].ObjectLocalID, out obj))
|
||||
if (!server.Scene.TryGetObject(delink.ObjectData[i].ObjectLocalID, out obj))
|
||||
{
|
||||
//TODO: send an error message
|
||||
return;
|
||||
@@ -379,7 +380,7 @@ namespace Simian.Extensions
|
||||
|
||||
ObjectUpdatePacket update = new ObjectUpdatePacket();
|
||||
|
||||
update.RegionData.RegionHandle = Server.RegionHandle;
|
||||
update.RegionData.RegionHandle = server.RegionHandle;
|
||||
update.RegionData.TimeDilation = UInt16.MaxValue;
|
||||
|
||||
update.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[linkSet.Count];
|
||||
@@ -387,7 +388,7 @@ namespace Simian.Extensions
|
||||
for (int i = 0; i < linkSet.Count; i++)
|
||||
{
|
||||
update.ObjectData[i] = SimulationObject.BuildUpdateBlock(linkSet[i].Prim,
|
||||
Server.RegionHandle, 0, linkSet[i].Prim.Flags);
|
||||
server.RegionHandle, 0, linkSet[i].Prim.Flags);
|
||||
|
||||
update.ObjectData[i].ParentID = 0;
|
||||
linkSet[i].LinkNumber = 0;
|
||||
@@ -404,7 +405,7 @@ namespace Simian.Extensions
|
||||
Vector3.Zero, Vector3.Zero, Vector3.Zero);
|
||||
}
|
||||
|
||||
Server.UDP.BroadcastPacket(update, PacketCategory.State);
|
||||
server.UDP.BroadcastPacket(update, PacketCategory.State);
|
||||
}
|
||||
|
||||
void ObjectShapeHandler(Packet packet, Agent agent)
|
||||
@@ -416,7 +417,7 @@ namespace Simian.Extensions
|
||||
ObjectShapePacket.ObjectDataBlock block = shape.ObjectData[i];
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(block.ObjectLocalID, out obj))
|
||||
if (server.Scene.TryGetObject(block.ObjectLocalID, out obj))
|
||||
{
|
||||
Primitive.ConstructionData data = obj.Prim.PrimData;
|
||||
|
||||
@@ -439,7 +440,7 @@ namespace Simian.Extensions
|
||||
data.ProfileEnd = Primitive.UnpackEndCut(block.ProfileEnd);
|
||||
data.ProfileHollow = Primitive.UnpackProfileHollow(block.ProfileHollow);
|
||||
|
||||
Server.Scene.ObjectModify(this, obj, data);
|
||||
server.Scene.ObjectModify(this, obj, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -454,7 +455,7 @@ namespace Simian.Extensions
|
||||
ObjectFlagUpdatePacket update = (ObjectFlagUpdatePacket)packet;
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(update.AgentData.ObjectLocalID, out obj))
|
||||
if (server.Scene.TryGetObject(update.AgentData.ObjectLocalID, out obj))
|
||||
{
|
||||
PrimFlags flags = obj.Prim.Flags;
|
||||
|
||||
@@ -478,7 +479,7 @@ namespace Simian.Extensions
|
||||
else
|
||||
flags &= ~PrimFlags.Physics;
|
||||
|
||||
Server.Scene.ObjectFlags(this, obj, flags);
|
||||
server.Scene.ObjectFlags(this, obj, flags);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -496,7 +497,7 @@ namespace Simian.Extensions
|
||||
ObjectExtraParamsPacket.ObjectDataBlock block = extra.ObjectData[i];
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(block.ObjectLocalID, out obj))
|
||||
if (server.Scene.TryGetObject(block.ObjectLocalID, out obj))
|
||||
{
|
||||
ExtraParamType type = (ExtraParamType)block.ParamType;
|
||||
}
|
||||
@@ -511,8 +512,8 @@ namespace Simian.Extensions
|
||||
for (int i = 0; i < image.ObjectData.Length; i++)
|
||||
{
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(image.ObjectData[i].ObjectLocalID, out obj))
|
||||
Server.Scene.ObjectImage(this, obj,
|
||||
if (server.Scene.TryGetObject(image.ObjectData[i].ObjectLocalID, out obj))
|
||||
server.Scene.ObjectImage(this, obj,
|
||||
Utils.BytesToString(image.ObjectData[i].MediaURL),
|
||||
new Primitive.TextureEntry(image.ObjectData[i].TextureEntry, 0, image.ObjectData[i].TextureEntry.Length));
|
||||
}
|
||||
@@ -530,7 +531,7 @@ namespace Simian.Extensions
|
||||
uint localID = derez.ObjectData[i].ObjectLocalID;
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(localID, out obj))
|
||||
if (server.Scene.TryGetObject(localID, out obj))
|
||||
{
|
||||
switch (destination)
|
||||
{
|
||||
@@ -560,15 +561,15 @@ namespace Simian.Extensions
|
||||
break;
|
||||
case DeRezDestination.TrashFolder:
|
||||
InventoryObject invObj;
|
||||
if (Server.Inventory.TryGetInventory(agent.AgentID, derez.AgentBlock.DestinationID, out invObj) &&
|
||||
if (server.Inventory.TryGetInventory(agent.AgentID, derez.AgentBlock.DestinationID, out invObj) &&
|
||||
invObj is InventoryFolder)
|
||||
{
|
||||
// FIXME: Handle children
|
||||
InventoryFolder trash = (InventoryFolder)invObj;
|
||||
Server.Inventory.CreateItem(agent.AgentID, obj.Prim.Properties.Name, obj.Prim.Properties.Description, InventoryType.Object,
|
||||
server.Inventory.CreateItem(agent.AgentID, obj.Prim.Properties.Name, obj.Prim.Properties.Description, InventoryType.Object,
|
||||
AssetType.Object, obj.Prim.ID, trash.ID, PermissionMask.All, PermissionMask.All, agent.AgentID,
|
||||
obj.Prim.Properties.CreatorID, derez.AgentBlock.TransactionID, 0, true);
|
||||
Server.Scene.ObjectRemove(this, obj);
|
||||
server.Scene.ObjectRemove(this, obj);
|
||||
|
||||
Logger.DebugLog(String.Format("Derezzed prim {0} to agent inventory trash", obj.Prim.LocalID));
|
||||
}
|
||||
@@ -608,7 +609,7 @@ namespace Simian.Extensions
|
||||
MultipleObjectUpdatePacket.ObjectDataBlock block = update.ObjectData[i];
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(block.ObjectLocalID, out obj))
|
||||
if (server.Scene.TryGetObject(block.ObjectLocalID, out obj))
|
||||
{
|
||||
UpdateType type = (UpdateType)block.Type;
|
||||
bool linked = ((type & UpdateType.Linked) != 0);
|
||||
@@ -639,7 +640,7 @@ namespace Simian.Extensions
|
||||
// Although the object has already been modified, we need
|
||||
// to inform the scene manager of the changes so they are
|
||||
// sent to clients and propagated to other extensions
|
||||
Server.Scene.ObjectTransform(this, obj, position, rotation,
|
||||
server.Scene.ObjectTransform(this, obj, position, rotation,
|
||||
obj.Prim.Velocity, obj.Prim.Acceleration, obj.Prim.AngularVelocity,
|
||||
scale);
|
||||
}
|
||||
@@ -651,7 +652,7 @@ namespace Simian.Extensions
|
||||
kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
|
||||
kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
|
||||
kill.ObjectData[0].ID = block.ObjectLocalID;
|
||||
Server.UDP.SendPacket(agent.AgentID, kill, PacketCategory.State);
|
||||
server.UDP.SendPacket(agent.AgentID, kill, PacketCategory.State);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -662,7 +663,7 @@ namespace Simian.Extensions
|
||||
ReportType type = (ReportType)request.ObjectData.RequestFlags;
|
||||
|
||||
SimulationObject obj;
|
||||
if (Server.Scene.TryGetObject(request.ObjectData.ObjectID, out obj))
|
||||
if (server.Scene.TryGetObject(request.ObjectData.ObjectID, out obj))
|
||||
{
|
||||
ObjectPropertiesFamilyPacket props = new ObjectPropertiesFamilyPacket();
|
||||
props.ObjectData.BaseMask = (uint)obj.Prim.Properties.Permissions.BaseMask;
|
||||
@@ -682,7 +683,7 @@ namespace Simian.Extensions
|
||||
props.ObjectData.SalePrice = obj.Prim.Properties.SalePrice;
|
||||
props.ObjectData.SaleType = (byte)obj.Prim.Properties.SaleType;
|
||||
|
||||
Server.UDP.SendPacket(agent.AgentID, props, PacketCategory.Transaction);
|
||||
server.UDP.SendPacket(agent.AgentID, props, PacketCategory.Transaction);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -718,7 +719,7 @@ namespace Simian.Extensions
|
||||
if (obj.Prim.ParentID != 0)
|
||||
{
|
||||
SimulationObject parent;
|
||||
if (Server.Scene.TryGetObject(obj.Prim.ParentID, out parent))
|
||||
if (server.Scene.TryGetObject(obj.Prim.ParentID, out parent))
|
||||
mesh = obj.GetWorldMesh(DetailLevel.Low, parent);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -6,20 +6,21 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class ParcelManager : IExtension, IParcelProvider
|
||||
public class ParcelManager : IExtension<Simian>, IParcelProvider
|
||||
{
|
||||
Simian server;
|
||||
Dictionary<int, Parcel> parcels = new Dictionary<int, Parcel>();
|
||||
/// <summary>X,Y ordered 2D array of the parcelIDs for each sq. meter of a simulator</summary>
|
||||
int[] parcelOverlay = new int[64 * 64];
|
||||
|
||||
public ParcelManager(Simian server)
|
||||
public ParcelManager()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
lock (parcels)
|
||||
parcels.Clear();
|
||||
|
||||
|
||||
@@ -6,18 +6,19 @@ using OpenMetaverse.Rendering;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class RenderingPluginMesher : IExtension, IMeshingProvider
|
||||
public class RenderingPluginMesher : IExtension<Simian>, IMeshingProvider
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
IRendering Renderer;
|
||||
|
||||
public RenderingPluginMesher(Simian server)
|
||||
public RenderingPluginMesher()
|
||||
{
|
||||
Server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
// Search for a the best available OpenMetaverse.Rendering plugin
|
||||
List<string> renderers = RenderingLoader.ListRenderers(AppDomain.CurrentDomain.BaseDirectory);
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ using OpenMetaverse.Packets;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class SceneManager : IExtension, ISceneProvider
|
||||
public class SceneManager : IExtension<Simian>, ISceneProvider
|
||||
{
|
||||
Simian server;
|
||||
DoubleDictionary<uint, UUID, SimulationObject> sceneObjects = new DoubleDictionary<uint, UUID, SimulationObject>();
|
||||
@@ -41,13 +41,14 @@ namespace Simian.Extensions
|
||||
|
||||
public float WaterHeight { get { return 35f; } }
|
||||
|
||||
public SceneManager(Simian server)
|
||||
public SceneManager()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
server.UDP.RegisterPacketCallback(PacketType.CompleteAgentMovement, new PacketCallback(CompleteAgentMovementHandler));
|
||||
LoadTerrain(server.DataDir + "heightmap.tga");
|
||||
}
|
||||
|
||||
@@ -68,21 +68,20 @@ namespace Simian
|
||||
}
|
||||
}
|
||||
|
||||
public class UDPManager : IExtension, IUDPProvider
|
||||
public class UDPManager : IExtension<Simian>, IUDPProvider
|
||||
{
|
||||
Simian Server;
|
||||
Simian server;
|
||||
UDPServer udpServer;
|
||||
|
||||
public UDPManager(Simian server)
|
||||
public UDPManager()
|
||||
{
|
||||
Server = server;
|
||||
// Have to do this in the constructor, because we don't know that the
|
||||
// UDP extension will be started before other extensions
|
||||
udpServer = new UDPServer(Server.UDPPort, Server);
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
udpServer = new UDPServer(server.UDPPort, server);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
|
||||
@@ -8,17 +8,18 @@ using OpenMetaverse.StructuredData;
|
||||
|
||||
namespace Simian.Extensions
|
||||
{
|
||||
public class XMLPersistence : IExtension, IPersistenceProvider
|
||||
public class XMLPersistence : IExtension<Simian>, IPersistenceProvider
|
||||
{
|
||||
Simian server;
|
||||
|
||||
public XMLPersistence(Simian server)
|
||||
public XMLPersistence()
|
||||
{
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
public void Start(Simian server)
|
||||
{
|
||||
this.server = server;
|
||||
|
||||
LLSD llsd;
|
||||
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user