use schema with all event handler functions too

This commit is contained in:
Gered 2016-02-28 17:24:15 -05:00
parent a22e28f4b0
commit 4fb63f930e

View file

@ -1,13 +1,17 @@
(ns vwowrla.core.events.handlers (ns vwowrla.core.events.handlers
(:require (:require
[vwowrla.core.encounters.analysis :as analysis])) [schema.core :as s]
[vwowrla.core.encounters.analysis :as analysis])
(:use
vwowrla.core.schemas))
(defmulti handle-event (defmulti handle-event
(fn [{:keys [event]} _] (fn [{:keys [event]} _]
(keyword event))) (keyword event)))
(defmethod handle-event :skill-damage-to-target (s/defmethod handle-event :skill-damage-to-target :- RaidAnalysis
[{:keys [source-name skill target-name damage damage-type absorbed resisted blocked crit? timestamp] :as event} data] [{:keys [source-name skill target-name damage damage-type absorbed resisted blocked crit? timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-damage (analysis/process-source-to-target-damage
source-name source-name
target-name target-name
@ -22,8 +26,9 @@
timestamp timestamp
data)) data))
(defmethod handle-event :skill-avoided-by-target (s/defmethod handle-event :skill-avoided-by-target :- RaidAnalysis
[{:keys [source-name target-name skill avoidance-method timestamp] :as event} data] [{:keys [source-name target-name skill avoidance-method timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-damage (analysis/process-source-to-target-damage
source-name source-name
target-name target-name
@ -33,8 +38,9 @@
timestamp timestamp
data)) data))
(defmethod handle-event :damage-reflected (s/defmethod handle-event :damage-reflected :- RaidAnalysis
[{:keys [source-name target-name damage damage-type timestamp] :as event} data] [{:keys [source-name target-name damage damage-type timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-damage (analysis/process-source-to-target-damage
source-name source-name
target-name target-name
@ -46,8 +52,9 @@
timestamp timestamp
data)) data))
(defmethod handle-event :melee-damage-to-target (s/defmethod handle-event :melee-damage-to-target :- RaidAnalysis
[{:keys [source-name target-name damage damage-type hit-type absorbed resisted blocked crit? timestamp] :as event} data] [{:keys [source-name target-name damage damage-type hit-type absorbed resisted blocked crit? timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-damage (analysis/process-source-to-target-damage
source-name source-name
target-name target-name
@ -63,8 +70,9 @@
timestamp timestamp
data)) data))
(defmethod handle-event :melee-avoided-by-target (s/defmethod handle-event :melee-avoided-by-target :- RaidAnalysis
[{:keys [source-name target-name avoidance-method timestamp] :as event} data] [{:keys [source-name target-name avoidance-method timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-damage (analysis/process-source-to-target-damage
source-name source-name
target-name target-name
@ -74,12 +82,14 @@
timestamp timestamp
data)) data))
(defmethod handle-event :skill-interrupted-by-target (s/defmethod handle-event :skill-interrupted-by-target :- RaidAnalysis
[{:keys [source-name target-name skill timestamp] :as event} data] [{:keys [source-name target-name skill timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :dot-damages-target (s/defmethod handle-event :dot-damages-target :- RaidAnalysis
[{:keys [source-name skill target-name damage damage-type absorbed resisted timestamp] :as event} data] [{:keys [source-name skill target-name damage damage-type absorbed resisted timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-damage (analysis/process-source-to-target-damage
source-name source-name
target-name target-name
@ -93,29 +103,35 @@
timestamp timestamp
data)) data))
(defmethod handle-event :cast-begins (s/defmethod handle-event :cast-begins :- RaidAnalysis
[{:keys [source-name skill spell? timestamp] :as event} data] [{:keys [source-name skill spell? timestamp]} :- CombatEvent
data :- RaidAnalysis]
; don't think we really care about this ? ; don't think we really care about this ?
data) data)
(defmethod handle-event :skill-performed-on-target (s/defmethod handle-event :skill-performed-on-target :- RaidAnalysis
[{:keys [source-name target-name skill spell? extra timestamp] :as event} data] [{:keys [source-name target-name skill spell? extra timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-source-to-target-cast source-name target-name skill timestamp data)) (analysis/process-source-to-target-cast source-name target-name skill timestamp data))
(defmethod handle-event :cast (s/defmethod handle-event :cast :- RaidAnalysis
[{:keys [source-name skill spell? timestamp] :as event} data] [{:keys [source-name skill spell? timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-entity-cast source-name skill timestamp data)) (analysis/process-entity-cast source-name skill timestamp data))
(defmethod handle-event :skill-heals-target (s/defmethod handle-event :skill-heals-target :- RaidAnalysis
[{:keys [source-name skill crit? target-name amount timestamp] :as event} data] [{:keys [source-name skill crit? target-name amount timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :resource-gained (s/defmethod handle-event :resource-gained :- RaidAnalysis
[{:keys [target-name amount resource-type source-name skill timestamp] :as event} data] [{:keys [target-name amount resource-type source-name skill timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :resource-lost (s/defmethod handle-event :resource-lost :- RaidAnalysis
[{:keys [target-name amount resource-type source-name skill timestamp] :as event} data] [{:keys [target-name amount resource-type source-name skill timestamp]} :- CombatEvent
data :- RaidAnalysis]
(condp = resource-type (condp = resource-type
:health (analysis/process-source-to-target-damage :health (analysis/process-source-to-target-damage
source-name source-name
@ -129,33 +145,39 @@
data) data)
data)) data))
(defmethod handle-event :special-gained (s/defmethod handle-event :special-gained :- RaidAnalysis
[{:keys [target-name special source timestamp] :as event} data] [{:keys [target-name special source timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :aura-gained (s/defmethod handle-event :aura-gained :- RaidAnalysis
[{:keys [target-name aura-name aura-type stacks timestamp] :as event} data] [{:keys [target-name aura-name aura-type stacks timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :aura-lost (s/defmethod handle-event :aura-lost :- RaidAnalysis
[{:keys [target-name aura-name faded? stacks timestamp] :as event} data] [{:keys [target-name aura-name faded? stacks timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :other-damage (s/defmethod handle-event :other-damage :- RaidAnalysis
[{:keys [target-name damage damage-type resisted absorbed source timestamp] :as event} data] [{:keys [target-name damage damage-type resisted absorbed source timestamp]} :- CombatEvent
data :- RaidAnalysis]
data) data)
(defmethod handle-event :death (s/defmethod handle-event :death :- RaidAnalysis
[{:keys [source-name timestamp] :as event} data] [{:keys [source-name timestamp]} :- CombatEvent
data :- RaidAnalysis]
(analysis/process-entity-death source-name timestamp data)) (analysis/process-entity-death source-name timestamp data))
(defmethod handle-event :ignored (s/defmethod handle-event :ignored :- RaidAnalysis
[{:keys [line] :as event} data] [{:keys [line]} :- CombatEvent
#_(println "[WARN] *** IGNORED ***" line) data :- RaidAnalysis]
data) data)
(defmethod handle-event :default (s/defmethod handle-event :default :- RaidAnalysis
[{:keys [line] :as event} data] [{:keys [line]} :- CombatEvent
data :- RaidAnalysis]
(println "[WARN] *** UNRECOGNIZED ***" line) (println "[WARN] *** UNRECOGNIZED ***" line)
data) data)