[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);
private Interop.Messages.MessageIncomingCallback _messageReceivedCallback;
- private bool _registered = false;
-
internal event EventHandler<MessageReceivedEventArgs> _MessageReceived
{
add
{
- if (_registered == false && _messageReceived == null)
+ if (_messageReceived == null)
{
RegisterMessageReceivedEvent();
}
remove
{
_messageReceived -= value;
+ if (_messageReceived == null)
+ {
+ UnregisterMessageReceivedEvent();
+ }
}
}
{
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);
+ }
}
}
}