Update C# API reference according to doc guide page
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.IoTConnectivity / Tizen.Network.IoTConnectivity / IoTConnectivityServerManager.cs
index 8af3813..4256414 100755 (executable)
@@ -22,11 +22,16 @@ namespace Tizen.Network.IoTConnectivity
     /// <summary>
     /// IoT connectivity server manager consists of server side APIs.
     /// </summary>
+    /// <since_tizen>3</since_tizen>
     public static class IoTConnectivityServerManager
     {
+        private static int s_requestId = 1;
+        private static Dictionary<IntPtr, Interop.IoTConnectivity.Server.Resource.RequestHandlerCallback> s_RequestHandlerCallbackMap = new Dictionary<IntPtr, Interop.IoTConnectivity.Server.Resource.RequestHandlerCallback>();
+
         /// <summary>
         /// Initializes IoTCon. Call this API to start IoTCon.
         /// </summary>
+        /// <since_tizen>3</since_tizen>
         /// <remarks>
         /// @a filePath point to a file for handling secure virtual resources.
         /// The file that is CBOR(Concise Binary Object Representation)-format must already exist
@@ -36,11 +41,16 @@ namespace Tizen.Network.IoTConnectivity
         /// http://tizen.org/privilege/network.get \n
         /// http://tizen.org/privilege/internet
         /// </privilege>
+        /// <privlevel>public</privlevel>
         /// <param name="filePath">The file path to point to storage for handling secure virtual resources.</param>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
         /// <post>
         /// You must call Deinitialize() if IoTCon API is no longer needed.
         /// </post>
         /// <seealso cref="Deinitialize()"/>
+        /// <exception cref="NotSupportedException">Thrown when the iotcon is not supported</exception>
+        /// <exception cref="ArgumentException">Thrown when there is an invalid parameter</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when app does not have privilege to access</exception>
         /// <code>
         /// string filePath = "../../res/iotcon-test-svr-db-server.dat";
         /// IoTConnectivityServerManager.Initialize(filePath);
@@ -58,9 +68,11 @@ namespace Tizen.Network.IoTConnectivity
         /// <summary>
         /// Deinitializes IoTCon.
         /// </summary>
+        /// <since_tizen>3</since_tizen>
         /// <remarks>
         /// This API must be called if IoTCon API is no longer needed.
         /// </remarks>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
         /// <pre>
         /// Initialize() should be called to initialize.
         /// </pre>
@@ -71,21 +83,32 @@ namespace Tizen.Network.IoTConnectivity
         public static void Deinitialize()
         {
             _resources.Clear();
+            s_requestId = 1;
+            s_RequestHandlerCallbackMap.Clear();
+
             Interop.IoTConnectivity.Client.IoTCon.Deinitialize();
         }
 
         /// <summary>
         /// Registers a resource in IoTCon server
         /// </summary>
+        /// <since_tizen>3</since_tizen>
         /// <privilege>
         /// http://tizen.org/privilege/internet
         /// </privilege>
+        /// <privlevel>public</privlevel>
         /// <param name="resource">The resource to register</param>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
         /// <pre>
         /// Initialize() should be called to initialize.
         /// </pre>
         /// <seealso cref="Resource"/>
         /// <seealso cref="LiteResource"/>
+        /// <exception cref="NotSupportedException">Thrown when the iotcon is not supported</exception>
+        /// <exception cref="ArgumentException">Thrown when there is an invalid parameter</exception>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid</exception>
+        /// <exception cref="OutOfMemoryException">Thrown when there is not enough memory</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when app does not have privilege to access</exception>
         /// <code>
         /// ResourceTypes types = new ResourceTypes(new List<string>(){ "org.tizen.light" });
         /// Attributes attributes = new Attributes { { "state", "ON" }};
@@ -98,12 +121,38 @@ namespace Tizen.Network.IoTConnectivity
         /// </code>
         public static void RegisterResource(Resource resource)
         {
+            Log.Info(IoTConnectivityErrorFactory.LogTag, "...");
+
+            IntPtr id = IntPtr.Zero;
+            lock (s_RequestHandlerCallbackMap)
+            {
+                id = (IntPtr)s_requestId++;
+            }
+
+            s_RequestHandlerCallbackMap[id] = (IntPtr r_resource, IntPtr request, IntPtr userData) =>
+            {
+                int requestId = (int)userData;
+
+                Log.Info(IoTConnectivityErrorFactory.LogTag, "Received s_RequestHandlerCallbackMap : " + requestId);
+
+                if (request == IntPtr.Zero)
+                {
+                    Log.Error(IoTConnectivityErrorFactory.LogTag, "request is IntPtr.Zero");
+                    return;
+                }
+                resource.OnRequest(r_resource, request, userData);
+            };
+
             IntPtr handle = IntPtr.Zero;
-            int ret = Interop.IoTConnectivity.Server.Resource.Create(resource.UriPath, resource.Types._resourceTypeHandle, resource.Interfaces.ResourceInterfacesHandle, (int)resource.Policy, resource.OnRequest, IntPtr.Zero, out handle);
-            if (ret != (int)IoTConnectivityError.None)
+            int errorCode = Interop.IoTConnectivity.Server.Resource.Create(resource.UriPath, resource.Types._resourceTypeHandle, resource.Interfaces.ResourceInterfacesHandle, (int)resource.Policy, s_RequestHandlerCallbackMap[id], id, out handle);
+            if (errorCode != (int)IoTConnectivityError.None)
             {
                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed create resource");
-                throw IoTConnectivityErrorFactory.GetException(ret);
+                lock (s_RequestHandlerCallbackMap)
+                {
+                    s_RequestHandlerCallbackMap.Remove(id);
+                }
+                throw IoTConnectivityErrorFactory.GetException(errorCode);
             }
             else
             {
@@ -113,8 +162,51 @@ namespace Tizen.Network.IoTConnectivity
         }
 
         /// <summary>
+        /// Unregisters a resource in IoTCon server
+        /// </summary>
+        /// <since_tizen>3</since_tizen>
+        /// <privilege>
+        /// http://tizen.org/privilege/internet
+        /// </privilege>
+        /// <privlevel>public</privlevel>
+        /// <param name="resource">The resource to unregister</param>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
+        /// <pre>
+        /// Initialize() should be called to initialize.
+        /// </pre>
+        /// <seealso cref="Resource"/>
+        /// <seealso cref="LiteResource"/>
+        /// <exception cref="NotSupportedException">Thrown when the iotcon is not supported</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when app does not have privilege to access</exception>
+        /// <code>
+        /// ResourceTypes types = new ResourceTypes(new List<string>(){ "org.tizen.light" });
+        /// Attributes attributes = new Attributes { { "state", "ON" }};
+        /// Resource res = new LiteResource("/room/1", types, ResourcePolicy.Discoverable, attributes);
+        /// IoTConnectivityServerManager.RegisterResource(res);
+        /// try {
+        ///     IoTConnectivityServerManager.UnregisterResource(res);
+        /// } catch(Exception ex) {
+        ///     Console.Log("Exception caught : " + ex.Message);
+        /// }
+        /// </code>
+        public static void UnregisterResource(Resource resource)
+        {
+            if (resource != null)
+            {
+                if (resource.ResourceHandle != IntPtr.Zero)
+                {
+                    Interop.IoTConnectivity.Server.Resource.Destroy(resource.ResourceHandle);
+                    resource.ResourceHandle = IntPtr.Zero;
+                }
+
+                _resources.Remove(resource);
+            }
+        }
+
+        /// <summary>
         /// Starts presence of a server
         /// </summary>
+        /// <since_tizen>3</since_tizen>
         /// <remarks>
         /// Use this API to send server's announcements to clients.
         /// Server can call this API when online for the first time or come back from offline to online.\n
@@ -124,7 +216,9 @@ namespace Tizen.Network.IoTConnectivity
         /// <privilege>
         /// http://tizen.org/privilege/internet
         /// </privilege>
+        /// <privlevel>public</privlevel>
         /// <param name="time">The interval of announcing presence in seconds.</param>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
         /// <pre>
         /// Initialize() should be called to initialize.
         /// </pre>
@@ -132,6 +226,9 @@ namespace Tizen.Network.IoTConnectivity
         /// <seealso cref="IoTConnectivityClientManager.StopReceivingPresence()"/>
         /// <seealso cref="IoTConnectivityClientManager.PresenceReceived"/>
         /// <seealso cref="StopSendingPresence()"/>
+        /// <exception cref="NotSupportedException">Thrown when the iotcon is not supported</exception>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when app does not have privilege to access</exception>
         /// <code>
         /// try {
         ///     IoTConnectivityServerManager.StartSendingPresence(120);
@@ -152,6 +249,7 @@ namespace Tizen.Network.IoTConnectivity
         /// <summary>
         /// Stops presence of a server.
         /// </summary>
+        /// <since_tizen>3</since_tizen>
         /// <remarks>
         /// Use this API to stop sending server's announcements to clients.
         /// Server can call this API when terminating, entering to offline or out of network.
@@ -159,6 +257,8 @@ namespace Tizen.Network.IoTConnectivity
         /// <privilege>
         /// http://tizen.org/privilege/internet
         /// </privilege>
+        /// <privlevel>public</privlevel>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
         /// <pre>
         /// Initialize() should be called to initialize.
         /// </pre>
@@ -166,6 +266,9 @@ namespace Tizen.Network.IoTConnectivity
         /// <seealso cref="IoTConnectivityClientManager.StopReceivingPresence()"/>
         /// <seealso cref="IoTConnectivityClientManager.PresenceReceived"/>
         /// <seealso cref="StartSendingPresence()"/>
+        /// <exception cref="NotSupportedException">Thrown when the iotcon is not supported</exception>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when app does not have privilege to access</exception>
         /// <code>
         /// IoTConnectivityServerManager.StopSendingPresence();
         /// </code>
@@ -182,16 +285,19 @@ namespace Tizen.Network.IoTConnectivity
         /// <summary>
         /// Sets the device name
         /// </summary>
+        /// <since_tizen>3</since_tizen>
         /// <remarks>
         /// This API sets the name of the local device (the device calling the API).\n
         /// If the device name is set, clients can get the name using <see cref="IoTConnectivityClientManager.StartFindingDeviceInformation()"/>.
-        /// Clients can also get the name using <see cref="RemoteResource.DeviceName"/> property.
         /// </remarks>
         /// <param name="deviceName">The device name</param>
+        /// <feature>http://tizen.org/feature/iot.ocf</feature>
         /// <seealso cref="IoTConnectivityClientManager.DeviceInformationFound"/>
         /// <seealso cref="IoTConnectivityClientManager.StartFindingDeviceInformation()"/>
         /// <seealso cref="DeviceInformationFoundEventArgs"/>
-        /// <seealso cref="RemoteResource.DeviceName"/>
+        /// <exception cref="NotSupportedException">Thrown when the iotcon is not supported</exception>
+        /// <exception cref="InvalidOperationException">Thrown when the operation is invalid</exception>
+        /// <exception cref="UnauthorizedAccessException">Thrown when app does not have privilege to access</exception>
         /// <code>
         /// IoTConnectivityServerManager.SetDeviceName("my-tizen");
         /// </code>