Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.IoTConnectivity / Tizen.Network.IoTConnectivity / Response.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
18 using System;
19
20 namespace Tizen.Network.IoTConnectivity
21 {
22     /// <summary>
23     /// This class represents response from a resource.
24     /// It provides APIs to manage response.
25     /// </summary>
26     /// <since_tizen> 3 </since_tizen>
27     public class Response : IDisposable
28     {
29         private bool _disposed = false;
30
31         /// <summary>
32         /// Constructor of Response.
33         /// </summary>
34         /// <since_tizen> 3 </since_tizen>
35         /// <code>
36         /// Response response = new Response();
37         /// </code>
38         public Response() { }
39
40         /// <summary>
41         /// Destructor of the Response class.
42         /// </summary>
43         ~Response()
44         {
45             Dispose(false);
46         }
47
48         /// <summary>
49         /// Gets or sets the result from/into the response.
50         /// </summary>
51         /// <since_tizen> 3 </since_tizen>
52         /// <value>The result from/into the response.</value>
53         public ResponseCode Result { get; set; }
54
55         /// <summary>
56         /// Gets or sets the representation from/into the response.
57         /// </summary>
58         /// <since_tizen> 3 </since_tizen>
59         /// <value>The representation from/into the response.</value>
60         public Representation Representation { get; set; }
61
62         /// <summary>
63         /// Gets or sets the options from/into the response.
64         /// </summary>
65         /// <since_tizen> 3 </since_tizen>
66         /// <value>The options from/into the response.</value>
67         public ResourceOptions Options { get; set; }
68
69         /// <summary>
70         /// Releases any unmanaged resources used by this object.
71         /// </summary>
72         /// <since_tizen> 3 </since_tizen>
73         public void Dispose()
74         {
75             Dispose(true);
76             GC.SuppressFinalize(this);
77         }
78
79         internal bool Send(IntPtr requestHandle)
80         {
81             IntPtr responseHandle = IntPtr.Zero;
82             int ret = Interop.IoTConnectivity.Server.Response.Create(requestHandle, out responseHandle);
83             if (ret != (int)IoTConnectivityError.None)
84             {
85                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
86                 return false;
87             }
88
89             ret = Interop.IoTConnectivity.Server.Response.SetResult(responseHandle, (int)Result);
90             if (ret != (int)IoTConnectivityError.None)
91             {
92                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
93                 Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
94                 return false;
95             }
96
97             if (Representation != null)
98             {
99                 ret = Interop.IoTConnectivity.Server.Response.SetRepresentation(responseHandle, Representation._representationHandle);
100                 if (ret != (int)IoTConnectivityError.None)
101                 {
102                     Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
103                     Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
104                     return false;
105                 }
106             }
107
108             if (Options != null)
109             {
110                 ret = Interop.IoTConnectivity.Server.Response.SetOptions(responseHandle, Options._resourceOptionsHandle);
111                 if (ret != (int)IoTConnectivityError.None)
112                 {
113                     Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
114                     Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
115                     return false;
116                 }
117             }
118
119             ret = Interop.IoTConnectivity.Server.Response.Send(responseHandle);
120             if (ret != (int)IoTConnectivityError.None)
121             {
122                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
123                 Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
124                 return false;
125             }
126
127             Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
128             return true;
129         }
130
131         /// <summary>
132         /// Releases any unmanaged resources used by this object. Can also dispose any other disposable objects.
133         /// </summary>
134         /// <since_tizen> 3 </since_tizen>
135         /// <param name="disposing">If true, disposes any disposable objects. If false, does not dispose disposable objects.</param>
136         protected virtual void Dispose(bool disposing)
137         {
138             if (_disposed)
139                 return;
140
141             if (disposing)
142             {
143             }
144
145             _disposed = true;
146         }
147     }
148 }