mirror of
https://github.com/ppy/osu.git
synced 2025-03-16 05:37:19 +08:00
Create an abstraction for APIMessagesRequest
This commit is contained in:
parent
a9f3885d28
commit
1b51da70af
28
osu.Game/Online/API/APIMessagesRequest.cs
Normal file
28
osu.Game/Online/API/APIMessagesRequest.cs
Normal file
@ -0,0 +1,28 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System.Collections.Generic;
|
||||
using osu.Framework.IO.Network;
|
||||
using osu.Game.Online.Chat;
|
||||
|
||||
namespace osu.Game.Online.API
|
||||
{
|
||||
public abstract class APIMessagesRequest : APIRequest<List<Message>>
|
||||
{
|
||||
private long? sinceId;
|
||||
|
||||
protected APIMessagesRequest(long? sinceId)
|
||||
{
|
||||
this.sinceId = sinceId;
|
||||
}
|
||||
|
||||
protected override WebRequest CreateWebRequest()
|
||||
{
|
||||
var req = base.CreateWebRequest();
|
||||
|
||||
if (sinceId.HasValue) req.AddParameter(@"since", sinceId.Value.ToString());
|
||||
|
||||
return req;
|
||||
}
|
||||
}
|
||||
}
|
@ -9,12 +9,11 @@ using osu.Game.Online.Chat;
|
||||
|
||||
namespace osu.Game.Online.API.Requests
|
||||
{
|
||||
public class GetMessagesRequest : APIRequest<List<Message>>
|
||||
public class GetMessagesRequest : APIMessagesRequest
|
||||
{
|
||||
private readonly IEnumerable<Channel> channels;
|
||||
private long? since;
|
||||
|
||||
public GetMessagesRequest(IEnumerable<Channel> channels, long? sinceId)
|
||||
public GetMessagesRequest(IEnumerable<Channel> channels, long? sinceId) : base(sinceId)
|
||||
{
|
||||
if (channels == null)
|
||||
throw new ArgumentNullException(nameof(channels));
|
||||
@ -22,7 +21,6 @@ namespace osu.Game.Online.API.Requests
|
||||
throw new ArgumentException("All channels in the argument channels must have the targettype Channel");
|
||||
|
||||
this.channels = channels;
|
||||
since = sinceId;
|
||||
}
|
||||
|
||||
protected override WebRequest CreateWebRequest()
|
||||
@ -31,7 +29,6 @@ namespace osu.Game.Online.API.Requests
|
||||
|
||||
var req = base.CreateWebRequest();
|
||||
req.AddParameter(@"channels", channelString);
|
||||
if (since.HasValue) req.AddParameter(@"since", since.Value.ToString());
|
||||
|
||||
return req;
|
||||
}
|
||||
|
@ -1,28 +1,15 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using System.Collections.Generic;
|
||||
using osu.Framework.IO.Network;
|
||||
using osu.Game.Online.Chat;
|
||||
|
||||
namespace osu.Game.Online.API.Requests
|
||||
{
|
||||
public class GetPrivateMessagesRequest : APIRequest<List<Message>>
|
||||
public class GetPrivateMessagesRequest : APIMessagesRequest
|
||||
{
|
||||
private long? since;
|
||||
|
||||
public GetPrivateMessagesRequest(long? sinceId = null)
|
||||
: base(sinceId)
|
||||
{
|
||||
since = sinceId;
|
||||
}
|
||||
|
||||
protected override WebRequest CreateWebRequest()
|
||||
{
|
||||
var request = base.CreateWebRequest();
|
||||
if (since.HasValue)
|
||||
request.AddParameter(@"since", since.Value.ToString());
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
protected override string Target => @"chat/messages/private";
|
||||
|
@ -152,25 +152,46 @@ namespace osu.Game.Online.Chat
|
||||
private void fetchNewMessages()
|
||||
{
|
||||
if (fetchMsgReq == null)
|
||||
fetchNewChannelMessages();
|
||||
fetchMessages(
|
||||
() => new GetMessagesRequest(JoinedChannels.Where(c => c.Target == TargetType.Channel), lastChannelMsgId),
|
||||
messages =>
|
||||
{
|
||||
if (messages == null)
|
||||
return;
|
||||
handleChannelMessages(messages);
|
||||
lastChannelMsgId = messages.LastOrDefault()?.Id ?? lastChannelMsgId;
|
||||
fetchMsgReq = null;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
if (fetchPrivateMsgReq == null)
|
||||
fetchNewUserMessages();
|
||||
fetchMessages(
|
||||
() => new GetPrivateMessagesRequest(lastChannelMsgId),
|
||||
messages =>
|
||||
{
|
||||
if (messages == null)
|
||||
return;
|
||||
handleUserMessages(messages);
|
||||
lastUserMsgId = messages.LastOrDefault()?.Id ?? lastUserMsgId;
|
||||
fetchPrivateMsgReq = null;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private void fetchNewUserMessages()
|
||||
private void fetchMessages(Func<APIMessagesRequest> messagesRequest, Action<List<Message>> handler)
|
||||
{
|
||||
fetchPrivateMsgReq = new GetPrivateMessagesRequest(lastUserMsgId);
|
||||
if (messagesRequest == null)
|
||||
throw new ArgumentNullException(nameof(messagesRequest));
|
||||
if (handler == null)
|
||||
throw new ArgumentNullException(nameof(handler));
|
||||
|
||||
fetchPrivateMsgReq.Success += messages =>
|
||||
{
|
||||
handleUserMessages(messages);
|
||||
lastUserMsgId = messages.LastOrDefault()?.Id ?? lastUserMsgId;
|
||||
fetchPrivateMsgReq = null;
|
||||
};
|
||||
fetchPrivateMsgReq.Failure += exception => Logger.Error(exception, "Fetching user messages failed.");
|
||||
var messagesReq = messagesRequest.Invoke();
|
||||
|
||||
api.Queue(fetchPrivateMsgReq);
|
||||
messagesReq.Success += handler.Invoke;
|
||||
messagesReq.Failure += exception => Logger.Error(exception, "Fetching messages failed.");
|
||||
|
||||
api.Queue(messagesReq);
|
||||
}
|
||||
|
||||
private void handleUserMessages(IEnumerable<Message> messages)
|
||||
@ -218,23 +239,6 @@ namespace osu.Game.Online.Chat
|
||||
}
|
||||
}
|
||||
|
||||
private void fetchNewChannelMessages()
|
||||
{
|
||||
fetchMsgReq = new GetMessagesRequest(JoinedChannels.Where(c => c.Target == TargetType.Channel), lastChannelMsgId);
|
||||
|
||||
fetchMsgReq.Success += messages =>
|
||||
{
|
||||
if (messages == null)
|
||||
return;
|
||||
handleChannelMessages(messages);
|
||||
lastChannelMsgId = messages.LastOrDefault()?.Id ?? lastChannelMsgId;
|
||||
fetchMsgReq = null;
|
||||
};
|
||||
fetchMsgReq.Failure += exception => Logger.Error(exception, "Fetching channel messages failed.");
|
||||
|
||||
api.Queue(fetchMsgReq);
|
||||
}
|
||||
|
||||
private void handleChannelMessages(IEnumerable<Message> messages)
|
||||
{
|
||||
var channels = JoinedChannels.ToList();
|
||||
|
Loading…
x
Reference in New Issue
Block a user