diff options
| author | Adelyn Breedlove <[email protected]> | 2019-02-11 17:23:59 +0000 |
|---|---|---|
| committer | Adelyn Breedlove <[email protected]> | 2019-02-11 17:23:59 +0000 |
| commit | 7c9b809078b5cd53e3d54c0004c683da2ec679af (patch) | |
| tree | 5a1b165b597fc1ad4167115d9a23b12852a4636b /lib/gateway/event.ml | |
| parent | Merge branch 'sharder_fixes' into 'master' (diff) | |
| download | disml-7c9b809078b5cd53e3d54c0004c683da2ec679af.tar.xz disml-7c9b809078b5cd53e3d54c0004c683da2ec679af.zip | |
Add a cache
Diffstat (limited to 'lib/gateway/event.ml')
| -rw-r--r-- | lib/gateway/event.ml | 176 |
1 files changed, 176 insertions, 0 deletions
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 |