using System.Collections.ObjectModel;
namespace TestProject;
/// <summary>
/// 메인 페이지
/// </summary>
public partial class MainPage : ContentPage
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 메시지 주제
/// </summary>
private readonly string MESSAGE_SUBJECT = "TEST_MESSAGE";
/// <summary>
/// 수신 컬렉션
/// </summary>
private ObservableCollection<string> receiveCollection = new ObservableCollection<string>();
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainPage()
/// <summary>
/// 생성자
/// </summary>
public MainPage()
{
InitializeComponent();
this.receiveCollectionView.ItemsSource = this.receiveCollection;
this.sendButton.Clicked += sendButton_Clicked;
this.subscribeButton.Clicked += subscribeButton_Clicked;
this.unsubscribeButton.Clicked += unsubscribeButton_Clicked;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 메시지 보내기 버튼 클릭시 처리하기 - sendButton_Clicked(sender, e)
/// <summary>
/// 메시지 보내기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private async void sendButton_Clicked(object sender, EventArgs e)
{
string message = this.sendEntry.Text;
if(string.IsNullOrEmpty(message))
{
await DisplayAlert("INFORMATION", "보낼 메시지를 입력해 주시기 바랍니다.", "확인");
return;
}
MessagingCenter.Send<MainPage, string>(this, MESSAGE_SUBJECT, $"[{DateTime.Now:HH:mm:ss}] {message}");
}
#endregion
#region 메시지 구독하기 버튼 클릭시 처리하기 - subscribeButton_Clicked(sender, e)
/// <summary>
/// 메시지 구독하기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void subscribeButton_Clicked(object sender, EventArgs e)
{
MessagingCenter.Subscribe<MainPage, string>
(
this.subscribeButton,
MESSAGE_SUBJECT,
(sender, args) => { this.receiveCollection.Add(args); }
);
}
#endregion
#region 구독 취소하기 버튼 클릭시 처리하기 - unsubscribeButton_Clicked(sender, e)
/// <summary>
/// 구독 취소하기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void unsubscribeButton_Clicked(object sender, EventArgs e)
{
MessagingCenter.Unsubscribe<MainPage, string>(this.subscribeButton, MESSAGE_SUBJECT);
}
#endregion
}