| @@ -338,351 +338,357 @@ namespace Discord | |||||
| { | { | ||||
| try | try | ||||
| { | { | ||||
| await base.OnReceivedEvent(e); | |||||
| await base.OnReceivedEvent(e); | |||||
| switch (e.Type) | |||||
| { | |||||
| //Global | |||||
| case "READY": //Resync | |||||
| { | |||||
| var data = e.Payload.ToObject<ReadyEvent>(_serializer); | |||||
| _currentUser = _users.GetOrAdd(data.User.Id); | |||||
| _currentUser.Update(data.User); | |||||
| foreach (var model in data.Guilds) | |||||
| switch (e.Type) | |||||
| { | |||||
| //Global | |||||
| case "READY": //Resync | |||||
| { | |||||
| var data = e.Payload.ToObject<ReadyEvent>(_serializer); | |||||
| _currentUser = _users.GetOrAdd(data.User.Id); | |||||
| _currentUser.Update(data.User); | |||||
| foreach (var model in data.Guilds) | |||||
| { | |||||
| if (!model.Unavailable) | |||||
| { | |||||
| var server = _servers.GetOrAdd(model.Id); | |||||
| server.Update(model); | |||||
| } | |||||
| } | |||||
| foreach (var model in data.PrivateChannels) | |||||
| { | |||||
| var user = _users.GetOrAdd(model.Recipient.Id); | |||||
| user.Update(model.Recipient); | |||||
| var channel = _channels.GetOrAdd(model.Id, null, user.Id); | |||||
| channel.Update(model); | |||||
| } | |||||
| } | |||||
| break; | |||||
| case "RESUMED": | |||||
| break; | |||||
| //Servers | |||||
| case "GUILD_CREATE": | |||||
| { | { | ||||
| var model = e.Payload.ToObject<GuildCreateEvent>(_serializer); | |||||
| if (!model.Unavailable) | if (!model.Unavailable) | ||||
| { | { | ||||
| var server = _servers.GetOrAdd(model.Id); | var server = _servers.GetOrAdd(model.Id); | ||||
| server.Update(model); | server.Update(model); | ||||
| RaiseServerCreated(server); | |||||
| } | } | ||||
| } | } | ||||
| foreach (var model in data.PrivateChannels) | |||||
| break; | |||||
| case "GUILD_UPDATE": | |||||
| { | { | ||||
| var user = _users.GetOrAdd(model.Recipient.Id); | |||||
| user.Update(model.Recipient); | |||||
| var channel = _channels.GetOrAdd(model.Id, null, user.Id); | |||||
| channel.Update(model); | |||||
| var model = e.Payload.ToObject<GuildUpdateEvent>(_serializer); | |||||
| var server = _servers[model.Id]; | |||||
| if (server != null) | |||||
| { | |||||
| server.Update(model); | |||||
| RaiseServerUpdated(server); | |||||
| } | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "RESUMED": | |||||
| break; | |||||
| //Servers | |||||
| case "GUILD_CREATE": | |||||
| { | |||||
| var model = e.Payload.ToObject<GuildCreateEvent>(_serializer); | |||||
| if (!model.Unavailable) | |||||
| break; | |||||
| case "GUILD_DELETE": | |||||
| { | { | ||||
| var server = _servers.GetOrAdd(model.Id); | |||||
| server.Update(model); | |||||
| RaiseServerCreated(server); | |||||
| var data = e.Payload.ToObject<GuildDeleteEvent>(_serializer); | |||||
| var server = _servers.TryRemove(data.Id); | |||||
| if (server != null) | |||||
| RaiseServerDestroyed(server); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "GUILD_UPDATE": | |||||
| { | |||||
| var model = e.Payload.ToObject<GuildUpdateEvent>(_serializer); | |||||
| var server = _servers[model.Id]; | |||||
| if (server != null) | |||||
| break; | |||||
| //Channels | |||||
| case "CHANNEL_CREATE": | |||||
| { | { | ||||
| server.Update(model); | |||||
| RaiseServerUpdated(server); | |||||
| var data = e.Payload.ToObject<ChannelCreateEvent>(_serializer); | |||||
| Channel channel; | |||||
| if (data.IsPrivate) | |||||
| { | |||||
| var user = _users.GetOrAdd(data.Recipient.Id); | |||||
| user.Update(data.Recipient); | |||||
| channel = _channels.GetOrAdd(data.Id, null, user.Id); | |||||
| } | |||||
| else | |||||
| channel = _channels.GetOrAdd(data.Id, data.GuildId, null); | |||||
| channel.Update(data); | |||||
| RaiseChannelCreated(channel); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "GUILD_DELETE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildDeleteEvent>(_serializer); | |||||
| var server = _servers.TryRemove(data.Id); | |||||
| if (server != null) | |||||
| RaiseServerDestroyed(server); | |||||
| } | |||||
| break; | |||||
| //Channels | |||||
| case "CHANNEL_CREATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<ChannelCreateEvent>(_serializer); | |||||
| Channel channel; | |||||
| if (data.IsPrivate) | |||||
| break; | |||||
| case "CHANNEL_UPDATE": | |||||
| { | { | ||||
| var user = _users.GetOrAdd(data.Recipient.Id); | |||||
| user.Update(data.Recipient); | |||||
| channel = _channels.GetOrAdd(data.Id, null, user.Id); | |||||
| var data = e.Payload.ToObject<ChannelUpdateEvent>(_serializer); | |||||
| var channel = _channels[data.Id]; | |||||
| if (channel != null) | |||||
| { | |||||
| channel.Update(data); | |||||
| RaiseChannelUpdated(channel); | |||||
| } | |||||
| } | } | ||||
| else | |||||
| channel = _channels.GetOrAdd(data.Id, data.GuildId, null); | |||||
| channel.Update(data); | |||||
| RaiseChannelCreated(channel); | |||||
| } | |||||
| break; | |||||
| case "CHANNEL_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<ChannelUpdateEvent>(_serializer); | |||||
| var channel = _channels[data.Id]; | |||||
| if (channel != null) | |||||
| break; | |||||
| case "CHANNEL_DELETE": | |||||
| { | { | ||||
| channel.Update(data); | |||||
| RaiseChannelUpdated(channel); | |||||
| var data = e.Payload.ToObject<ChannelDeleteEvent>(_serializer); | |||||
| var channel = _channels.TryRemove(data.Id); | |||||
| if (channel != null) | |||||
| RaiseChannelDestroyed(channel); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "CHANNEL_DELETE": | |||||
| { | |||||
| var data = e.Payload.ToObject<ChannelDeleteEvent>(_serializer); | |||||
| var channel = _channels.TryRemove(data.Id); | |||||
| if (channel != null) | |||||
| RaiseChannelDestroyed(channel); | |||||
| } | |||||
| break; | |||||
| break; | |||||
| //Members | |||||
| case "GUILD_MEMBER_ADD": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildMemberAddEvent>(_serializer); | |||||
| var user = _users.GetOrAdd(data.User.Id); | |||||
| var member = _members.GetOrAdd(data.User.Id, data.GuildId); | |||||
| user.Update(data.User); | |||||
| member.Update(data); | |||||
| if (_config.TrackActivity) | |||||
| member.UpdateActivity(); | |||||
| RaiseUserAdded(member); | |||||
| } | |||||
| break; | |||||
| case "GUILD_MEMBER_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildMemberUpdateEvent>(_serializer); | |||||
| var member = _members[data.User.Id, data.GuildId]; | |||||
| if (member != null) | |||||
| //Members | |||||
| case "GUILD_MEMBER_ADD": | |||||
| { | { | ||||
| var data = e.Payload.ToObject<GuildMemberAddEvent>(_serializer); | |||||
| var user = _users.GetOrAdd(data.User.Id); | |||||
| var member = _members.GetOrAdd(data.User.Id, data.GuildId); | |||||
| user.Update(data.User); | |||||
| member.Update(data); | member.Update(data); | ||||
| RaiseMemberUpdated(member); | |||||
| if (_config.TrackActivity) | |||||
| member.UpdateActivity(); | |||||
| RaiseUserAdded(member); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "GUILD_MEMBER_REMOVE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildMemberRemoveEvent>(_serializer); | |||||
| var member = _members.TryRemove(data.UserId, data.GuildId); | |||||
| if (member != null) | |||||
| RaiseUserRemoved(member); | |||||
| } | |||||
| break; | |||||
| break; | |||||
| case "GUILD_MEMBER_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildMemberUpdateEvent>(_serializer); | |||||
| var member = _members[data.User.Id, data.GuildId]; | |||||
| if (member != null) | |||||
| { | |||||
| member.Update(data); | |||||
| RaiseMemberUpdated(member); | |||||
| } | |||||
| } | |||||
| break; | |||||
| case "GUILD_MEMBER_REMOVE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildMemberRemoveEvent>(_serializer); | |||||
| var member = _members.TryRemove(data.UserId, data.GuildId); | |||||
| if (member != null) | |||||
| RaiseUserRemoved(member); | |||||
| } | |||||
| break; | |||||
| //Roles | |||||
| case "GUILD_ROLE_CREATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildRoleCreateEvent>(_serializer); | |||||
| var role = _roles.GetOrAdd(data.Data.Id, data.GuildId, false); | |||||
| role.Update(data.Data); | |||||
| RaiseRoleUpdated(role); | |||||
| } | |||||
| break; | |||||
| case "GUILD_ROLE_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildRoleUpdateEvent>(_serializer); | |||||
| var role = _roles[data.Data.Id]; | |||||
| if (role != null) | |||||
| //Roles | |||||
| case "GUILD_ROLE_CREATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildRoleCreateEvent>(_serializer); | |||||
| var role = _roles.GetOrAdd(data.Data.Id, data.GuildId, false); | |||||
| role.Update(data.Data); | role.Update(data.Data); | ||||
| RaiseRoleUpdated(role); | |||||
| } | |||||
| break; | |||||
| case "GUILD_ROLE_DELETE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildRoleDeleteEvent>(_serializer); | |||||
| var role = _roles.TryRemove(data.RoleId); | |||||
| if (role != null) | |||||
| RaiseRoleDeleted(role); | |||||
| } | |||||
| break; | |||||
| //Bans | |||||
| case "GUILD_BAN_ADD": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildBanAddEvent>(_serializer); | |||||
| var server = _servers[data.GuildId]; | |||||
| if (server != null) | |||||
| var server = _servers[data.GuildId]; | |||||
| if (server != null) | |||||
| server.AddRole(data.Data.Id); | |||||
| RaiseRoleUpdated(role); | |||||
| } | |||||
| break; | |||||
| case "GUILD_ROLE_UPDATE": | |||||
| { | { | ||||
| server.AddBan(data.User?.Id); | |||||
| RaiseBanAdded(data.User?.Id, server); | |||||
| var data = e.Payload.ToObject<GuildRoleUpdateEvent>(_serializer); | |||||
| var role = _roles[data.Data.Id]; | |||||
| if (role != null) | |||||
| role.Update(data.Data); | |||||
| RaiseRoleUpdated(role); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "GUILD_BAN_REMOVE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildBanRemoveEvent>(_serializer); | |||||
| var server = _servers[data.GuildId]; | |||||
| if (server != null && server.RemoveBan(data.User?.Id)) | |||||
| RaiseBanRemoved(data.User?.Id, server); | |||||
| } | |||||
| break; | |||||
| //Messages | |||||
| case "MESSAGE_CREATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<MessageCreateEvent>(_serializer); | |||||
| Message msg = null; | |||||
| break; | |||||
| case "GUILD_ROLE_DELETE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildRoleDeleteEvent>(_serializer); | |||||
| var server = _servers[data.GuildId]; | |||||
| if (server != null) | |||||
| server.RemoveRole(data.RoleId); | |||||
| var role = _roles.TryRemove(data.RoleId); | |||||
| if (role != null) | |||||
| RaiseRoleDeleted(role); | |||||
| } | |||||
| break; | |||||
| bool wasLocal = _config.UseMessageQueue && data.Author.Id == CurrentUserId && data.Nonce != null; | |||||
| if (wasLocal) | |||||
| //Bans | |||||
| case "GUILD_BAN_ADD": | |||||
| { | { | ||||
| msg = _messages.Remap("nonce" + data.Nonce, data.Id); | |||||
| if (msg != null) | |||||
| var data = e.Payload.ToObject<GuildBanAddEvent>(_serializer); | |||||
| var server = _servers[data.GuildId]; | |||||
| if (server != null) | |||||
| { | { | ||||
| msg.IsQueued = false; | |||||
| msg.Id = data.Id; | |||||
| server.AddBan(data.User?.Id); | |||||
| RaiseBanAdded(data.User?.Id, server); | |||||
| } | } | ||||
| } | } | ||||
| break; | |||||
| case "GUILD_BAN_REMOVE": | |||||
| { | |||||
| var data = e.Payload.ToObject<GuildBanRemoveEvent>(_serializer); | |||||
| var server = _servers[data.GuildId]; | |||||
| if (server != null && server.RemoveBan(data.User?.Id)) | |||||
| RaiseBanRemoved(data.User?.Id, server); | |||||
| } | |||||
| break; | |||||
| if (msg == null) | |||||
| msg = _messages.GetOrAdd(data.Id, data.ChannelId, data.Author.Id); | |||||
| msg.Update(data); | |||||
| if (_config.TrackActivity) | |||||
| //Messages | |||||
| case "MESSAGE_CREATE": | |||||
| { | { | ||||
| var channel = msg.Channel; | |||||
| if (channel == null || channel.IsPrivate) | |||||
| var data = e.Payload.ToObject<MessageCreateEvent>(_serializer); | |||||
| Message msg = null; | |||||
| bool wasLocal = _config.UseMessageQueue && data.Author.Id == CurrentUserId && data.Nonce != null; | |||||
| if (wasLocal) | |||||
| { | { | ||||
| var user = msg.User; | |||||
| if (user != null) | |||||
| user.UpdateActivity(data.Timestamp); | |||||
| msg = _messages.Remap("nonce" + data.Nonce, data.Id); | |||||
| if (msg != null) | |||||
| { | |||||
| msg.IsQueued = false; | |||||
| msg.Id = data.Id; | |||||
| } | |||||
| } | } | ||||
| else | |||||
| if (msg == null) | |||||
| msg = _messages.GetOrAdd(data.Id, data.ChannelId, data.Author.Id); | |||||
| msg.Update(data); | |||||
| if (_config.TrackActivity) | |||||
| { | { | ||||
| var member = msg.Member; | |||||
| if (member != null) | |||||
| member.UpdateActivity(data.Timestamp); | |||||
| var channel = msg.Channel; | |||||
| if (channel == null || channel.IsPrivate) | |||||
| { | |||||
| var user = msg.User; | |||||
| if (user != null) | |||||
| user.UpdateActivity(data.Timestamp); | |||||
| } | |||||
| else | |||||
| { | |||||
| var member = msg.Member; | |||||
| if (member != null) | |||||
| member.UpdateActivity(data.Timestamp); | |||||
| } | |||||
| } | } | ||||
| if (wasLocal) | |||||
| RaiseMessageSent(msg); | |||||
| RaiseMessageCreated(msg); | |||||
| } | } | ||||
| if (wasLocal) | |||||
| RaiseMessageSent(msg); | |||||
| RaiseMessageCreated(msg); | |||||
| } | |||||
| break; | |||||
| case "MESSAGE_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer); | |||||
| var msg = _messages[data.Id]; | |||||
| if (msg != null) | |||||
| break; | |||||
| case "MESSAGE_UPDATE": | |||||
| { | { | ||||
| msg.Update(data); | |||||
| RaiseMessageUpdated(msg); | |||||
| var data = e.Payload.ToObject<MessageUpdateEvent>(_serializer); | |||||
| var msg = _messages[data.Id]; | |||||
| if (msg != null) | |||||
| { | |||||
| msg.Update(data); | |||||
| RaiseMessageUpdated(msg); | |||||
| } | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "MESSAGE_DELETE": | |||||
| { | |||||
| var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer); | |||||
| var msg = _messages.TryRemove(data.Id); | |||||
| if (msg != null) | |||||
| RaiseMessageDeleted(msg); | |||||
| } | |||||
| break; | |||||
| case "MESSAGE_ACK": | |||||
| { | |||||
| var data = e.Payload.ToObject<MessageAckEvent>(_serializer); | |||||
| var msg = GetMessage(data.MessageId); | |||||
| if (msg != null) | |||||
| RaiseMessageReadRemotely(msg); | |||||
| } | |||||
| break; | |||||
| //Statuses | |||||
| case "PRESENCE_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<PresenceUpdateEvent>(_serializer); | |||||
| var member = _members[data.User.Id, data.GuildId]; | |||||
| /*if (_config.TrackActivity) | |||||
| break; | |||||
| case "MESSAGE_DELETE": | |||||
| { | { | ||||
| var user = _users[data.User.Id]; | |||||
| if (user != null) | |||||
| user.UpdateActivity(DateTime.UtcNow); | |||||
| }*/ | |||||
| if (member != null) | |||||
| var data = e.Payload.ToObject<MessageDeleteEvent>(_serializer); | |||||
| var msg = _messages.TryRemove(data.Id); | |||||
| if (msg != null) | |||||
| RaiseMessageDeleted(msg); | |||||
| } | |||||
| break; | |||||
| case "MESSAGE_ACK": | |||||
| { | { | ||||
| member.Update(data); | |||||
| RaiseUserPresenceUpdated(member); | |||||
| var data = e.Payload.ToObject<MessageAckEvent>(_serializer); | |||||
| var msg = GetMessage(data.MessageId); | |||||
| if (msg != null) | |||||
| RaiseMessageReadRemotely(msg); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "TYPING_START": | |||||
| { | |||||
| var data = e.Payload.ToObject<TypingStartEvent>(_serializer); | |||||
| var channel = _channels[data.ChannelId]; | |||||
| var user = _users[data.UserId]; | |||||
| break; | |||||
| if (user != null) | |||||
| //Statuses | |||||
| case "PRESENCE_UPDATE": | |||||
| { | { | ||||
| if (channel != null) | |||||
| RaiseUserIsTyping(user, channel); | |||||
| var data = e.Payload.ToObject<PresenceUpdateEvent>(_serializer); | |||||
| var member = _members[data.User.Id, data.GuildId]; | |||||
| /*if (_config.TrackActivity) | |||||
| { | |||||
| var user = _users[data.User.Id]; | |||||
| if (user != null) | |||||
| user.UpdateActivity(DateTime.UtcNow); | |||||
| }*/ | |||||
| if (member != null) | |||||
| { | |||||
| member.Update(data); | |||||
| RaiseUserPresenceUpdated(member); | |||||
| } | |||||
| } | } | ||||
| if (_config.TrackActivity) | |||||
| break; | |||||
| case "TYPING_START": | |||||
| { | { | ||||
| if (channel.IsPrivate) | |||||
| var data = e.Payload.ToObject<TypingStartEvent>(_serializer); | |||||
| var channel = _channels[data.ChannelId]; | |||||
| var user = _users[data.UserId]; | |||||
| if (user != null) | |||||
| { | { | ||||
| if (user != null) | |||||
| user.UpdateActivity(); | |||||
| if (channel != null) | |||||
| RaiseUserIsTyping(user, channel); | |||||
| } | } | ||||
| else | |||||
| if (_config.TrackActivity) | |||||
| { | { | ||||
| var member = _members[data.UserId, channel.ServerId]; | |||||
| if (member != null) | |||||
| member.UpdateActivity(); | |||||
| if (channel.IsPrivate) | |||||
| { | |||||
| if (user != null) | |||||
| user.UpdateActivity(); | |||||
| } | |||||
| else | |||||
| { | |||||
| var member = _members[data.UserId, channel.ServerId]; | |||||
| if (member != null) | |||||
| member.UpdateActivity(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | |||||
| break; | |||||
| break; | |||||
| //Voice | |||||
| case "VOICE_STATE_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<VoiceStateUpdateEvent>(_serializer); | |||||
| var member = _members[data.UserId, data.GuildId]; | |||||
| /*if (_config.TrackActivity) | |||||
| //Voice | |||||
| case "VOICE_STATE_UPDATE": | |||||
| { | { | ||||
| var user = _users[data.User.Id]; | |||||
| if (user != null) | |||||
| user.UpdateActivity(DateTime.UtcNow); | |||||
| }*/ | |||||
| if (member != null) | |||||
| { | |||||
| member.Update(data); | |||||
| if (member.IsSpeaking) | |||||
| var data = e.Payload.ToObject<VoiceStateUpdateEvent>(_serializer); | |||||
| var member = _members[data.UserId, data.GuildId]; | |||||
| /*if (_config.TrackActivity) | |||||
| { | |||||
| var user = _users[data.User.Id]; | |||||
| if (user != null) | |||||
| user.UpdateActivity(DateTime.UtcNow); | |||||
| }*/ | |||||
| if (member != null) | |||||
| { | { | ||||
| member.IsSpeaking = false; | |||||
| RaiseUserIsSpeaking(member, false); | |||||
| member.Update(data); | |||||
| if (member.IsSpeaking) | |||||
| { | |||||
| member.IsSpeaking = false; | |||||
| RaiseUserIsSpeaking(member, false); | |||||
| } | |||||
| RaiseUserVoiceStateUpdated(member); | |||||
| } | } | ||||
| RaiseUserVoiceStateUpdated(member); | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| break; | |||||
| //Settings | |||||
| case "USER_UPDATE": | |||||
| { | |||||
| var data = e.Payload.ToObject<UserUpdateEvent>(_serializer); | |||||
| var user = _users[data.Id]; | |||||
| if (user != null) | |||||
| //Settings | |||||
| case "USER_UPDATE": | |||||
| { | { | ||||
| user.Update(data); | |||||
| RaiseUserUpdated(user); | |||||
| var data = e.Payload.ToObject<UserUpdateEvent>(_serializer); | |||||
| var user = _users[data.Id]; | |||||
| if (user != null) | |||||
| { | |||||
| user.Update(data); | |||||
| RaiseUserUpdated(user); | |||||
| } | |||||
| } | } | ||||
| } | |||||
| break; | |||||
| case "USER_SETTINGS_UPDATE": | |||||
| { | |||||
| //TODO: Process this | |||||
| } | |||||
| break; | |||||
| break; | |||||
| case "USER_SETTINGS_UPDATE": | |||||
| { | |||||
| //TODO: Process this | |||||
| } | |||||
| break; | |||||
| //Internal (handled in DiscordSimpleClient) | |||||
| case "VOICE_SERVER_UPDATE": | |||||
| break; | |||||
| //Internal (handled in DiscordSimpleClient) | |||||
| case "VOICE_SERVER_UPDATE": | |||||
| break; | |||||
| //Others | |||||
| default: | |||||
| RaiseOnLog(LogMessageSeverity.Warning, LogMessageSource.DataWebSocket, $"Unknown message type: {e.Type}"); | |||||
| break; | |||||
| //Others | |||||
| default: | |||||
| RaiseOnLog(LogMessageSeverity.Warning, LogMessageSource.DataWebSocket, $"Unknown message type: {e.Type}"); | |||||
| break; | |||||
| } | } | ||||
| } | } | ||||
| catch (Exception ex) | catch (Exception ex) | ||||