TourIAm/TIAMSharedUI/Pages/ChatPage.razor

112 lines
3.1 KiB
Plaintext

@page "/chat"
@using TIAMWebApp.Shared.Application.Services
@inject SignalRService SignalRService
<h3>Chat</h3>
<div class="container mt-5">
<div class="card">
<div class="card-header">
<h3>Chat</h3>
</div>
<div class="card-body">
<ul class="list-unstyled">
@foreach (var message in messages)
{
<li class="mb-2">
<div class="alert alert-secondary" role="alert">
@message
</div>
</li>
}
</ul>
</div>
<div class="card-footer">
<div class="input-group">
<input @bind="newMessage" @bind:event="oninput" class="form-control" placeholder="Enter your message" />
<button @onclick="SendMessage" class="btn btn-primary">Send</button>
<button @onclick="MuteChat" class="btn btn-danger ms-2">Mute Chat</button>
</div>
</div>
</div>
</div>
<NavLink href="tictactoe">
TicTacToe
</NavLink>
<NavLink href="create-payment">
Create Payment
</NavLink>
<NavLink href="@($"mytransfers/{Guid.Parse("108E5A63-AA9E-47BE-ACFA-00306FFC5215")}")">
My trasnfers
</NavLink>
@code {
private string userName;
private string newMessage;
private List<string> messages = new List<string>();
//private string hrefString = "mytransfers/" + "108E5A63-AA9E-47BE-ACFA-00306FFC5215";
protected override async Task OnInitializedAsync()
{
userName = Guid.NewGuid().ToString();
SignalRService.OnMessageReceived += (user, message) =>
{
messages.Add($"{user}: {message}");
InvokeAsync(StateHasChanged);
};
SignalRService.OnUserMuted += (user) =>
{
messages.Add($"{user} has been muted.");
InvokeAsync(StateHasChanged);
};
SignalRService.OnUserLoggedIn += (user) =>
{
messages.Add($"{user} has logged in.");
InvokeAsync(StateHasChanged);
};
SignalRService.OnUserLoggedOut += (user) =>
{
messages.Add($"{user} has logged out.");
InvokeAsync(StateHasChanged);
};
await SignalRService.StartConnection(userName);
}
private async Task SendMessage()
{
await SignalRService.SendMessage(userName, newMessage);
newMessage = string.Empty;
}
private async Task MuteChat()
{
await SignalRService.MuteChat(userName);
}
private async Task LoggedInToChat()
{
await SignalRService.LoggedInToChat(userName);
}
private async Task LoggedOutFromChat()
{
await SignalRService.LoggedOutFromChat(userName);
}
public void Dispose()
{
SignalRService.OnMessageReceived -= (user, message) => { };
SignalRService.OnUserMuted -= (user) => { };
SignalRService.OnUserLoggedIn -= (user) => { };
LoggedOutFromChat();
SignalRService.OnUserLoggedOut -= (user) => { };
}
}