change license
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.IoTConnectivity / Tizen.Network.IoTConnectivity / IoTConnectivityServerManager.cs
1  /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18
19 namespace Tizen.Network.IoTConnectivity
20 {
21     /// <summary>
22     /// IoT connectivity server manager consists of server side APIs.
23     /// </summary>
24     public static class IoTConnectivityServerManager
25     {
26         /// <summary>
27         /// Initializes IoTCon. Call this API to start IoTCon.
28         /// </summary>
29         /// <remarks>
30         /// @a filePath point to a file for handling secure virtual resources.
31         /// The file that is CBOR(Concise Binary Object Representation)-format must already exist
32         /// in @a filePath. We recommend to use application-local file for @a filePath.
33         /// </remarks>
34         /// <privilege>
35         /// http://tizen.org/privilege/network.get \n
36         /// http://tizen.org/privilege/internet
37         /// </privilege>
38         /// <param name="filePath">The file path to point to storage for handling secure virtual resources.</param>
39         /// <post>
40         /// You must call Deinitialize() if IoTCon API is no longer needed.
41         /// </post>
42         /// <seealso cref="Deinitialize()"/>
43         /// <code>
44         /// string filePath = "../../res/iotcon-test-svr-db-server.dat";
45         /// IoTConnectivityServerManager.Initialize(filePath);
46         /// </code>
47         public static void Initialize(string filePath)
48         {
49             int ret = Interop.IoTConnectivity.Client.IoTCon.Initialize(filePath);
50             if (ret != (int)IoTConnectivityError.None)
51             {
52                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to initialize");
53                 throw IoTConnectivityErrorFactory.GetException(ret);
54             }
55         }
56
57         /// <summary>
58         /// Deinitializes IoTCon.
59         /// </summary>
60         /// <remarks>
61         /// This API must be called if IoTCon API is no longer needed.
62         /// </remarks>
63         /// <pre>
64         /// Initialize() should be called to initialize.
65         /// </pre>
66         /// <seealso cref="Initialize()"/>
67         /// <code>
68         /// IoTConnectivityServerManager.Deinitialize();
69         /// </code>
70         public static void Deinitialize()
71         {
72             Interop.IoTConnectivity.Client.IoTCon.Deinitialize();
73         }
74
75         /// <summary>
76         /// Registers a resource in IoTCon server
77         /// </summary>
78         /// <privilege>
79         /// http://tizen.org/privilege/internet
80         /// </privilege>
81         /// <param name="resource">The resource to register</param>
82         /// <pre>
83         /// Initialize() should be called to initialize.
84         /// </pre>
85         /// <seealso cref="Resource"/>
86         /// <seealso cref="LiteResource"/>
87         /// <code>
88         /// ResourceTypes types = new ResourceTypes(new List<string>(){ "org.tizen.light" });
89         /// Attributes attributes = new Attributes { { "state", "ON" }};
90         /// Resource res = new LiteResource("/room/1", types, ResourcePolicy.Discoverable, attributes);
91         /// try {
92         ///     IoTConnectivityServerManager.RegisterResource(res);
93         /// } catch(Exception ex) {
94         ///     Console.Log("Exception caught : " + ex.Message);
95         /// }
96         /// </code>
97         public static void RegisterResource(Resource resource)
98         {
99             IntPtr handle = IntPtr.Zero;
100             int ret = Interop.IoTConnectivity.Server.Resource.Create(resource.UriPath, resource.Types._resourceTypeHandle, resource.Interfaces.ResourceInterfacesHandle, (int)resource.Policy, resource.OnRequest, IntPtr.Zero, out handle);
101             if (ret != (int)IoTConnectivityError.None)
102             {
103                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed create resource");
104                 throw IoTConnectivityErrorFactory.GetException(ret);
105             }
106             else
107             {
108                 resource.ResourceHandle = handle;
109             }
110         }
111
112         /// <summary>
113         /// Starts presence of a server
114         /// </summary>
115         /// <remarks>
116         /// Use this API to send server's announcements to clients.
117         /// Server can call this API when online for the first time or come back from offline to online.\n
118         /// If @a time is 0, server will set default value as 60 seconds.\n
119         /// If @a time is very big, server will set maximum value as (60 * 60 * 24) seconds, (24 hours).
120         /// </remarks>
121         /// <privilege>
122         /// http://tizen.org/privilege/internet
123         /// </privilege>
124         /// <param name="time">The interval of announcing presence in seconds.</param>
125         /// <pre>
126         /// Initialize() should be called to initialize.
127         /// </pre>
128         /// <seealso cref="IoTConnectivityClientManager.StartReceivingPresence()"/>
129         /// <seealso cref="IoTConnectivityClientManager.StopReceivingPresence()"/>
130         /// <seealso cref="IoTConnectivityClientManager.PresenceReceived"/>
131         /// <seealso cref="StopSendingPresence()"/>
132         /// <code>
133         /// try {
134         ///     IoTConnectivityServerManager.StartSendingPresence(120);
135         /// } catch(Exception ex) {
136         ///     Console.Log("Exception caught : " + ex.Message);
137         /// }
138         /// </code>
139         public static void StartSendingPresence(uint time)
140         {
141             int ret = Interop.IoTConnectivity.Server.IoTCon.StartPresence(time);
142             if (ret != (int)IoTConnectivityError.None)
143             {
144                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to start presence");
145                 throw IoTConnectivityErrorFactory.GetException(ret);
146             }
147         }
148
149         /// <summary>
150         /// Stops presence of a server.
151         /// </summary>
152         /// <remarks>
153         /// Use this API to stop sending server's announcements to clients.
154         /// Server can call this API when terminating, entering to offline or out of network.
155         /// </remarks>
156         /// <privilege>
157         /// http://tizen.org/privilege/internet
158         /// </privilege>
159         /// <pre>
160         /// Initialize() should be called to initialize.
161         /// </pre>
162         /// <seealso cref="IoTConnectivityClientManager.StartReceivingPresence()"/>
163         /// <seealso cref="IoTConnectivityClientManager.StopReceivingPresence()"/>
164         /// <seealso cref="IoTConnectivityClientManager.PresenceReceived"/>
165         /// <seealso cref="StartSendingPresence()"/>
166         /// <code>
167         /// IoTConnectivityServerManager.StopSendingPresence();
168         /// </code>
169         public static void StopSendingPresence()
170         {
171             int ret = Interop.IoTConnectivity.Server.IoTCon.StopPresence();
172             if (ret != (int)IoTConnectivityError.None)
173             {
174                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed cancel presence");
175                 throw IoTConnectivityErrorFactory.GetException(ret);
176             }
177         }
178
179         /// <summary>
180         /// Sets the device name
181         /// </summary>
182         /// <remarks>
183         /// This API sets the name of the local device (the device calling the API).\n
184         /// If the device name is set, clients can get the name using <see cref="IoTConnectivityClientManager.StartFindingDeviceInformation()"/>.
185         /// Clients can also get the name using <see cref="RemoteResource.DeviceName"/> property.
186         /// </remarks>
187         /// <param name="deviceName">The device name</param>
188         /// <seealso cref="IoTConnectivityClientManager.DeviceInformationFound"/>
189         /// <seealso cref="IoTConnectivityClientManager.StartFindingDeviceInformation()"/>
190         /// <seealso cref="DeviceInformationFoundEventArgs"/>
191         /// <seealso cref="RemoteResource.DeviceName"/>
192         /// <code>
193         /// IoTConnectivityServerManager.SetDeviceName("my-tizen");
194         /// </code>
195         public static void SetDeviceName(string deviceName)
196         {
197             int ret = Interop.IoTConnectivity.Server.IoTCon.SetDeviceName(deviceName);
198             if (ret != (int)IoTConnectivityError.None)
199             {
200                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed set device name");
201                 throw IoTConnectivityErrorFactory.GetException(ret);
202             }
203         }
204     }
205 }