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