Skip to content

Commit 4abecde

Browse files
committed
working on the chathub
1 parent 0693e83 commit 4abecde

File tree

4 files changed

+42
-17
lines changed

4 files changed

+42
-17
lines changed

src/web/Client/Features/Chat/ChatClientHub.razor

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,24 @@
1111
.WithUrl(Navigation.ToAbsoluteUri("/hubs/chat"))
1212
.WithAutomaticReconnect()
1313
.Build();
14-
1514

16-
await _hubConnection.StartAsync();
17-
}
15+
_hubConnection.On(nameof(IChatHub.StartChat), (StartChat startChat) =>
16+
{
17+
if (startChat.InitiatorId == CurrentUserId)
18+
{
1819

19-
private async Task Send()
20-
{
21-
if (_hubConnection is not null)
20+
}
21+
});
22+
23+
_hubConnection.On(nameof(IChatHub.ReceiveChatMessage), (ChatMessageDto chatMessage) =>
2224
{
23-
await _hubConnection.SendAsync("SendMessage");
24-
}
25+
if (chatMessage.Sender.Id == CurrentUserId)
26+
{
27+
28+
}
29+
});
30+
31+
await _hubConnection.StartAsync();
2532
}
2633

2734
public bool IsConnected => _hubConnection?.State == HubConnectionState.Connected;

src/web/Server/Features/Chat/ChatApi.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using MassTransit;
77
using Microsoft.AspNetCore.Http.HttpResults;
88
using Microsoft.AspNetCore.Mvc;
9+
using Microsoft.AspNetCore.SignalR;
910
using Microsoft.EntityFrameworkCore;
1011

1112
namespace Jordnaer.Server.Features.Chat;
@@ -129,6 +130,7 @@ async Task<Results<NoContent, BadRequest, UnauthorizedHttpResult>> (
129130
[FromServices] CurrentUser currentUser,
130131
[FromServices] JordnaerDbContext context,
131132
[FromServices] IPublishEndpoint publishEndpoint,
133+
[FromServices] IHubContext<ChatHub, IChatHub> chatHub,
132134
CancellationToken cancellationToken) =>
133135
{
134136
if (await context.Chats.AsNoTracking().AnyAsync(existingChat => existingChat.Id == chat.Id, cancellationToken))
@@ -171,17 +173,20 @@ async Task<Results<NoContent, BadRequest, UnauthorizedHttpResult>> (
171173

172174
await context.SaveChangesAsync(cancellationToken);
173175

176+
await chatHub.Clients.Users(chat.Recipients.Select(recipient => recipient.Id)).StartChat(chat);
177+
174178
// TODO: This should send a message through an exchange to an Azure Function, which does the heavy lifting
175179
await publishEndpoint.Publish(chat, cancellationToken);
176180

177181
return TypedResults.NoContent();
178182
});
179183

180184
group.MapPost(MessagingConstants.SendMessage, async Task<Results<NoContent, BadRequest, UnauthorizedHttpResult>> (
181-
[FromBody] SendMessage chatMessage,
185+
[FromBody] ChatMessageDto chatMessage,
182186
[FromServices] CurrentUser currentUser,
183187
[FromServices] JordnaerDbContext context,
184188
[FromServices] IPublishEndpoint publishEndpoint,
189+
[FromServices] IHubContext<ChatHub, IChatHub> chatHub,
185190
CancellationToken cancellationToken) =>
186191
{
187192
if (await context.ChatMessages.AnyAsync(message => message.Id == chatMessage.Id, cancellationToken))
@@ -230,6 +235,11 @@ await context.Chats
230235
await context.SaveChangesAsync(cancellationToken);
231236
await transaction.CommitAsync(cancellationToken);
232237

238+
foreach (string recipientId in recipientIds)
239+
{
240+
await chatHub.Clients.User(recipientId).ReceiveChatMessage(chatMessage);
241+
}
242+
233243
// TODO: This should send a message through an exchange to an Azure Function, which does the heavy lifting
234244
await publishEndpoint.Publish(chatMessage, cancellationToken);
235245

src/web/Server/Features/Chat/ChatHub.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
namespace Jordnaer.Server.Features.Chat;
66

77
[Authorize]
8-
public class ChatHub : Hub
8+
public class ChatHub : Hub<IChatHub>
99
{
10-
public async Task SendMessage(string user, string message)
10+
public async Task SendChatMessageAsync(ChatMessageDto chatMessage, string userId)
1111
{
12-
//TODO: Add azure signalR
13-
await Clients.All.SendAsync("ReceiveMessage", user, message);
12+
await Clients.User(userId).ReceiveChatMessage(chatMessage);
1413
}
15-
16-
public override Task OnConnectedAsync()
14+
public async Task StartChatAsync(StartChat startChat)
1715
{
18-
Context.User.GetId();
19-
return base.OnConnectedAsync();
16+
await Clients
17+
.Users(startChat
18+
.Recipients
19+
.Select(user => user.Id))
20+
.StartChat(startChat);
2021
}
2122
}

src/web/Shared/Chat/IChatHub.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Jordnaer.Shared;
2+
3+
public interface IChatHub
4+
{
5+
Task ReceiveChatMessage(ChatMessageDto message);
6+
Task StartChat(StartChat startChat);
7+
}

0 commit comments

Comments
 (0)