| 257 | /// Run the session loop: read frames, parse, dispatch, respond. |
| 258 | #[instrument(skip(self), fields(peer = %self.peer_addr))] |
| 259 | pub async fn run(mut self) -> crate::Result<()> { |
| 260 | let idle_timeout_secs = self.state.idle_timeout_secs(); |
| 261 | let absolute_timeout_secs = self.state.session_absolute_timeout_secs(); |
| 262 | let result = self |
| 263 | .run_inner(idle_timeout_secs, absolute_timeout_secs) |
| 264 | .await; |
| 265 | // Always unregister on exit regardless of reason. |
| 266 | self.state |
| 267 | .session_registry |
| 268 | .unregister(&self.session_id.clone()); |
| 269 | result |
| 270 | } |
| 271 | |
| 272 | async fn run_inner( |
| 273 | &mut self, |