Moved Rpc/WebSocket entities, fixed nullref on RPC message events

This commit is contained in:
RogueException
2016-07-29 18:11:41 -03:00
parent 79f11455b9
commit 260a0153f4
26 changed files with 27 additions and 13 deletions

View File

@@ -90,7 +90,7 @@ namespace Discord.API
using (var reader = new StreamReader(decompressed)) using (var reader = new StreamReader(decompressed))
using (var jsonReader = new JsonTextReader(reader)) using (var jsonReader = new JsonTextReader(reader))
{ {
var msg = _serializer.Deserialize<RpcMessage>(jsonReader); var msg = _serializer.Deserialize<API.Rpc.RpcMessage>(jsonReader);
await _receivedRpcEvent.InvokeAsync(msg.Cmd, msg.Event, msg.Data).ConfigureAwait(false); await _receivedRpcEvent.InvokeAsync(msg.Cmd, msg.Event, msg.Data).ConfigureAwait(false);
if (msg.Nonce.IsSpecified && msg.Nonce.Value.HasValue) if (msg.Nonce.IsSpecified && msg.Nonce.Value.HasValue)
ProcessMessage(msg); ProcessMessage(msg);
@@ -102,7 +102,7 @@ namespace Discord.API
using (var reader = new StringReader(text)) using (var reader = new StringReader(text))
using (var jsonReader = new JsonTextReader(reader)) using (var jsonReader = new JsonTextReader(reader))
{ {
var msg = _serializer.Deserialize<RpcMessage>(jsonReader); var msg = _serializer.Deserialize<API.Rpc.RpcMessage>(jsonReader);
await _receivedRpcEvent.InvokeAsync(msg.Cmd, msg.Event, msg.Data).ConfigureAwait(false); await _receivedRpcEvent.InvokeAsync(msg.Cmd, msg.Event, msg.Data).ConfigureAwait(false);
if (msg.Nonce.IsSpecified && msg.Nonce.Value.HasValue) if (msg.Nonce.IsSpecified && msg.Nonce.Value.HasValue)
ProcessMessage(msg); ProcessMessage(msg);
@@ -219,7 +219,7 @@ namespace Discord.API
{ {
byte[] bytes = null; byte[] bytes = null;
var guid = Guid.NewGuid(); var guid = Guid.NewGuid();
payload = new RpcMessage { Cmd = cmd, Event = evt, Args = payload, Nonce = guid }; payload = new API.Rpc.RpcMessage { Cmd = cmd, Event = evt, Args = payload, Nonce = guid };
if (payload != null) if (payload != null)
{ {
var json = SerializeJson(payload); var json = SerializeJson(payload);
@@ -338,7 +338,7 @@ namespace Discord.API
return await SendRpcAsync<SubscriptionResponse>("UNSUBSCRIBE", msg, evt: evt, options: options).ConfigureAwait(false); return await SendRpcAsync<SubscriptionResponse>("UNSUBSCRIBE", msg, evt: evt, options: options).ConfigureAwait(false);
} }
private bool ProcessMessage(RpcMessage msg) private bool ProcessMessage(API.Rpc.RpcMessage msg)
{ {
RpcRequest requestTracker; RpcRequest requestTracker;
if (_requests.TryGetValue(msg.Nonce.Value.Value, out requestTracker)) if (_requests.TryGetValue(msg.Nonce.Value.Value, out requestTracker))

View File

@@ -53,7 +53,6 @@ namespace Discord
var guildChannel = Channel as GuildChannel; var guildChannel = Channel as GuildChannel;
var guild = guildChannel?.Guild; var guild = guildChannel?.Guild;
var discord = Discord;
if (model.IsTextToSpeech.IsSpecified) if (model.IsTextToSpeech.IsSpecified)
IsTTS = model.IsTextToSpeech.Value; IsTTS = model.IsTextToSpeech.Value;

View File

@@ -355,7 +355,7 @@ namespace Discord.Rpc
{ {
await _rpcLogger.DebugAsync("Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false); await _rpcLogger.DebugAsync("Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false);
var data = (payload.Value as JToken).ToObject<MessageEvent>(_serializer); var data = (payload.Value as JToken).ToObject<MessageEvent>(_serializer);
var msg = new Message(null, new User(data.Message.Author.Value), data.Message); var msg = new RpcMessage(this, data.Message);
await _messageReceivedEvent.InvokeAsync(data.ChannelId, msg).ConfigureAwait(false); await _messageReceivedEvent.InvokeAsync(data.ChannelId, msg).ConfigureAwait(false);
} }
@@ -364,7 +364,7 @@ namespace Discord.Rpc
{ {
await _rpcLogger.DebugAsync("Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false); await _rpcLogger.DebugAsync("Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false);
var data = (payload.Value as JToken).ToObject<MessageEvent>(_serializer); var data = (payload.Value as JToken).ToObject<MessageEvent>(_serializer);
var msg = new Message(null, new User(data.Message.Author.Value), data.Message); var msg = new RpcMessage(this, data.Message);
await _messageUpdatedEvent.InvokeAsync(data.ChannelId, msg).ConfigureAwait(false); await _messageUpdatedEvent.InvokeAsync(data.ChannelId, msg).ConfigureAwait(false);
} }

View File

@@ -1,8 +1,8 @@
namespace Discord.Entities.Rpc namespace Discord.Rpc
{ {
public interface IRemoteUserGuild : ISnowflakeEntity /*public interface IRemoteUserGuild : ISnowflakeEntity
{ {
/// <summary> Gets the name of this guild. </summary> /// <summary> Gets the name of this guild. </summary>
string Name { get; } string Name { get; }
} }*/
} }

View File

@@ -2,9 +2,9 @@
using System; using System;
using Model = Discord.API.Rpc.RpcUserGuild; using Model = Discord.API.Rpc.RpcUserGuild;
namespace Discord.Entities.Rpc namespace Discord.Rpc
{ {
internal class RemoteUserGuild : IRemoteUserGuild, ISnowflakeEntity /*internal class RemoteUserGuild : IRemoteUserGuild, ISnowflakeEntity
{ {
public ulong Id { get; } public ulong Id { get; }
public DiscordRestClient Discord { get; } public DiscordRestClient Discord { get; }
@@ -26,5 +26,5 @@ namespace Discord.Entities.Rpc
} }
bool IEntity<ulong>.IsAttached => false; bool IEntity<ulong>.IsAttached => false;
} }*/
} }

View File

@@ -0,0 +1,15 @@
using Discord.Rest;
namespace Discord.Rpc
{
internal class RpcMessage : Message
{
public override DiscordRestClient Discord { get; }
public RpcMessage(DiscordRpcClient discord, API.Message model)
: base(null, model.Author.IsSpecified ? new User(model.Author.Value) : null, model)
{
Discord = discord;
}
}
}