aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
blob: 2ec4d10729e922c0209560b2786b826553cbacd9 (plain)
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
    }
}