aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs')
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs110
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*/
28using System;
28using System.Collections.Generic; 29using System.Collections.Generic;
29using libsecondlife; 30using libsecondlife;
30using OpenSim.Framework; 31using OpenSim.Framework;
32using OpenSim.Framework.Servers;
31using OpenSim.Framework.Communications; 33using OpenSim.Framework.Communications;
32using OpenSim.Framework.Communications.Cache; 34using 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