Wrapper for the application message center
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; }
}
}



Comments