modify logic for event register/unregister
authorKyeonghun Lee <kh9090.lee@samsung.com>
Tue, 14 Mar 2017 06:51:01 +0000 (15:51 +0900)
committerKyeonghun Lee <kh9090.lee@samsung.com>
Tue, 14 Mar 2017 08:45:59 +0000 (17:45 +0900)
Change-Id: I8e6dc6c31fa6ce098ed87668275274305065b28e
Signed-off-by: Kyeonghun Lee <kh9090.lee@samsung.com>
src/Tizen.Messaging/Interop/Interop.Messages.cs
src/Tizen.Messaging/Tizen.Messaging.Messages/MessagesEvent.cs

index c68e3f1..7697262 100755 (executable)
@@ -108,6 +108,9 @@ internal static partial class Interop
         [DllImport(Libraries.Messages, EntryPoint = "messages_set_message_incoming_cb")]
         internal static extern int SetMessageIncomingCb(IntPtr serviceHandle, MessageIncomingCallback cb, IntPtr userData);
 
+        [DllImport(Libraries.Messages, EntryPoint = "messages_unset_message_incoming_cb")]
+        internal static extern int UnsetMessageIncomingCb(IntPtr serviceHandle);
+
         [DllImport(Libraries.Messages, EntryPoint = "messages_send_message")]
         internal static extern int SendMessage(IntPtr serviceHandle, IntPtr messageHandle, bool saveToSentbox, MessageSentCallback cb, IntPtr userData);
 
index bae6475..dd0d616 100755 (executable)
@@ -24,13 +24,11 @@ namespace Tizen.Messaging.Messages
 
         private Interop.Messages.MessageIncomingCallback _messageReceivedCallback;
 
-        private bool _registered = false;
-
         internal event EventHandler<MessageReceivedEventArgs> _MessageReceived
         {
             add
             {
-                if (_registered == false && _messageReceived == null)
+                if (_messageReceived == null)
                 {
                     RegisterMessageReceivedEvent();
                 }
@@ -39,6 +37,10 @@ namespace Tizen.Messaging.Messages
             remove
             {
                 _messageReceived -= value;
+                if (_messageReceived == null)
+                {
+                    UnregisterMessageReceivedEvent();
+                }
             }
         }
 
@@ -109,8 +111,15 @@ namespace Tizen.Messaging.Messages
             {
                 Log.Error(Globals.LogTag, "Failed to set message incoming callback, Error - " + (MessagesError)ret);
             }
+        }
 
-            _registered = true;
+        private void UnregisterMessageReceivedEvent()
+        {
+            int ret = Interop.Messages.UnsetMessageIncomingCb(_MessageServiceHandle);
+            if (ret != (int)MessagesError.None)
+            {
+                Log.Error(Globals.LogTag, "Failed to unset message incoming callback, Error - " + (MessagesError)ret);
+            }
         }
     }
 }