mirror of
https://github.com/ppy/osu
synced 2025-04-30 06:48:10 +00: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
|
namespace osu.Game.Online.API.Requests
|
||||||
{
|
{
|
||||||
public class GetMessagesRequest : APIRequest<List<Message>>
|
public class GetMessagesRequest : APIMessagesRequest
|
||||||
{
|
{
|
||||||
private readonly IEnumerable<Channel> channels;
|
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)
|
if (channels == null)
|
||||||
throw new ArgumentNullException(nameof(channels));
|
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");
|
throw new ArgumentException("All channels in the argument channels must have the targettype Channel");
|
||||||
|
|
||||||
this.channels = channels;
|
this.channels = channels;
|
||||||
since = sinceId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override WebRequest CreateWebRequest()
|
protected override WebRequest CreateWebRequest()
|
||||||
@ -31,7 +29,6 @@ namespace osu.Game.Online.API.Requests
|
|||||||
|
|
||||||
var req = base.CreateWebRequest();
|
var req = base.CreateWebRequest();
|
||||||
req.AddParameter(@"channels", channelString);
|
req.AddParameter(@"channels", channelString);
|
||||||
if (since.HasValue) req.AddParameter(@"since", since.Value.ToString());
|
|
||||||
|
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,15 @@
|
|||||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// 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
|
namespace osu.Game.Online.API.Requests
|
||||||
{
|
{
|
||||||
public class GetPrivateMessagesRequest : APIRequest<List<Message>>
|
public class GetPrivateMessagesRequest : APIMessagesRequest
|
||||||
{
|
{
|
||||||
private long? since;
|
private long? since;
|
||||||
|
|
||||||
public GetPrivateMessagesRequest(long? sinceId = null)
|
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";
|
protected override string Target => @"chat/messages/private";
|
||||||
|
@ -152,25 +152,46 @@ namespace osu.Game.Online.Chat
|
|||||||
private void fetchNewMessages()
|
private void fetchNewMessages()
|
||||||
{
|
{
|
||||||
if (fetchMsgReq == null)
|
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)
|
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 =>
|
var messagesReq = messagesRequest.Invoke();
|
||||||
{
|
|
||||||
handleUserMessages(messages);
|
|
||||||
lastUserMsgId = messages.LastOrDefault()?.Id ?? lastUserMsgId;
|
|
||||||
fetchPrivateMsgReq = null;
|
|
||||||
};
|
|
||||||
fetchPrivateMsgReq.Failure += exception => Logger.Error(exception, "Fetching user messages failed.");
|
|
||||||
|
|
||||||
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)
|
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)
|
private void handleChannelMessages(IEnumerable<Message> messages)
|
||||||
{
|
{
|
||||||
var channels = JoinedChannels.ToList();
|
var channels = JoinedChannels.ToList();
|
||||||
|
Loading…
Reference in New Issue
Block a user