⚡ Sped up and reduce storage usage of read receipt
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
using System.Net.WebSockets;
|
||||
using DysonNetwork.Sphere.Chat;
|
||||
using DysonNetwork.Sphere.Storage;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Internal;
|
||||
@ -7,7 +8,13 @@ using SystemClock = NodaTime.SystemClock;
|
||||
|
||||
namespace DysonNetwork.Sphere.Connection.Handlers;
|
||||
|
||||
public class MessageReadHandler(AppDatabase db, IMemoryCache cache, ChatRoomService crs) : IWebSocketPacketHandler
|
||||
public class MessageReadHandler(
|
||||
AppDatabase db,
|
||||
IMemoryCache cache,
|
||||
ChatRoomService crs,
|
||||
FlushBufferService buffer
|
||||
)
|
||||
: IWebSocketPacketHandler
|
||||
{
|
||||
public string PacketType => "messages.read";
|
||||
|
||||
@ -70,25 +77,16 @@ public class MessageReadHandler(AppDatabase db, IMemoryCache cache, ChatRoomServ
|
||||
return;
|
||||
}
|
||||
|
||||
db.ChatStatuses.Add(new MessageStatus
|
||||
var readReceipt = new MessageReadReceipt
|
||||
{
|
||||
MessageId = request.MessageId,
|
||||
SenderId = sender.Id,
|
||||
ReadAt = SystemClock.Instance.GetCurrentInstant(),
|
||||
});
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
// Broadcast read statuses
|
||||
var otherMembers = (await crs.ListRoomMembers(request.ChatRoomId)).Select(m => m.AccountId).ToList();
|
||||
foreach (var member in otherMembers)
|
||||
srv.SendPacketToAccount(member, packet);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
buffer.Enqueue(readReceipt);
|
||||
|
||||
var otherMembers = (await crs.ListRoomMembers(request.ChatRoomId)).Select(m => m.AccountId).ToList();
|
||||
foreach (var member in otherMembers)
|
||||
srv.SendPacketToAccount(member, packet);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user