mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-03-21 09:41:45 +00:00
As relict from very early designs of `connlib`, the `Callbacks` trait is still present and defines how the host app receives events from a running `Session`. Callbacks are not a great design pattern however because they force the running code, i.e. `connlib`s event-loop to execute unknown code. For example, if that code panics, all of `connlib` is taken down. Additionally, not all consumers may want to receive events via callbacks. The GUI and headless client for example already have their own event-loop in which they process all kinds of things. Having to deal with the `Callbacks` interface introduces an odd indirection here. To fix this, we instead return an `EventStream` when constructing a `Session`. This essentially aligns the API of `Session` with that of a channel. You receive two handles, one for sending in commands and one for receiving events. A `Session` will automatically spawn itself onto the given runtime so progress is made even if one does not poll on these channel handles. This greatly simplifies the code: - We get to delete the `Callbacks` interface. - We can delete the threaded callback adapter. This was only necessary because we didn't want to block `connlib` with the handling of the event. By using a channel for events, this is automatically guaranteed. - The GUI and headless client can directly integrate the event handling in their event-loop, without having to create an indirection with a channel. - It is now clear that only the Apple and Android FFI layers actually use callbacks to communicate these events. - We net-delete 100 LoC
34 lines
1015 B
TOML
34 lines
1015 B
TOML
[package]
|
|
name = "client-shared"
|
|
version = "0.1.0"
|
|
edition = { workspace = true }
|
|
license = { workspace = true }
|
|
|
|
[dependencies]
|
|
anyhow = { workspace = true }
|
|
backoff = { workspace = true }
|
|
bimap = { workspace = true }
|
|
connlib-model = { workspace = true }
|
|
dns-types = { workspace = true }
|
|
firezone-logging = { workspace = true }
|
|
firezone-tunnel = { workspace = true }
|
|
ip_network = { workspace = true }
|
|
phoenix-channel = { workspace = true }
|
|
secrecy = { workspace = true }
|
|
serde = { workspace = true, features = ["std", "derive"] }
|
|
snownet = { workspace = true }
|
|
socket-factory = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
time = { workspace = true, features = ["formatting"] }
|
|
tokio = { workspace = true, features = ["rt", "sync"] }
|
|
tracing = { workspace = true, features = ["std", "attributes"] }
|
|
tun = { workspace = true }
|
|
url = { workspace = true, features = ["serde"] }
|
|
|
|
[dev-dependencies]
|
|
chrono = { workspace = true }
|
|
serde_json = { workspace = true, features = ["std"] }
|
|
|
|
[lints]
|
|
workspace = true
|