1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Serialization.Formatters;
using System.Collections;
using System.Collections.Generic;
using libsecondlife;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Data;
using OpenSim.Framework.Types;
namespace OpenSim.Region.Communications.OGS1
{
public class OGS1InventoryService : IInventoryServices
{
IUserServices _userServices;
IInventoryServices _inventoryServices;
public OGS1InventoryService(NetworkServersInfo networkConfig, IUserServices userServices) :
this(networkConfig.InventoryServerName, networkConfig.InventoryServerPort, userServices)
{
}
public OGS1InventoryService(string serverName, int serverPort, IUserServices userServices)
{
_userServices = userServices;
// we only need to register the tcp channel once, and we don't know which other modules use remoting
if (ChannelServices.GetChannel("tcp") == null)
{
// Creating a custom formatter for a TcpChannel sink chain.
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
IDictionary props = new Hashtable();
props["typeFilterLevel"] = TypeFilterLevel.Full;
// Pass the properties for the port setting and the server provider in the server chain argument. (Client remains null here.)
TcpChannel chan = new TcpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(chan, true);
}
string remotingUrl = string.Format("tcp://{0}:{1}/Inventory", serverName, serverPort);
_inventoryServices = (IInventoryServices)Activator.GetObject(typeof(IInventoryServices), remotingUrl);
}
#region IInventoryServices Members
public void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack)
{
_inventoryServices.RequestInventoryForUser(userID, folderCallBack, itemCallBack);
}
public void AddNewInventoryFolder(LLUUID userID, InventoryFolderBase folder)
{
_inventoryServices.AddNewInventoryFolder(userID, folder);
}
public void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
{
_inventoryServices.AddNewInventoryItem(userID, item);
}
public void DeleteInventoryItem(LLUUID userID, InventoryItemBase item)
{
_inventoryServices.DeleteInventoryItem(userID, item);
}
public List<InventoryFolderBase> RequestFirstLevelFolders(LLUUID folderID)
{
return _inventoryServices.RequestFirstLevelFolders(folderID);
}
public List<InventoryItemBase> RequestFolderItems(LLUUID folderID)
{
return _inventoryServices.RequestFolderItems(folderID);
}
public void GetRootFoldersForUser(LLUUID user, out LLUUID libraryFolder, out LLUUID personalFolder)
{
_inventoryServices.GetRootFoldersForUser(user, out libraryFolder, out personalFolder);
}
public void CreateNewUserInventory(LLUUID libraryRootId, LLUUID user)
{
throw new Exception("method not implemented");
}
#endregion
}
}
|