@page "/chat/{room?}" @using Microsoft.AspNetCore.SignalR.Client; @using LiveChat.Models; @inject NavigationManager Navigation @inject IHttpContextAccessor httpContextAccessor; Chat room @if(Room is null or "") {

Fant ikke rom i URL. Lag et rom og putt det i URLen.

}

Rom @Room

Del @Room til vennene dine for å snakke med dem fra her. Ditt brukernavn: @username.

@foreach (var msg in msgs) {
@msg
}
@if (messageModel == null) {

laster inn meldingsboks

} else {
}
@code { [Parameter] public string? Room { get; set; } private HubConnection? hubConnection; private List msgs = new List(); private string username = ""; private MessageModel messageModel = new MessageModel() { User = "Something", Message = "" }; private string? host { get; set; } protected override async Task OnInitializedAsync() { //host = httpContextAccessor.HttpContext.Request.Headers["Host"]; hubConnection = new HubConnectionBuilder() .WithUrl(Navigation.ToAbsoluteUri("/chathub")) .Build(); await hubConnection.StartAsync(); // lag tilfeldig navn username = "Bruker" + new Random().Next(1, 1000); if (Room != null || Room != "") { // sjekk om rom finnes // hvis ikke, lag et rom using (var db = new ChattingContext()) { var room = db.Rooms.FirstOrDefault(r => r.RoomJoinCode == Room); if (room is null) { Console.WriteLine("Lager rom?!?"); room = new Room() { RoomJoinCode = Room }; db.Rooms.Add(room); db.SaveChanges(); } } } // bli med i rom await hubConnection.SendAsync("JoinRoom", Room, username); messageModel.User = username; using (var db = new ChattingContext()) { var messages = db.RoomChatMessages.Where(m => m.RoomId == Room).ToList(); foreach (var message in messages) { msgs.Add($"{message.User}: {message.Message}"); } await InvokeAsync(StateHasChanged); } hubConnection.On("ReceiveMessage", (user, message) => { var encodedMsg = $"{user}: {message}"; msgs.Add(encodedMsg); InvokeAsync(StateHasChanged); }); } private async Task HandleSubmit() { messageModel.User = username; await hubConnection.SendAsync("SendMessageRoom", messageModel.User, messageModel.Message, Room); } public bool IsConnected => hubConnection?.State == HubConnectionState.Connected; public async ValueTask DisposeAsync() { if (hubConnection is not null) { await hubConnection.DisposeAsync(); } } }