-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChatHub.cs
More file actions
46 lines (40 loc) · 1.35 KB
/
ChatHub.cs
File metadata and controls
46 lines (40 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using BaseServerTest.Data;
using BaseServerTest.Shared.Domain.Chat;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
namespace BaseServerTest.Misc;
public class ChatHub : Hub
{
private readonly ApplicationDbContext _context;
public ChatHub(ApplicationDbContext context)
{
_context = context;
}
public async Task JoinGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
var recentMessages = await _context.ChatMessages
.Where(m => m.GroupName == groupName)
.OrderByDescending(m => m.Timestamp)
.Take(50)
.ToListAsync();
await Clients.Caller.SendAsync("ReceiveRecentMessages", recentMessages);
}
public async Task LeaveGroup(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
}
public async Task SendMessageToGroup(string groupName, string user, string message)
{
var chatMessage = new ChatMessage
{
GroupName = groupName,
UserName = user,
Content = message,
Timestamp = DateTime.UtcNow
};
_context.ChatMessages.Add(chatMessage);
await _context.SaveChangesAsync();
await Clients.Group(groupName).SendAsync("ReceiveMessage", user, message);
}
}