diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/Communications/CommunicationsManager.cs | 4 | ||||
-rw-r--r-- | OpenSim/Framework/Communications/IInventoryServices.cs | 17 | ||||
-rw-r--r-- | OpenSim/Framework/Communications/caches/CachedUserInfo.cs | 77 | ||||
-rw-r--r-- | OpenSim/Framework/Communications/caches/InventoryFolder.cs (renamed from OpenSim/Region/Caches/InventoryFolder.cs) | 2 | ||||
-rw-r--r-- | OpenSim/Framework/Communications/caches/UserProfileCache.cs (renamed from OpenSim/Region/Caches/UserProfileCache.cs) | 42 | ||||
-rw-r--r-- | OpenSim/Framework/Data/InventoryData.cs | 6 | ||||
-rw-r--r-- | OpenSim/Framework/General/Interfaces/IClientAPI.cs | 4 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/BinaryStreamHandler.cs | 44 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/RestMethod.cs | 1 |
9 files changed, 188 insertions, 9 deletions
diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs index 109d027..ebc9632 100644 --- a/OpenSim/Framework/Communications/CommunicationsManager.cs +++ b/OpenSim/Framework/Communications/CommunicationsManager.cs | |||
@@ -32,6 +32,7 @@ using OpenSim.Framework.Data; | |||
32 | using OpenSim.Framework.Interfaces; | 32 | using OpenSim.Framework.Interfaces; |
33 | using OpenSim.Framework.Types; | 33 | using OpenSim.Framework.Types; |
34 | using OpenSim.Framework.Servers; | 34 | using OpenSim.Framework.Servers; |
35 | using OpenSim.Framework.Communications.Caches; | ||
35 | 36 | ||
36 | namespace OpenSim.Framework.Communications | 37 | namespace OpenSim.Framework.Communications |
37 | { | 38 | { |
@@ -40,12 +41,15 @@ namespace OpenSim.Framework.Communications | |||
40 | { | 41 | { |
41 | public IUserServices UserServer; | 42 | public IUserServices UserServer; |
42 | public IGridServices GridServer; | 43 | public IGridServices GridServer; |
44 | public IInventoryServices InventoryServer; | ||
43 | public IInterRegionCommunications InterRegion; | 45 | public IInterRegionCommunications InterRegion; |
46 | public UserProfileCache UserProfilesCache; | ||
44 | 47 | ||
45 | public NetworkServersInfo ServersInfo; | 48 | public NetworkServersInfo ServersInfo; |
46 | public CommunicationsManager(NetworkServersInfo serversInfo, BaseHttpServer httpServer) | 49 | public CommunicationsManager(NetworkServersInfo serversInfo, BaseHttpServer httpServer) |
47 | { | 50 | { |
48 | ServersInfo = serversInfo; | 51 | ServersInfo = serversInfo; |
52 | UserProfilesCache = new UserProfileCache(this); | ||
49 | } | 53 | } |
50 | 54 | ||
51 | #region Packet Handlers | 55 | #region Packet Handlers |
diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs new file mode 100644 index 0000000..0b05834 --- /dev/null +++ b/OpenSim/Framework/Communications/IInventoryServices.cs | |||
@@ -0,0 +1,17 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Data; | ||
5 | using libsecondlife; | ||
6 | using OpenSim.Framework.Communications.Caches; | ||
7 | |||
8 | namespace OpenSim.Framework.Communications | ||
9 | { | ||
10 | public delegate void InventoryFolderInfo(LLUUID userID, InventoryFolder folderInfo); | ||
11 | public delegate void InventoryItemInfo(LLUUID userID, InventoryItemBase itemInfo); | ||
12 | |||
13 | public interface IInventoryServices | ||
14 | { | ||
15 | void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack); | ||
16 | } | ||
17 | } | ||
diff --git a/OpenSim/Framework/Communications/caches/CachedUserInfo.cs b/OpenSim/Framework/Communications/caches/CachedUserInfo.cs new file mode 100644 index 0000000..1c779e9 --- /dev/null +++ b/OpenSim/Framework/Communications/caches/CachedUserInfo.cs | |||
@@ -0,0 +1,77 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Data; | ||
5 | using libsecondlife; | ||
6 | |||
7 | namespace OpenSim.Framework.Communications.Caches | ||
8 | { | ||
9 | public class CachedUserInfo | ||
10 | { | ||
11 | public UserProfileData UserProfile; | ||
12 | //public Dictionary<LLUUID, InventoryFolder> Folders = new Dictionary<LLUUID, InventoryFolder>(); | ||
13 | public InventoryFolder RootFolder; | ||
14 | |||
15 | public CachedUserInfo() | ||
16 | { | ||
17 | |||
18 | } | ||
19 | |||
20 | /// <summary> | ||
21 | /// | ||
22 | /// </summary> | ||
23 | /// <param name="userID"></param> | ||
24 | /// <param name="folderInfo"></param> | ||
25 | public void FolderReceive(LLUUID userID, InventoryFolder folderInfo) | ||
26 | { | ||
27 | if (userID == UserProfile.UUID) | ||
28 | { | ||
29 | if (this.RootFolder == null) | ||
30 | { | ||
31 | if (folderInfo.parentID == LLUUID.Zero) | ||
32 | { | ||
33 | this.RootFolder = folderInfo; | ||
34 | } | ||
35 | } | ||
36 | else | ||
37 | { | ||
38 | if (this.RootFolder.folderID == folderInfo.parentID) | ||
39 | { | ||
40 | this.RootFolder.SubFolders.Add(folderInfo.folderID, folderInfo); | ||
41 | } | ||
42 | else | ||
43 | { | ||
44 | InventoryFolder pFolder = this.RootFolder.HasSubFolder(folderInfo.parentID); | ||
45 | if (pFolder != null) | ||
46 | { | ||
47 | pFolder.SubFolders.Add(folderInfo.folderID, folderInfo); | ||
48 | } | ||
49 | } | ||
50 | } | ||
51 | } | ||
52 | } | ||
53 | |||
54 | public void ItemReceive(LLUUID userID, InventoryItemBase itemInfo) | ||
55 | { | ||
56 | if (userID == UserProfile.UUID) | ||
57 | { | ||
58 | if (this.RootFolder != null) | ||
59 | { | ||
60 | if (itemInfo.parentFolderID == this.RootFolder.folderID) | ||
61 | { | ||
62 | this.RootFolder.Items.Add(itemInfo.inventoryID, itemInfo); | ||
63 | } | ||
64 | else | ||
65 | { | ||
66 | InventoryFolder pFolder = this.RootFolder.HasSubFolder(itemInfo.parentFolderID); | ||
67 | if (pFolder != null) | ||
68 | { | ||
69 | pFolder.Items.Add(itemInfo.inventoryID, itemInfo); | ||
70 | } | ||
71 | } | ||
72 | } | ||
73 | |||
74 | } | ||
75 | } | ||
76 | } | ||
77 | } | ||
diff --git a/OpenSim/Region/Caches/InventoryFolder.cs b/OpenSim/Framework/Communications/caches/InventoryFolder.cs index 364a184..eaddf19 100644 --- a/OpenSim/Region/Caches/InventoryFolder.cs +++ b/OpenSim/Framework/Communications/caches/InventoryFolder.cs | |||
@@ -4,7 +4,7 @@ using System.Text; | |||
4 | using libsecondlife; | 4 | using libsecondlife; |
5 | using OpenSim.Framework.Data; | 5 | using OpenSim.Framework.Data; |
6 | 6 | ||
7 | namespace OpenSim.Region.Caches | 7 | namespace OpenSim.Framework.Communications.Caches |
8 | { | 8 | { |
9 | public class InventoryFolder : InventoryFolderBase | 9 | public class InventoryFolder : InventoryFolderBase |
10 | { | 10 | { |
diff --git a/OpenSim/Region/Caches/UserProfileCache.cs b/OpenSim/Framework/Communications/caches/UserProfileCache.cs index 0717e55..0ee63ba 100644 --- a/OpenSim/Region/Caches/UserProfileCache.cs +++ b/OpenSim/Framework/Communications/caches/UserProfileCache.cs | |||
@@ -3,16 +3,19 @@ using System.Collections.Generic; | |||
3 | using System.Text; | 3 | using System.Text; |
4 | using libsecondlife; | 4 | using libsecondlife; |
5 | using OpenSim.Framework.Data; | 5 | using OpenSim.Framework.Data; |
6 | using OpenSim.Framework.Communications; | ||
6 | 7 | ||
7 | namespace OpenSim.Region.Caches | 8 | namespace OpenSim.Framework.Communications.Caches |
8 | { | 9 | { |
9 | public class UserProfileCache | 10 | public class UserProfileCache |
10 | { | 11 | { |
11 | public Dictionary<LLUUID, CachedUserInfo> UserProfiles = new Dictionary<LLUUID, CachedUserInfo>(); | 12 | public Dictionary<LLUUID, CachedUserInfo> UserProfiles = new Dictionary<LLUUID, CachedUserInfo>(); |
12 | 13 | ||
13 | public UserProfileCache() | 14 | private CommunicationsManager m_parent; |
14 | { | ||
15 | 15 | ||
16 | public UserProfileCache(CommunicationsManager parent) | ||
17 | { | ||
18 | m_parent = parent; | ||
16 | } | 19 | } |
17 | 20 | ||
18 | /// <summary> | 21 | /// <summary> |
@@ -22,7 +25,36 @@ namespace OpenSim.Region.Caches | |||
22 | /// <param name="userID"></param> | 25 | /// <param name="userID"></param> |
23 | public void AddNewUser(LLUUID userID) | 26 | public void AddNewUser(LLUUID userID) |
24 | { | 27 | { |
28 | if (!this.UserProfiles.ContainsKey(userID)) | ||
29 | { | ||
30 | CachedUserInfo userInfo = new CachedUserInfo(); | ||
31 | userInfo.UserProfile = this.RequestUserProfileForUser(userID); | ||
32 | this.m_parent.InventoryServer.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive); | ||
33 | if (userInfo.UserProfile != null) | ||
34 | { | ||
35 | this.UserProfiles.Add(userID, userInfo); | ||
36 | } | ||
37 | else | ||
38 | { | ||
39 | //no profile for this user, what do we do now? | ||
40 | } | ||
41 | } | ||
42 | else | ||
43 | { | ||
44 | //already have a cached profile for this user | ||
45 | //we should make sure its upto date with the user server version | ||
46 | } | ||
47 | } | ||
25 | 48 | ||
49 | /// <summary> | ||
50 | /// A new user has moved into a region in this instance | ||
51 | /// so get info from servers | ||
52 | /// </summary> | ||
53 | /// <param name="firstName"></param> | ||
54 | /// <param name="lastName"></param> | ||
55 | public void AddNewUser(string firstName, string lastName) | ||
56 | { | ||
57 | |||
26 | } | 58 | } |
27 | 59 | ||
28 | /// <summary> | 60 | /// <summary> |
@@ -40,9 +72,9 @@ namespace OpenSim.Region.Caches | |||
40 | /// Request the user profile from User server | 72 | /// Request the user profile from User server |
41 | /// </summary> | 73 | /// </summary> |
42 | /// <param name="userID"></param> | 74 | /// <param name="userID"></param> |
43 | private void RequestUserProfileForUser(LLUUID userID) | 75 | private UserProfileData RequestUserProfileForUser(LLUUID userID) |
44 | { | 76 | { |
45 | 77 | return this.m_parent.UserServer.GetUserProfile(userID); | |
46 | } | 78 | } |
47 | 79 | ||
48 | /// <summary> | 80 | /// <summary> |
diff --git a/OpenSim/Framework/Data/InventoryData.cs b/OpenSim/Framework/Data/InventoryData.cs index fe2e25c..7253cc7 100644 --- a/OpenSim/Framework/Data/InventoryData.cs +++ b/OpenSim/Framework/Data/InventoryData.cs | |||
@@ -48,7 +48,7 @@ namespace OpenSim.Framework.Data | |||
48 | /// </summary> | 48 | /// </summary> |
49 | public int type; | 49 | public int type; |
50 | /// <summary> | 50 | /// <summary> |
51 | /// The folder this item is contained in (NULL_KEY = Inventory Root) | 51 | /// The folder this item is contained in |
52 | /// </summary> | 52 | /// </summary> |
53 | public LLUUID parentFolderID; | 53 | public LLUUID parentFolderID; |
54 | /// <summary> | 54 | /// <summary> |
@@ -56,7 +56,7 @@ namespace OpenSim.Framework.Data | |||
56 | /// </summary> | 56 | /// </summary> |
57 | public LLUUID avatarID; | 57 | public LLUUID avatarID; |
58 | /// <summary> | 58 | /// <summary> |
59 | /// The creator of this folder | 59 | /// The creator of this item |
60 | /// </summary> | 60 | /// </summary> |
61 | public LLUUID creatorsID; | 61 | public LLUUID creatorsID; |
62 | /// <summary> | 62 | /// <summary> |
@@ -91,7 +91,7 @@ namespace OpenSim.Framework.Data | |||
91 | /// </summary> | 91 | /// </summary> |
92 | public LLUUID agentID; | 92 | public LLUUID agentID; |
93 | /// <summary> | 93 | /// <summary> |
94 | /// The folder this folder is contained in (NULL_KEY for root) | 94 | /// The folder this folder is contained in |
95 | /// </summary> | 95 | /// </summary> |
96 | public LLUUID parentID; | 96 | public LLUUID parentID; |
97 | /// <summary> | 97 | /// <summary> |
diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs index 1b0c682..fe1e9dc 100644 --- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs | |||
@@ -30,6 +30,7 @@ using System.Net; | |||
30 | using libsecondlife; | 30 | using libsecondlife; |
31 | using libsecondlife.Packets; | 31 | using libsecondlife.Packets; |
32 | using OpenSim.Framework.Types; | 32 | using OpenSim.Framework.Types; |
33 | using OpenSim.Framework.Data; | ||
33 | 34 | ||
34 | namespace OpenSim.Framework.Interfaces | 35 | namespace OpenSim.Framework.Interfaces |
35 | { | 36 | { |
@@ -176,5 +177,8 @@ namespace OpenSim.Framework.Interfaces | |||
176 | void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); | 177 | void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); |
177 | void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); | 178 | void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLUUID textureID, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID); |
178 | void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); | 179 | void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); |
180 | |||
181 | void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items); | ||
182 | void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item); | ||
179 | } | 183 | } |
180 | } | 184 | } |
diff --git a/OpenSim/Framework/Servers/BinaryStreamHandler.cs b/OpenSim/Framework/Servers/BinaryStreamHandler.cs new file mode 100644 index 0000000..302dbff --- /dev/null +++ b/OpenSim/Framework/Servers/BinaryStreamHandler.cs | |||
@@ -0,0 +1,44 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using System.IO; | ||
5 | |||
6 | namespace OpenSim.Framework.Servers | ||
7 | { | ||
8 | |||
9 | public class BinaryStreamHandler : BaseStreamHandler | ||
10 | { | ||
11 | BinaryMethod m_restMethod; | ||
12 | |||
13 | override public byte[] Handle(string path, Stream request) | ||
14 | { | ||
15 | byte[] data = ReadFully(request); | ||
16 | string param = GetParam(path); | ||
17 | string responseString = m_restMethod(data, path, param); | ||
18 | |||
19 | return Encoding.UTF8.GetBytes(responseString); | ||
20 | } | ||
21 | |||
22 | public BinaryStreamHandler(string httpMethod, string path, BinaryMethod restMethod) | ||
23 | : base(httpMethod, path) | ||
24 | { | ||
25 | m_restMethod = restMethod; | ||
26 | } | ||
27 | |||
28 | public byte[] ReadFully(Stream stream) | ||
29 | { | ||
30 | byte[] buffer = new byte[32768]; | ||
31 | using (MemoryStream ms = new MemoryStream()) | ||
32 | { | ||
33 | while (true) | ||
34 | { | ||
35 | int read = stream.Read(buffer, 0, buffer.Length); | ||
36 | if (read <= 0) | ||
37 | return ms.ToArray(); | ||
38 | ms.Write(buffer, 0, read); | ||
39 | } | ||
40 | } | ||
41 | } | ||
42 | } | ||
43 | |||
44 | } | ||
diff --git a/OpenSim/Framework/Servers/RestMethod.cs b/OpenSim/Framework/Servers/RestMethod.cs index c6cb230..2a92fc1 100644 --- a/OpenSim/Framework/Servers/RestMethod.cs +++ b/OpenSim/Framework/Servers/RestMethod.cs | |||
@@ -28,4 +28,5 @@ | |||
28 | namespace OpenSim.Framework.Servers | 28 | namespace OpenSim.Framework.Servers |
29 | { | 29 | { |
30 | public delegate string RestMethod( string request, string path, string param ); | 30 | public delegate string RestMethod( string request, string path, string param ); |
31 | public delegate string BinaryMethod(byte[] data, string path, string param); | ||
31 | } | 32 | } |