diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/Scene.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index f37ba25..741c47e 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -966,54 +966,60 @@ namespace OpenSim.Region.Environment.Scenes | |||
966 | /// <returns></returns> | 966 | /// <returns></returns> |
967 | public void Backup() | 967 | public void Backup() |
968 | { | 968 | { |
969 | m_returns.Clear(); | 969 | lock(m_returns) |
970 | 970 | { | |
971 | EventManager.TriggerOnBackup(m_storageManager.DataStore); | 971 | EventManager.TriggerOnBackup(m_storageManager.DataStore); |
972 | m_backingup = false; | 972 | m_backingup = false; |
973 | |||
974 | foreach (KeyValuePair<UUID, ReturnInfo> ret in m_returns) | ||
975 | { | ||
976 | UUID transaction = UUID.Random(); | ||
977 | |||
978 | GridInstantMessage msg = new GridInstantMessage(); | ||
979 | msg.fromAgentID = new Guid(UUID.Zero.ToString()); // From server | ||
980 | msg.toAgentID = new Guid(ret.Key.ToString()); | ||
981 | msg.imSessionID = new Guid(transaction.ToString()); | ||
982 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | ||
983 | msg.fromAgentName = "Server"; | ||
984 | msg.dialog = (byte)19; // Object msg | ||
985 | msg.fromGroup = false; | ||
986 | msg.offline = (byte)1; | ||
987 | msg.ParentEstateID = RegionInfo.EstateSettings.ParentEstateID; | ||
988 | msg.Position = Vector3.Zero; | ||
989 | msg.RegionID = RegionInfo.RegionID.Guid; | ||
990 | msg.binaryBucket = new byte[0]; | ||
991 | if (ret.Value.count > 1) | ||
992 | msg.message = string.Format("Your {0} objects were returned from {1} in region {2} due to parcel auto return", ret.Value.count, ret.Value.location.ToString(), RegionInfo.RegionName); | ||
993 | else | ||
994 | msg.message = string.Format("Your object {0} was returned from {1} in region {2} due to parcel auto return", ret.Value.objectName, ret.Value.location.ToString(), RegionInfo.RegionName); | ||
995 | 973 | ||
996 | IMessageTransferModule tr = RequestModuleInterface<IMessageTransferModule>(); | 974 | foreach (KeyValuePair<UUID, ReturnInfo> ret in m_returns) |
997 | if (tr != null) | 975 | { |
998 | tr.SendInstantMessage(msg, delegate(bool success) {} ); | 976 | UUID transaction = UUID.Random(); |
977 | |||
978 | GridInstantMessage msg = new GridInstantMessage(); | ||
979 | msg.fromAgentID = new Guid(UUID.Zero.ToString()); // From server | ||
980 | msg.toAgentID = new Guid(ret.Key.ToString()); | ||
981 | msg.imSessionID = new Guid(transaction.ToString()); | ||
982 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | ||
983 | msg.fromAgentName = "Server"; | ||
984 | msg.dialog = (byte)19; // Object msg | ||
985 | msg.fromGroup = false; | ||
986 | msg.offline = (byte)1; | ||
987 | msg.ParentEstateID = RegionInfo.EstateSettings.ParentEstateID; | ||
988 | msg.Position = Vector3.Zero; | ||
989 | msg.RegionID = RegionInfo.RegionID.Guid; | ||
990 | msg.binaryBucket = new byte[0]; | ||
991 | if (ret.Value.count > 1) | ||
992 | msg.message = string.Format("Your {0} objects were returned from {1} in region {2} due to {3}", ret.Value.count, ret.Value.location.ToString(), RegionInfo.RegionName, ret.Value.reason); | ||
993 | else | ||
994 | msg.message = string.Format("Your object {0} was returned from {1} in region {2} due to {3}", ret.Value.objectName, ret.Value.location.ToString(), RegionInfo.RegionName, ret.Value.reason); | ||
995 | |||
996 | IMessageTransferModule tr = RequestModuleInterface<IMessageTransferModule>(); | ||
997 | if (tr != null) | ||
998 | tr.SendInstantMessage(msg, delegate(bool success) {} ); | ||
999 | } | ||
1000 | m_returns.Clear(); | ||
999 | } | 1001 | } |
1000 | } | 1002 | } |
1001 | 1003 | ||
1002 | public void AddReturn(UUID agentID, string objectName, Vector3 location) | 1004 | public void AddReturn(UUID agentID, string objectName, Vector3 location, string reason) |
1003 | { | 1005 | { |
1004 | if (m_returns.ContainsKey(agentID)) | 1006 | lock(m_returns) |
1005 | { | ||
1006 | ReturnInfo info = m_returns[agentID]; | ||
1007 | info.count++; | ||
1008 | m_returns[agentID] = info; | ||
1009 | } | ||
1010 | else | ||
1011 | { | 1007 | { |
1012 | ReturnInfo info = new ReturnInfo(); | 1008 | if (m_returns.ContainsKey(agentID)) |
1013 | info.count = 1; | 1009 | { |
1014 | info.objectName = objectName; | 1010 | ReturnInfo info = m_returns[agentID]; |
1015 | info.location = location; | 1011 | info.count++; |
1016 | m_returns[agentID] = info; | 1012 | m_returns[agentID] = info; |
1013 | } | ||
1014 | else | ||
1015 | { | ||
1016 | ReturnInfo info = new ReturnInfo(); | ||
1017 | info.count = 1; | ||
1018 | info.objectName = objectName; | ||
1019 | info.location = location; | ||
1020 | info.reason = reason; | ||
1021 | m_returns[agentID] = info; | ||
1022 | } | ||
1017 | } | 1023 | } |
1018 | } | 1024 | } |
1019 | 1025 | ||