mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 19:12:54 +08:00
Pass in lastMessageId instead of self referencing
This commit is contained in:
parent
6937cf27a7
commit
7b653fab17
@ -84,10 +84,10 @@ namespace osu.Game.Online.Chat
|
|||||||
CurrentChannel.ValueChanged += currentChannelChanged;
|
CurrentChannel.ValueChanged += currentChannelChanged;
|
||||||
|
|
||||||
channelMessagesHandler = new IncomingMessagesHandler(
|
channelMessagesHandler = new IncomingMessagesHandler(
|
||||||
() => new GetMessagesRequest(JoinedChannels.Where(c => c.Target == TargetType.Channel), channelMessagesHandler.LastMessageId), handleChannelMessages);
|
lastId => new GetMessagesRequest(JoinedChannels.Where(c => c.Target == TargetType.Channel), lastId), handleChannelMessages);
|
||||||
|
|
||||||
privateMessagesHandler = new IncomingMessagesHandler(
|
privateMessagesHandler = new IncomingMessagesHandler(
|
||||||
() => new GetPrivateMessagesRequest(privateMessagesHandler.LastMessageId),handleUserMessages);
|
lastId => new GetPrivateMessagesRequest(lastId),handleUserMessages);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void currentChannelChanged(Channel channel)
|
private void currentChannelChanged(Channel channel)
|
||||||
|
@ -15,16 +15,18 @@ namespace osu.Game.Online.Chat
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class IncomingMessagesHandler
|
public class IncomingMessagesHandler
|
||||||
{
|
{
|
||||||
|
public delegate APIMessagesRequest CreateRequestDelegate(long? lastMessageId);
|
||||||
|
|
||||||
public long? LastMessageId { get; private set; }
|
public long? LastMessageId { get; private set; }
|
||||||
|
|
||||||
private APIMessagesRequest getMessagesRequest;
|
private APIMessagesRequest getMessagesRequest;
|
||||||
|
|
||||||
private readonly Func<APIMessagesRequest> createRequest;
|
private readonly CreateRequestDelegate createRequest;
|
||||||
private readonly Action<List<Message>> onNewMessages;
|
private readonly Action<List<Message>> onNewMessages;
|
||||||
|
|
||||||
public bool CanRequestNewMessages => getMessagesRequest == null;
|
public bool CanRequestNewMessages => getMessagesRequest == null;
|
||||||
|
|
||||||
public IncomingMessagesHandler([NotNull] Func<APIMessagesRequest> createRequest, [NotNull] Action<List<Message>> onNewMessages)
|
public IncomingMessagesHandler([NotNull] CreateRequestDelegate createRequest, [NotNull] Action<List<Message>> onNewMessages)
|
||||||
{
|
{
|
||||||
this.createRequest = createRequest ?? throw new ArgumentNullException(nameof(createRequest));
|
this.createRequest = createRequest ?? throw new ArgumentNullException(nameof(createRequest));
|
||||||
this.onNewMessages = onNewMessages ?? throw new ArgumentNullException(nameof(onNewMessages));
|
this.onNewMessages = onNewMessages ?? throw new ArgumentNullException(nameof(onNewMessages));
|
||||||
@ -35,7 +37,7 @@ namespace osu.Game.Online.Chat
|
|||||||
if (!CanRequestNewMessages)
|
if (!CanRequestNewMessages)
|
||||||
throw new InvalidOperationException("Requesting new messages is not possible yet, because the old request is still ongoing.");
|
throw new InvalidOperationException("Requesting new messages is not possible yet, because the old request is still ongoing.");
|
||||||
|
|
||||||
getMessagesRequest = createRequest.Invoke();
|
getMessagesRequest = createRequest.Invoke(LastMessageId);
|
||||||
getMessagesRequest.Success += handleNewMessages;
|
getMessagesRequest.Success += handleNewMessages;
|
||||||
getMessagesRequest.Failure += exception =>
|
getMessagesRequest.Failure += exception =>
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user