From 7c9b809078b5cd53e3d54c0004c683da2ec679af Mon Sep 17 00:00:00 2001 From: Adelyn Breedlove Date: Mon, 11 Feb 2019 17:23:59 +0000 Subject: Add a cache --- lib/gateway/event.ml | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 lib/gateway/event.ml (limited to 'lib/gateway/event.ml') diff --git a/lib/gateway/event.ml b/lib/gateway/event.ml new file mode 100644 index 0000000..88dd50d --- /dev/null +++ b/lib/gateway/event.ml @@ -0,0 +1,176 @@ +open Async +open Core +open Event_models + +type t = +| READY of Ready.t +| RESUMED of Resumed.t +| CHANNEL_CREATE of ChannelCreate.t +| CHANNEL_UPDATE of ChannelUpdate.t +| CHANNEL_DELETE of ChannelDelete.t +| CHANNEL_PINS_UPDATE of ChannelPinsUpdate.t +| GUILD_CREATE of GuildCreate.t +| GUILD_UPDATE of GuildUpdate.t +| GUILD_DELETE of GuildDelete.t +| GUILD_BAN_ADD of GuildBanAdd.t +| GUILD_BAN_REMOVE of GuildBanRemove.t +| GUILD_EMOJIS_UPDATE of GuildEmojisUpdate.t +(* | GUILD_INTEGRATIONS_UPDATE of Yojson.Safe.t *) +| GUILD_MEMBER_ADD of GuildMemberAdd.t +| GUILD_MEMBER_REMOVE of GuildMemberRemove.t +| GUILD_MEMBER_UPDATE of GuildMemberUpdate.t +| GUILD_MEMBERS_CHUNK of GuildMembersChunk.t +| GUILD_ROLE_CREATE of GuildRoleCreate.t +| GUILD_ROLE_UPDATE of GuildRoleUpdate.t +| GUILD_ROLE_DELETE of GuildRoleDelete.t +| MESSAGE_CREATE of MessageCreate.t +| MESSAGE_UPDATE of MessageUpdate.t +| MESSAGE_DELETE of MessageDelete.t +| MESSAGE_DELETE_BULK of MessageDeleteBulk.t +| REACTION_ADD of ReactionAdd.t +| REACTION_REMOVE of ReactionRemove.t +| REACTION_REMOVE_ALL of ReactionRemoveAll.t +| PRESENCE_UPDATE of PresenceUpdate.t +| TYPING_START of TypingStart.t +| USER_UPDATE of UserUpdate.t +(* | VOICE_STATE_UPDATE of Yojson.Safe.t *) +(* | VOICE_SERVER_UPDATE of Yojson.Safe.t *) +| WEBHOOK_UPDATE of WebhookUpdate.t +| UNKNOWN of Unknown.t + +let event_of_yojson ~contents = function + | "READY" -> READY Ready.(deserialize contents) + | "RESUMED" -> RESUMED Resumed.(deserialize contents) + | "CHANNEL_CREATE" -> CHANNEL_CREATE ChannelCreate.(deserialize contents) + | "CHANNEL_UPDATE" -> CHANNEL_UPDATE ChannelUpdate.(deserialize contents) + | "CHANNEL_DELETE" -> CHANNEL_DELETE ChannelDelete.(deserialize contents) + | "CHANNEL_PINS_UPDATE" -> CHANNEL_PINS_UPDATE ChannelPinsUpdate.(deserialize contents) + | "GUILD_CREATE" -> GUILD_CREATE GuildCreate.(deserialize contents) + | "GUILD_UPDATE" -> GUILD_UPDATE GuildUpdate.(deserialize contents) + | "GUILD_DELETE" -> GUILD_DELETE GuildDelete.(deserialize contents) + | "GUILD_BAN_ADD" -> GUILD_BAN_ADD GuildBanAdd.(deserialize contents) + | "GUILD_BAN_REMOVE" -> GUILD_BAN_REMOVE GuildBanRemove.(deserialize contents) + | "GUILD_EMOJIS_UPDATE" -> GUILD_EMOJIS_UPDATE GuildEmojisUpdate.(deserialize contents) + (* | "GUILD_INTEGRATIONS_UPDATE" -> GUILD_INTEGRATIONS_UPDATE contents *) + | "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD GuildMemberAdd.(deserialize contents) + | "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE GuildMemberRemove.(deserialize contents) + | "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE GuildMemberUpdate.(deserialize contents) + | "GUILD_MEMBERS_CHUNK" -> GUILD_MEMBERS_CHUNK GuildMembersChunk.(deserialize contents) + | "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE GuildRoleCreate.(deserialize contents) + | "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE GuildRoleUpdate.(deserialize contents) + | "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE GuildRoleDelete.(deserialize contents) + | "MESSAGE_CREATE" -> MESSAGE_CREATE MessageCreate.(deserialize contents) + | "MESSAGE_UPDATE" -> MESSAGE_UPDATE MessageUpdate.(deserialize contents) + | "MESSAGE_DELETE" -> MESSAGE_DELETE MessageDelete.(deserialize contents) + | "MESSAGE_DELETE_BULK" -> MESSAGE_DELETE_BULK MessageDeleteBulk.(deserialize contents) + | "MESSAGE_REACTION_ADD" -> REACTION_ADD ReactionAdd.(deserialize contents) + | "MESSAGE_REACTION_REMOVE" -> REACTION_REMOVE ReactionRemove.(deserialize contents) + | "MESSAGE_REACTION_REMOVE_ALL" -> REACTION_REMOVE_ALL ReactionRemoveAll.(deserialize contents) + | "PRESENCE_UPDATE" -> PRESENCE_UPDATE PresenceUpdate.(deserialize contents) + | "TYPING_START" -> TYPING_START TypingStart.(deserialize contents) + | "USER_UPDATE" -> USER_UPDATE UserUpdate.(deserialize contents) + (* | "VOICE_STATE_UPDATE" -> VOICE_STATE_UPDATE contents *) + (* | "VOICE_SERVER_UPDATE" -> VOICE_SERVER_UPDATE contents *) + | "WEBHOOK_UPDATE" -> WEBHOOK_UPDATE WebhookUpdate.(deserialize contents) + | s -> UNKNOWN Unknown.(deserialize s contents) + +let dispatch ev = + match ev with + | READY d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> Ready.update_cache cache d); + !Dispatch.ready d + | RESUMED d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> Resumed.update_cache cache d); + !Dispatch.resumed d + | CHANNEL_CREATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelCreate.update_cache cache d); + !Dispatch.channel_create d + | CHANNEL_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelUpdate.update_cache cache d); + !Dispatch.channel_update d + | CHANNEL_DELETE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelDelete.update_cache cache d); + !Dispatch.channel_delete d + | CHANNEL_PINS_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelPinsUpdate.update_cache cache d); + !Dispatch.channel_pins_update d + | GUILD_CREATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildCreate.update_cache cache d); + !Dispatch.guild_create d + | GUILD_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildUpdate.update_cache cache d); + !Dispatch.guild_update d + | GUILD_DELETE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildDelete.update_cache cache d); + !Dispatch.guild_delete d + | GUILD_BAN_ADD d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildBanAdd.update_cache cache d); + !Dispatch.member_ban d + | GUILD_BAN_REMOVE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildBanRemove.update_cache cache d); + !Dispatch.member_unban d + | GUILD_EMOJIS_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildEmojisUpdate.update_cache cache d); + !Dispatch.guild_emojis_update d + (* | GUILD_INTEGRATIONS_UPDATE d -> !Dispatch.integrations_update d *) + | GUILD_MEMBER_ADD d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMemberAdd.update_cache cache d); + !Dispatch.member_join d + | GUILD_MEMBER_REMOVE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMemberRemove.update_cache cache d); + !Dispatch.member_leave d + | GUILD_MEMBER_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMemberUpdate.update_cache cache d); + !Dispatch.member_update d + | GUILD_MEMBERS_CHUNK d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMembersChunk.update_cache cache d); + !Dispatch.members_chunk d + | GUILD_ROLE_CREATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildRoleCreate.update_cache cache d); + !Dispatch.role_create d + | GUILD_ROLE_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildRoleUpdate.update_cache cache d); + !Dispatch.role_update d + | GUILD_ROLE_DELETE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> GuildRoleDelete.update_cache cache d); + !Dispatch.role_delete d + | MESSAGE_CREATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> MessageCreate.update_cache cache d); + !Dispatch.message_create d + | MESSAGE_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> MessageUpdate.update_cache cache d); + !Dispatch.message_update d + | MESSAGE_DELETE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> MessageDelete.update_cache cache d); + !Dispatch.message_delete d + | MESSAGE_DELETE_BULK d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> MessageDeleteBulk.update_cache cache d); + !Dispatch.message_delete_bulk d + | REACTION_ADD d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ReactionAdd.update_cache cache d); + !Dispatch.reaction_add d + | REACTION_REMOVE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ReactionRemove.update_cache cache d); + !Dispatch.reaction_remove d + | REACTION_REMOVE_ALL d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> ReactionRemoveAll.update_cache cache d); + !Dispatch.reaction_remove_all d + | PRESENCE_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> PresenceUpdate.update_cache cache d); + !Dispatch.presence_update d + | TYPING_START d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> TypingStart.update_cache cache d); + !Dispatch.typing_start d + | USER_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> UserUpdate.update_cache cache d); + !Dispatch.user_update d + (* | VOICE_STATE_UPDATE d -> !Dispatch.voice_state_update d *) + (* | VOICE_SERVER_UPDATE d -> !Dispatch.voice_server_update d *) + | WEBHOOK_UPDATE d -> + Mvar.update_exn Cache.cache ~f:(fun cache -> WebhookUpdate.update_cache cache d); + !Dispatch.webhook_update d + | UNKNOWN d -> !Dispatch.unknown d + +let handle_event ~ev contents = + event_of_yojson ~contents ev + |> dispatch \ No newline at end of file -- cgit v1.2.3