@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)
{
}
@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();
}
}
}