9d3ceb389fa0c6af4f32f437c25a91e628c46fe6
[platform/core/csapi/tizenfx.git] / src / Tizen.Network.IoTConnectivity / Tizen.Network.IoTConnectivity / Response.cs
1 /// Copyright 2016 by Samsung Electronics, Inc.,
2 ///
3 /// This software is the confidential and proprietary information
4 /// of Samsung Electronics, Inc. ("Confidential Information"). You
5 /// shall not disclose such Confidential Information and shall use
6 /// it only in accordance with the terms of the license agreement
7 /// you entered into with Samsung.
8
9 using System;
10
11 namespace Tizen.Network.IoTConnectivity
12 {
13     /// <summary>
14     /// This class represents response from a resource.
15     /// It provides APIs to manage response.
16     /// </summary>
17     public class Response : IDisposable
18     {
19         private bool _disposed = false;
20
21         /// <summary>
22         /// Constructor of Response
23         /// </summary>
24         /// <code>
25         /// Response response = new Response();
26         /// </code>
27         public Response() { }
28
29         /// <summary>
30         /// Destructor of the Response class.
31         /// </summary>
32         ~Response()
33         {
34             Dispose(false);
35         }
36
37         /// <summary>
38         /// Gets or sets the result from/into the reponse
39         /// </summary>
40         public ResponseCode Result { get; set; }
41
42         /// <summary>
43         /// Gets or sets the representation from/into the reponse
44         /// </summary>
45         public Representation Representation { get; set; }
46
47         /// <summary>
48         /// Gets or sets the options from/into the reponse
49         /// </summary>
50         public ResourceOptions Options { get; set; }
51
52         /// <summary>
53         /// Releases any unmanaged resources used by this object.
54         /// </summary>
55         public void Dispose()
56         {
57             Dispose(true);
58             GC.SuppressFinalize(this);
59         }
60
61         internal bool Send(IntPtr requestHandle)
62         {
63             IntPtr responseHandle = IntPtr.Zero;
64             int ret = Interop.IoTConnectivity.Server.Response.Create(requestHandle, out responseHandle);
65             if (ret != (int)IoTConnectivityError.None)
66             {
67                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
68                 return false;
69             }
70
71             ret = Interop.IoTConnectivity.Server.Response.SetResult(responseHandle, (int)Result);
72             if (ret != (int)IoTConnectivityError.None)
73             {
74                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
75                 Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
76                 return false;
77             }
78
79             if (Representation != null)
80             {
81                 ret = Interop.IoTConnectivity.Server.Response.SetRepresentation(responseHandle, Representation._representationHandle);
82                 if (ret != (int)IoTConnectivityError.None)
83                 {
84                     Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
85                     Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
86                     return false;
87                 }
88             }
89
90             if (Options != null)
91             {
92                 ret = Interop.IoTConnectivity.Server.Response.SetOptions(responseHandle, Options._resourceOptionsHandle);
93                 if (ret != (int)IoTConnectivityError.None)
94                 {
95                     Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
96                     Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
97                     return false;
98                 }
99             }
100
101             ret = Interop.IoTConnectivity.Server.Response.Send(responseHandle);
102             if (ret != (int)IoTConnectivityError.None)
103             {
104                 Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to send response");
105                 Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
106                 return false;
107             }
108
109             Interop.IoTConnectivity.Server.Response.Destroy(responseHandle);
110             return true;
111         }
112
113         /// <summary>
114         /// Releases any unmanaged resources used by this object. Can also dispose any other disposable objects.
115         /// </summary>
116         /// <param name="disposing">If true, disposes any disposable objects. If false, does not dispose disposable objects.</param>
117         protected virtual void Dispose(bool disposing)
118         {
119             if (_disposed)
120                 return;
121
122             if (disposing)
123             {
124             }
125
126             _disposed = true;
127         }
128     }
129 }