@@ -14,7 +14,7 @@ namespace Discord
{
private readonly DiscordAPIClient _api;
private readonly Random _rand;
private readonly JsonSerializer _serializer;
private readonly JsonSerializer _socketS erializer, _messageImport er;
private readonly ConcurrentQueue<Message> _pendingMessages;
private readonly ConcurrentDictionary<long, DiscordWSClient> _voiceClients;
private readonly Dictionary<Type, IService> _services;
@@ -163,12 +163,14 @@ namespace Discord
if (Config.UseMessageQueue)
_pendingMessages = new ConcurrentQueue<Message>();
_serializer = new JsonSerializer();
_s erializer.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
_socketS erializer = new JsonSerializer();
_socketS erializer.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
#if TEST_RESPONSES
_serializer.CheckAdditionalContent = true;
_serializer.MissingMemberHandling = MissingMemberHandling.Error;
#endif
_messageImporter = new JsonSerializer();
}
internal override VoiceWebSocket CreateVoiceSocket()
{
@@ -311,7 +313,7 @@ namespace Discord
case "READY": //Resync
{
base.OnReceivedEvent(e).Wait(); //This cannot be an await, or we'll get later messages before we're ready
var data = e.Payload.ToObject<ReadyEvent>(_serializer);
var data = e.Payload.ToObject<ReadyEvent>(_socketS erializer);
_privateUser = _users.GetOrAdd(data.User.Id, null);
_privateUser.Update(data.User);
_privateUser.Global.Update(data.User);
@@ -336,7 +338,7 @@ namespace Discord
//Servers
case "GUILD_CREATE":
{
var data = e.Payload.ToObject<GuildCreateEvent>(_serializer);
var data = e.Payload.ToObject<GuildCreateEvent>(_socketS erializer);
if (data.Unavailable != true)
{
var server = _servers.GetOrAdd(data.Id);
@@ -350,7 +352,7 @@ namespace Discord
break;
case "GUILD_UPDATE":
{
var data = e.Payload.ToObject<GuildUpdateEvent>(_serializer);
var data = e.Payload.ToObject<GuildUpdateEvent>(_socketS erializer);
var server = _servers[data.Id];
if (server != null)
{
@@ -361,7 +363,7 @@ namespace Discord
break;
case "GUILD_DELETE":
{
var data = e.Payload.ToObject<GuildDeleteEvent>(_serializer);
var data = e.Payload.ToObject<GuildDeleteEvent>(_socketS erializer);
var server = _servers.TryRemove(data.Id);
if (server != null)
{
@@ -376,7 +378,7 @@ namespace Discord
//Channels
case "CHANNEL_CREATE":
{
var data = e.Payload.ToObject<ChannelCreateEvent>(_serializer);
var data = e.Payload.ToObject<ChannelCreateEvent>(_socketS erializer);
Channel channel;
if (data.IsPrivate)
{
@@ -392,7 +394,7 @@ namespace Discord
break;
case "CHANNEL_UPDATE":
{
var data = e.Payload.ToObject<ChannelUpdateEvent>(_serializer);
var data = e.Payload.ToObject<ChannelUpdateEvent>(_socketS erializer);
var channel = _channels[data.Id];
if (channel != null)
{
@@ -403,7 +405,7 @@ namespace Discord
break;
case "CHANNEL_DELETE":
{
var data = e.Payload.ToObject<ChannelDeleteEvent>(_serializer);
var data = e.Payload.ToObject<ChannelDeleteEvent>(_socketS erializer);
var channel = _channels.TryRemove(data.Id);
if (channel != null)
RaiseChannelDestroyed(channel);
@@ -413,7 +415,7 @@ namespace Discord
//Members
case "GUILD_MEMBER_ADD":
{
var data = e.Payload.ToObject<MemberAddEvent>(_serializer);
var data = e.Payload.ToObject<MemberAddEvent>(_socketS erializer);
var user = _users.GetOrAdd(data.User.Id, data.GuildId);
user.Update(data);
if (Config.TrackActivity)
@@ -423,7 +425,7 @@ namespace Discord
break;
case "GUILD_MEMBER_UPDATE":
{
var data = e.Payload.ToObject<MemberUpdateEvent>(_serializer);
var data = e.Payload.ToObject<MemberUpdateEvent>(_socketS erializer);
var user = _users[data.User.Id, data.GuildId];
if (user != null)
{
@@ -434,7 +436,7 @@ namespace Discord
break;
case "GUILD_MEMBER_REMOVE":
{
var data = e.Payload.ToObject<MemberRemoveEvent>(_serializer);
var data = e.Payload.ToObject<MemberRemoveEvent>(_socketS erializer);
var user = _users.TryRemove(data.UserId, data.GuildId);
if (user != null)
RaiseUserLeft(user);
@@ -442,7 +444,7 @@ namespace Discord
break;
case "GUILD_MEMBERS_CHUNK":
{
var data = e.Payload.ToObject<MembersChunkEvent>(_serializer);
var data = e.Payload.ToObject<MembersChunkEvent>(_socketS erializer);
foreach (var memberData in data.Members)
{
var user = _users.GetOrAdd(memberData.User.Id, memberData.GuildId);
@@ -455,7 +457,7 @@ namespace Discord
//Roles
case "GUILD_ROLE_CREATE":
{
var data = e.Payload.ToObject<RoleCreateEvent>(_serializer);
var data = e.Payload.ToObject<RoleCreateEvent>(_socketS erializer);
var role = _roles.GetOrAdd(data.Data.Id, data.GuildId);
role.Update(data.Data);
var server = _servers[data.GuildId];
@@ -466,7 +468,7 @@ namespace Discord
break;
case "GUILD_ROLE_UPDATE":
{
var data = e.Payload.ToObject<RoleUpdateEvent>(_serializer);
var data = e.Payload.ToObject<RoleUpdateEvent>(_socketS erializer);
var role = _roles[data.Data.Id];
if (role != null)
{
@@ -477,7 +479,7 @@ namespace Discord
break;
case "GUILD_ROLE_DELETE":
{
var data = e.Payload.ToObject<RoleDeleteEvent>(_serializer);
var data = e.Payload.ToObject<RoleDeleteEvent>(_socketS erializer);
var role = _roles.TryRemove(data.RoleId);
if (role != null)
{
@@ -492,7 +494,7 @@ namespace Discord
//Bans
case "GUILD_BAN_ADD":
{
var data = e.Payload.ToObject<BanAddEvent>(_serializer);
var data = e.Payload.ToObject<BanAddEvent>(_socketS erializer);
var server = _servers[data.GuildId];
if (server != null)
{
@@ -504,7 +506,7 @@ namespace Discord
break;
case "GUILD_BAN_REMOVE":
{
var data = e.Payload.ToObject<BanRemoveEvent>(_serializer);
var data = e.Payload.ToObject<BanRemoveEvent>(_socketS erializer);
var server = _servers[data.GuildId];
if (server != null)
{
@@ -518,7 +520,7 @@ namespace Discord
//Messages
case "MESSAGE_CREATE":
{
var data = e.Payload.ToObject<MessageCreateEvent>(_serializer);
var data = e.Payload.ToObject<MessageCreateEvent>(_socketS erializer);
Message msg = null;
bool isAuthor = data.Author.Id == _userId;
@@ -545,7 +547,7 @@ namespace Discord
break;
case "MESSAGE_UPDATE":
{
var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer);
var data = e.Payload.ToObject<MessageUpdateEvent>(_socketS erializer);
var msg = _messages[data.Id];
if (msg != null)
{
@@ -556,7 +558,7 @@ namespace Discord
break;
case "MESSAGE_DELETE":
{
var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer);
var data = e.Payload.ToObject<MessageDeleteEvent>(_socketS erializer);
var msg = _messages.TryRemove(data.Id);
if (msg != null)
RaiseMessageDeleted(msg);
@@ -564,7 +566,7 @@ namespace Discord
break;
case "MESSAGE_ACK":
{
var data = e.Payload.ToObject<MessageAckEvent>(_serializer);
var data = e.Payload.ToObject<MessageAckEvent>(_socketS erializer);
var msg = GetMessage(data.MessageId);
if (msg != null)
RaiseMessageReadRemotely(msg);
@@ -574,7 +576,7 @@ namespace Discord
//Statuses
case "PRESENCE_UPDATE":
{
var data = e.Payload.ToObject<PresenceUpdateEvent>(_serializer);
var data = e.Payload.ToObject<PresenceUpdateEvent>(_socketS erializer);
var user = _users.GetOrAdd(data.User.Id, data.GuildId);
if (user != null)
{
@@ -585,7 +587,7 @@ namespace Discord
break;
case "TYPING_START":
{
var data = e.Payload.ToObject<TypingStartEvent>(_serializer);
var data = e.Payload.ToObject<TypingStartEvent>(_socketS erializer);
var channel = _channels[data.ChannelId];
if (channel != null)
{
@@ -611,7 +613,7 @@ namespace Discord
//Voice
case "VOICE_STATE_UPDATE":
{
var data = e.Payload.ToObject<MemberVoiceStateUpdateEvent>(_serializer);
var data = e.Payload.ToObject<MemberVoiceStateUpdateEvent>(_socketS erializer);
var user = _users[data.UserId, data.GuildId];
if (user != null)
{
@@ -630,7 +632,7 @@ namespace Discord
//Settings
case "USER_UPDATE":
{
var data = e.Payload.ToObject<UserUpdateEvent>(_serializer);
var data = e.Payload.ToObject<UserUpdateEvent>(_socketS erializer);
var user = _globalUsers[data.Id];
if (user != null)
{