Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Messaging / Tizen.Messaging.Messages / MessagesEvent.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.Messaging.Messages
20 {
21     internal partial class MessagesManagerImpl
22     {
23         private event EventHandler<MessageReceivedEventArgs> _messageReceived;
24
25         private Interop.Messages.MessageIncomingCallback _messageReceivedCallback;
26
27         internal event EventHandler<MessageReceivedEventArgs> _MessageReceived
28         {
29             add
30             {
31                 if (_messageReceived == null)
32                 {
33                     RegisterMessageReceivedEvent();
34                 }
35                 _messageReceived += value;
36             }
37             remove
38             {
39                 _messageReceived -= value;
40                 if (_messageReceived == null)
41                 {
42                     UnregisterMessageReceivedEvent();
43                 }
44             }
45         }
46
47         private void RegisterMessageReceivedEvent()
48         {
49             _messageReceivedCallback = (IntPtr messageHandle, IntPtr userData) =>
50             {
51                 try
52                 {
53                     IntPtr duplicatedMessageHandle = IntPtr.Zero;
54
55                     DuplicateMessageHandle(messageHandle, out duplicatedMessageHandle);
56                     if (duplicatedMessageHandle != IntPtr.Zero)
57                     {
58                         int type = (int)MessageType.Unknown;
59                         int result = Interop.Messages.GetMessageType(duplicatedMessageHandle, out type);
60                         if (result != (int)MessagesError.None)
61                         {
62                             Log.Error(Globals.LogTag, "Failed to get message type, Error - " + (MessagesError)result);
63                         }
64
65                         switch ((MessageType)type)
66                         {
67                             case MessageType.Sms:
68                             {
69                                 var receivedMessage = new SmsMessage(duplicatedMessageHandle);
70                                 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
71                                 _messageReceived?.Invoke(null, args);
72                                 break;
73                             }
74                             case MessageType.Mms:
75                             {
76                                 var receivedMessage = new MmsMessage(duplicatedMessageHandle);
77                                 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
78                                 _messageReceived?.Invoke(null, args);
79                                 break;
80                             }
81                             case MessageType.CellBroadcast:
82                             {
83                                 var receivedMessage = new CBMessage(duplicatedMessageHandle);
84                                 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
85                                 _messageReceived?.Invoke(null, args);
86                                 break;
87                             }
88                             case MessageType.Push:
89                             {
90                                 var receivedMessage = new PushMessage(duplicatedMessageHandle);
91                                 MessageReceivedEventArgs args = new MessageReceivedEventArgs(receivedMessage);
92                                 _messageReceived?.Invoke(null, args);
93                                 break;
94                             }
95                             default:
96                             {
97                                 Log.Error(Globals.LogTag, "Invaild message type - " + type);
98                                 break;
99                             }
100                         }
101                     }
102                 }
103                 catch
104                 {
105                     Log.Error(Globals.LogTag, "Exception in Callback");
106                 }
107             };
108
109             int ret = Interop.Messages.SetMessageIncomingCb(_MessageServiceHandle, _messageReceivedCallback, IntPtr.Zero);
110             if (ret != (int)MessagesError.None)
111             {
112                 Log.Error(Globals.LogTag, "Failed to set message incoming callback, Error - " + (MessagesError)ret);
113             }
114         }
115
116         private void UnregisterMessageReceivedEvent()
117         {
118             int ret = Interop.Messages.UnsetMessageIncomingCb(_MessageServiceHandle);
119             if (ret != (int)MessagesError.None)
120             {
121                 Log.Error(Globals.LogTag, "Failed to unset message incoming callback, Error - " + (MessagesError)ret);
122             }
123         }
124     }
125 }