Skip to content

Commit 773fff9

Browse files
committed
pass controller in handle_event calls
1 parent 7614c62 commit 773fff9

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

src/reactor.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ pub trait Handler: Send + Iterator<Item = Action<Self::Listener, Self::Transport
120120
/// connections, database connections etc are all fall into this category.
121121
type Transport: Resource;
122122

123-
/// A command which may be sent to the [`Handler`] from outside of the [`Reactor`], including
123+
/// A command which may be sent to the [`Handler`] from outside the [`Reactor`], including
124124
/// other threads.
125125
///
126126
/// The handler object is owned by the reactor runtime and executes always in the context of the
@@ -148,6 +148,7 @@ pub trait Handler: Send + Iterator<Item = Action<Self::Listener, Self::Transport
148148
id: ResourceId,
149149
event: <Self::Listener as Resource>::Event,
150150
time: Timestamp,
151+
sender: Controller<Self::Command, impl WakerSend>,
151152
);
152153

153154
/// Method called by the reactor upon I/O event on a transport resource.
@@ -156,6 +157,7 @@ pub trait Handler: Send + Iterator<Item = Action<Self::Listener, Self::Transport
156157
id: ResourceId,
157158
event: <Self::Transport as Resource>::Event,
158159
time: Timestamp,
160+
sender: Controller<Self::Command, impl WakerSend>,
159161
);
160162

161163
/// Method called by the reactor when a given resource was successfully registered and provided
@@ -528,10 +530,11 @@ impl<H: Handler, P: Poll> Runtime<H, P> {
528530
#[cfg(feature = "log")]
529531
log::trace!(target: "reactor", "Got `{io}` event from listener {id}");
530532

533+
let sender = self.controller();
531534
let listener = self.listeners.get_mut(&id).expect("resource disappeared");
532535
for io in io {
533536
if let Some(event) = listener.handle_io(io) {
534-
self.service.handle_listener_event(id, event, time);
537+
self.service.handle_listener_event(id, event, time, sender.clone());
535538
}
536539
}
537540
}
@@ -549,10 +552,12 @@ impl<H: Handler, P: Poll> Runtime<H, P> {
549552
#[cfg(feature = "log")]
550553
log::trace!(target: "reactor", "Got `{io}` event from transport {id}");
551554

555+
let sender = self.controller();
552556
let transport = self.transports.get_mut(&id).expect("resource disappeared");
553557
for io in io {
554558
if let Some(event) = transport.handle_io(io) {
555-
self.service.handle_transport_event(id, event, time);
559+
let sender = sender.clone();
560+
self.service.handle_transport_event(id, event, time, sender);
556561
}
557562
}
558563
}
@@ -790,6 +795,7 @@ mod test {
790795
_d: ResourceId,
791796
_event: <Self::Listener as Resource>::Event,
792797
_time: Timestamp,
798+
_sender: Controller<Cmd, impl WakerSend>,
793799
) {
794800
unreachable!()
795801
}
@@ -798,6 +804,7 @@ mod test {
798804
_id: ResourceId,
799805
_event: <Self::Transport as Resource>::Event,
800806
_time: Timestamp,
807+
_sender: Controller<Cmd, impl WakerSend>,
801808
) {
802809
unreachable!()
803810
}

0 commit comments

Comments
 (0)