source2_demo/parser/
observer.rs1use crate::parser::Context;
2use crate::proto::*;
3use crate::{Entity, EntityEvents, GameEvent, StringTable};
4
5#[cfg(feature = "dota")]
6use crate::event::CombatLogEntry;
7
8pub type ObserverResult = anyhow::Result<()>;
10
11
12bitflags::bitflags! {
13 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
14 pub struct Interests: u64 {
15 const DEMO = 1 << 0; const NET = 1 << 1; const SVC = 1 << 2; const BASE_UM = 1 << 3; const BASE_GE = 1 << 4; const TICK_START = 1 << 5;
23 const TICK_END = 1 << 6;
24
25 const ENABLE_ENTITY = 1 << 7;
26 const TRACK_ENTITY = 1 << 8;
27 const ENABLE_STRINGTAB = 1 << 9;
28 const TRACK_STRINGTAB = 1 << 10;
29
30 const STOP = 1 << 11;
31
32 #[cfg(feature = "dota")]
33 const DOTA_UM = 1 << 12; #[cfg(feature = "dota")]
36 const COMBAT_LOG = 1 << 13; #[cfg(feature = "deadlock")]
40 const CITA_UM = 1 << 14; #[cfg(feature = "deadlock")]
43 const CITA_GE = 1 << 15; #[cfg(feature = "cs2")]
46 const CS2_UM = 1 << 16; #[cfg(feature = "cs2")]
49 const CS2_GE = 1 << 17; }
51}
52
53
54#[allow(unused_variables)]
58pub trait Observer {
59 fn interests(&self) -> Interests {
60 Interests::empty()
61 }
62
63 #[cold]
64 #[inline(never)]
65 fn on_demo_command(
66 &mut self,
67 ctx: &Context,
68 msg_type: EDemoCommands,
69 msg: &[u8],
70 ) -> ObserverResult {
71 Ok(())
72 }
73
74 #[cold]
75 #[inline(never)]
76 fn on_net_message(
77 &mut self,
78 ctx: &Context,
79 msg_type: NetMessages,
80 msg: &[u8],
81 ) -> ObserverResult {
82 Ok(())
83 }
84
85 #[cold]
86 #[inline(never)]
87 fn on_svc_message(
88 &mut self,
89 ctx: &Context,
90 msg_type: SvcMessages,
91 msg: &[u8],
92 ) -> ObserverResult {
93 Ok(())
94 }
95
96 #[cold]
97 #[inline(never)]
98 fn on_base_user_message(
99 &mut self,
100 ctx: &Context,
101 msg_type: EBaseUserMessages,
102 msg: &[u8],
103 ) -> ObserverResult {
104 Ok(())
105 }
106
107 #[cold]
108 #[inline(never)]
109 fn on_base_game_event(
110 &mut self,
111 ctx: &Context,
112 msg_type: EBaseGameEvents,
113 msg: &[u8],
114 ) -> ObserverResult {
115 Ok(())
116 }
117
118 #[cold]
119 #[inline(never)]
120 fn on_tick_start(&mut self, ctx: &Context) -> ObserverResult {
121 Ok(())
122 }
123
124 #[cold]
125 #[inline(never)]
126 fn on_tick_end(&mut self, ctx: &Context) -> ObserverResult {
127 Ok(())
128 }
129
130 #[cold]
131 #[inline(never)]
132 fn on_entity(&mut self, ctx: &Context, event: EntityEvents, entity: &Entity) -> ObserverResult {
133 Ok(())
134 }
135
136 #[cold]
137 #[inline(never)]
138 fn on_game_event(&mut self, ctx: &Context, ge: &GameEvent) -> ObserverResult {
139 Ok(())
140 }
141
142 #[cold]
143 #[inline(never)]
144 fn on_string_table(
145 &mut self,
146 ctx: &Context,
147 st: &StringTable,
148 modified: &[i32],
149 ) -> ObserverResult {
150 Ok(())
151 }
152
153 #[cold]
154 #[inline(never)]
155 fn on_stop(&mut self, ctx: &Context) -> ObserverResult {
156 Ok(())
157 }
158
159 #[cold]
160 #[inline(never)]
161 #[cfg(feature = "dota")]
162 fn on_combat_log(&mut self, ctx: &Context, cle: &CombatLogEntry) -> ObserverResult {
163 Ok(())
164 }
165
166 #[cold]
167 #[inline(never)]
168 #[cfg(feature = "dota")]
169 fn on_dota_user_message(
170 &mut self,
171 ctx: &Context,
172 msg_type: EDotaUserMessages,
173 msg: &[u8],
174 ) -> ObserverResult {
175 Ok(())
176 }
177
178 #[cold]
179 #[inline(never)]
180 #[cfg(feature = "deadlock")]
181 fn on_citadel_game_event(
182 &mut self,
183 ctx: &Context,
184 msg_type: ECitadelGameEvents,
185 msg: &[u8],
186 ) -> ObserverResult {
187 Ok(())
188 }
189
190 #[cold]
191 #[inline(never)]
192 #[cfg(feature = "deadlock")]
193 fn on_citadel_user_message(
194 &mut self,
195 ctx: &Context,
196 msg_type: CitadelUserMessageIds,
197 msg: &[u8],
198 ) -> ObserverResult {
199 Ok(())
200 }
201
202 #[cold]
203 #[inline(never)]
204 #[cfg(feature = "cs2")]
205 fn on_cs2_user_message(
206 &mut self,
207 ctx: &Context,
208 msg_type: ECstrike15UserMessages,
209 msg: &[u8],
210 ) -> ObserverResult {
211 Ok(())
212 }
213
214 #[cold]
215 #[inline(never)]
216 #[cfg(feature = "cs2")]
217 fn on_cs2_game_event(
218 &mut self,
219 ctx: &Context,
220 msg_type: ECsgoGameEvents,
221 msg: &[u8],
222 ) -> ObserverResult {
223 Ok(())
224 }
225}