Wrapper for the application message center

PHOTO EMBED

Mon Mar 14 2022 15:13:30 GMT+0000 (Coordinated Universal Time)

Saved by @Bommelding #c# #asp.net

using System;
using MMEA.MessageCenter.Events;
using Xamarin.Essentials;

namespace MMEA.MessageCenter
{
    /// <summary>
    ///     Wrapper used to communicate with classes through the Xamarin.MessagingCenter
    /// </summary>
    /// <remarks>
    ///     Made for easier debugging
    /// </remarks>
    public interface IApplicationMessageCenter
    {
        /// <summary>
        ///     Listen to messages send through the Messaging Center
        /// </summary>
        /// <param name="subscribableMessage"></param>
        /// <param name="callback"></param>
        /// <typeparam name="T">Type of the content that is within the message</typeparam>
        void Subscribe<T>(SubscribableMessage<T> subscribableMessage, Action<IApplicationMessageCenter, T> callback);

        /// <summary>
        ///     Send a message to the MessagingCenter
        /// </summary>
        /// <param name="message"></param>
        /// <typeparam name="T">Type of the content send</typeparam>
        void Send<T>(SubscribableMessage<T> message);
    }
  
    /// <inheritdoc />
    public class ApplicationMessageCenter : IApplicationMessageCenter
    {
        private readonly IMessagingCenter _messageCenter;

        /// <summary>
        ///     Default constructor
        /// </summary>
        /// <param name="messagingCenter"></param>
        public ApplicationMessageCenter(IMessagingCenter messagingCenter)
        {
            _messageCenter = messagingCenter;
        }

        /// <inheritdoc />
        public void Subscribe<T>(SubscribableMessage<T> subscribableMessage,
            Action<IApplicationMessageCenter, T> callback)
        {
            _messageCenter.Subscribe(this, subscribableMessage.MessageName, callback);
        }

        /// <inheritdoc />
        public void Send<T>(SubscribableMessage<T> message)
        {
            _messageCenter.Send<IApplicationMessageCenter, T>(this, message.MessageName, message.Content);
        }
    }

    public static class Messages
    {
        public static SubscribableMessage<ConnectivityChangedEventArgs> ConnectivityChanged(
            ConnectivityChangedEventArgs eventArgs = null)
        {
            return new SubscribableMessage<ConnectivityChangedEventArgs>
            {
                MessageName = "ConnectivityChanged",
                Content = eventArgs
            };
        }

        public static SubscribableMessage<float?> ButtonOpacityChange(float? opacity)
        {
            return new SubscribableMessage<float?>
            {
                MessageName = "ButtonOpacityChange",
                Content = opacity
            };
        }

        public static SubscribableMessage<object> MonitorActivation()
        {
            return new SubscribableMessage<object>
            {
                MessageName = "MonitorActivation",
                Content = null
            };
        }

        public static SubscribableMessage<LoadMessageCarouselEvent> OpenMessageCarousel(
            LoadMessageCarouselEvent carouselEvent = null)
        {
            return new SubscribableMessage<LoadMessageCarouselEvent>
            {
                MessageName = "OpenMessageCarousel",
                Content = carouselEvent
            };
        }

        public static SubscribableMessage<int?> NotificationOpened(int? remoteMessageId = null)
        {
            return new SubscribableMessage<int?>
            {
                MessageName = "NotificationOpened",
                Content = remoteMessageId
            };
        }

        public static SubscribableMessage<object> DeviceActivated()
        {
            return new SubscribableMessage<object>
            {
                MessageName = "DeviceActivated",
                Content = null
            };
        }

        public static SubscribableMessage<Guid?> MessageViewed(Guid? messageId = null)
        {
            return new SubscribableMessage<Guid?>
            {
                MessageName = "MessageViewed",
                Content = messageId
            };
        }

        public static SubscribableMessage<LikedMessageEvent> MessageLiked(LikedMessageEvent linkedMessageEvent = null)
        {
            return new SubscribableMessage<LikedMessageEvent>
            {
                MessageName = "MessageLiked",
                Content = linkedMessageEvent
            };
        }

        public static SubscribableMessage<object> RefreshTranslationLabels()
        {
            return new SubscribableMessage<object>
            {
                MessageName = "RefreshTranslationLabels",
                Content = null
            };
        }

        public static SubscribableMessage<string> SearchExecuted(string content = null)
        {
            return new SubscribableMessage<string>
            {
                MessageName = "SearchExecuted",
                Content = content
            };
        }

        public static SubscribableMessage<bool> ChangeOrientationAllowance(bool allowed = false)
        {
            return new SubscribableMessage<bool>
            {
                MessageName = "ChangeOrientationAllowance",
                Content = allowed
            };
        }

        public static SubscribableMessage<bool> SyncLocalMessages(bool forceRefresh = false)
        {
            return new SubscribableMessage<bool>
            {
                MessageName = "SyncLocalMessages",
                Content = forceRefresh
            };
        }

        public static SubscribableMessage<bool> LocalMessagesSynced(bool forceRefresh = false)
        {
            return new SubscribableMessage<bool>
            {
                MessageName = "LocalMessagesSynced",
                Content = forceRefresh
            };
        }

        public static SubscribableMessage<int?> AddMessage(int? messageId = null)
        {
            return new SubscribableMessage<int?>
            {
                MessageName = "AddMessage",
                Content = messageId
            };
        }
    }

    public class SubscribableMessage<T>
    {
        public string MessageName { get; set; }

        public T Content { get; set; }
    }
}
content_copyCOPY