private void OnInboxChanged(object sender, MessageStoreChangedEventArgs e)
        {
            if (inboxChangeCallbacks.Count == 0 & receiveCallbacks.Count == 0)
            {
                return;
            }

            try
            {
                JObject json = new JObject();

                switch (e.Action)
                {
                case CommonTime.Notification.MessageAction.Created:
                {
                    json["action"] = "create";

                    break;
                }

                case CommonTime.Notification.MessageAction.Updated:
                {
                    json["action"] = "update";

                    break;
                }

                case CommonTime.Notification.MessageAction.Deleted:
                {
                    json["action"] = "delete";

                    break;
                }

                default:
                {
                    return;
                }
                }

                json["message"] = MessageFactory.Instance.MakeJObject(e.Message);

                PluginResult result = new PluginResult(PluginResult.Status.OK);

                result.Message      = json.ToString();
                result.KeepCallback = true;

                foreach (string callbackId in inboxChangeCallbacks.Values)
                {
                    DispatchCommandResult(result, callbackId);
                }

                CallReceiveCallbacks(MessageStore.Inbox, e.Message);
            }
            catch (Exception ex)
            {
                Logger.WarnFormat("An error occurred while processing inbox change: {0}", ex.Message);
            }
        }
        private void OnOutboxChanged(object sender, MessageStoreChangedEventArgs e)
        {
            if (outboxChangeCallbacks.Count == 0)
            {
                return;
            }

            try
            {
                JObject json = new JObject();

                switch (e.Action)
                {
                case CommonTime.Notification.MessageAction.Sending:
                {
                    json["action"] = "SENDING";

                    break;
                }

                case CommonTime.Notification.MessageAction.Sent:
                {
                    json["action"] = "SENT";

                    break;
                }

                case CommonTime.Notification.MessageAction.SendFailed:
                {
                    json["action"] = "FAILED";

                    break;
                }

                case CommonTime.Notification.MessageAction.SendFailedWillRetry:
                {
                    json["action"] = "FAILED_WILL_RETRY";

                    break;
                }

                default:
                {
                    return;
                }
                }

                json["message"] = MessageFactory.Instance.MakeJObject(e.Message);

                PluginResult result = new PluginResult(PluginResult.Status.OK);

                result.Message      = json.ToString();
                result.KeepCallback = true;

                foreach (string callbackId in outboxChangeCallbacks.Values)
                {
                    DispatchCommandResult(result, callbackId);
                }
            }
            catch (Exception ex)
            {
                Logger.WarnFormat("An error occurred while processing outbox change: {0}", ex.Message);
            }
        }