diff options
Diffstat (limited to 'OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs')
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs | 110 |
1 files changed, 96 insertions, 14 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs index 7597e79..934a814 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs | |||
@@ -25,9 +25,11 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * | 26 | * |
27 | */ | 27 | */ |
28 | using System; | ||
28 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
29 | using libsecondlife; | 30 | using libsecondlife; |
30 | using OpenSim.Framework; | 31 | using OpenSim.Framework; |
32 | using OpenSim.Framework.Servers; | ||
31 | using OpenSim.Framework.Communications; | 33 | using OpenSim.Framework.Communications; |
32 | using OpenSim.Framework.Communications.Cache; | 34 | using OpenSim.Framework.Communications.Cache; |
33 | 35 | ||
@@ -36,6 +38,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
36 | public class OGS1InventoryService : IInventoryServices | 38 | public class OGS1InventoryService : IInventoryServices |
37 | { | 39 | { |
38 | private string _inventoryServerUrl; | 40 | private string _inventoryServerUrl; |
41 | private Dictionary<LLUUID, InventoryRequest> m_RequestingInventory = new Dictionary<LLUUID, InventoryRequest>(); | ||
39 | 42 | ||
40 | public OGS1InventoryService(string inventoryServerUrl) | 43 | public OGS1InventoryService(string inventoryServerUrl) |
41 | { | 44 | { |
@@ -47,31 +50,96 @@ namespace OpenSim.Region.Communications.OGS1 | |||
47 | public void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, | 50 | public void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, |
48 | InventoryItemInfo itemCallBack) | 51 | InventoryItemInfo itemCallBack) |
49 | { | 52 | { |
50 | //TODO! Uncomment when all is done | 53 | |
51 | //SerializableInventory userInventory = null; | 54 | if (!m_RequestingInventory.ContainsKey(userID)) |
52 | 55 | { | |
53 | //RestClient inventoryServer = new RestClient(_inventoryServerUrl); | 56 | InventoryRequest request = new InventoryRequest(userID, folderCallBack, itemCallBack); |
54 | //inventoryServer.AddResourcePath("inventory"); | 57 | m_RequestingInventory.Add(userID, request); |
55 | //inventoryServer.AddResourcePath("user"); | 58 | RequestInventory(userID); |
56 | //inventoryServer.AddResourcePath(userID.ToStringHyphenated()); | 59 | } |
57 | |||
58 | //using (Stream userInventoryStream = inventoryServer.Request()) | ||
59 | //{ | ||
60 | // XmlSerializer x = new XmlSerializer(typeof(SerializableInventory)); | ||
61 | // userInventory = (SerializableInventory)x.Deserialize(userInventoryStream); | ||
62 | //} | ||
63 | } | 60 | } |
64 | 61 | ||
65 | public void AddNewInventoryFolder(LLUUID userID, InventoryFolderImpl folder) | 62 | private void RequestInventory(LLUUID userID) |
66 | { | 63 | { |
64 | try | ||
65 | { | ||
66 | RestObjectPosterResponse<InventoryCollection> requester = new RestObjectPosterResponse<InventoryCollection>(); | ||
67 | requester.ReturnResponseVal = InventoryResponse; | ||
68 | requester.BeginPostObject<LLUUID>(_inventoryServerUrl + "/GetInventory/", userID); | ||
69 | } | ||
70 | catch (Exception) | ||
71 | { | ||
72 | } | ||
73 | } | ||
74 | |||
75 | private void InventoryResponse(InventoryCollection response) | ||
76 | { | ||
77 | LLUUID userID = response.UserID; | ||
78 | if (m_RequestingInventory.ContainsKey(userID)) | ||
79 | { | ||
80 | |||
81 | InventoryFolderImpl rootFolder = null; | ||
82 | InventoryRequest request = m_RequestingInventory[userID]; | ||
83 | foreach (InventoryFolderBase folder in response.Folders) | ||
84 | { | ||
85 | if (folder.parentID == LLUUID.Zero) | ||
86 | { | ||
87 | InventoryFolderImpl newfolder = new InventoryFolderImpl(folder); | ||
88 | rootFolder = newfolder; | ||
89 | request.FolderCallBack(userID, newfolder); | ||
90 | } | ||
91 | } | ||
92 | |||
93 | if (rootFolder != null) | ||
94 | { | ||
95 | foreach (InventoryFolderBase folder in response.Folders) | ||
96 | { | ||
97 | if (folder.folderID != rootFolder.folderID) | ||
98 | { | ||
99 | InventoryFolderImpl newfolder = new InventoryFolderImpl(folder); | ||
100 | request.FolderCallBack(userID, newfolder); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | foreach (InventoryItemBase item in response.AllItems) | ||
105 | { | ||
106 | request.ItemCallBack(userID, item); | ||
107 | } | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | |||
112 | public void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder) | ||
113 | { | ||
114 | try | ||
115 | { | ||
116 | RestObjectPoster.BeginPostObject<InventoryFolderBase>(_inventoryServerUrl + "/NewFolder/", folder); | ||
117 | } | ||
118 | catch (Exception) | ||
119 | { | ||
120 | } | ||
67 | } | 121 | } |
68 | 122 | ||
69 | public void AddNewInventoryItem(LLUUID userID, InventoryItemBase item) | 123 | public void AddNewInventoryItem(LLUUID userID, InventoryItemBase item) |
70 | { | 124 | { |
125 | try | ||
126 | { | ||
127 | RestObjectPoster.BeginPostObject<InventoryItemBase>(_inventoryServerUrl + "/NewItem/", item); | ||
128 | } | ||
129 | catch (Exception) | ||
130 | { | ||
131 | } | ||
71 | } | 132 | } |
72 | 133 | ||
73 | public void DeleteInventoryItem(LLUUID userID, InventoryItemBase item) | 134 | public void DeleteInventoryItem(LLUUID userID, InventoryItemBase item) |
74 | { | 135 | { |
136 | try | ||
137 | { | ||
138 | RestObjectPoster.BeginPostObject<InventoryItemBase>(_inventoryServerUrl + "/DeleteItem/", item); | ||
139 | } | ||
140 | catch (Exception) | ||
141 | { | ||
142 | } | ||
75 | } | 143 | } |
76 | 144 | ||
77 | public void CreateNewUserInventory(LLUUID user) | 145 | public void CreateNewUserInventory(LLUUID user) |
@@ -84,5 +152,19 @@ namespace OpenSim.Region.Communications.OGS1 | |||
84 | } | 152 | } |
85 | 153 | ||
86 | #endregion | 154 | #endregion |
155 | |||
156 | public class InventoryRequest | ||
157 | { | ||
158 | public LLUUID UserID; | ||
159 | public InventoryFolderInfo FolderCallBack; | ||
160 | public InventoryItemInfo ItemCallBack; | ||
161 | |||
162 | public InventoryRequest(LLUUID userId, InventoryFolderInfo folderCall, InventoryItemInfo itemCall) | ||
163 | { | ||
164 | UserID = userId; | ||
165 | FolderCallBack = folderCall; | ||
166 | ItemCallBack = itemCall; | ||
167 | } | ||
168 | } | ||
87 | } | 169 | } |
88 | } \ No newline at end of file | 170 | } \ No newline at end of file |