Listening to events
The SDK emits several events to provide the application with an up-to-date state of the SDK or ongoing payments.
Add event listener API docs
Rust
pub(crate) struct SdkEventListener {}
impl EventListener for SdkEventListener {
fn on_event(&self, e: SdkEvent) {
info!("Received event: {e:?}");
}
}
pub(crate) fn add_event_listener(
sdk: &BreezSdk,
listener: Box<SdkEventListener>,
) -> Result<String> {
let listener_id = sdk.add_event_listener(listener);
Ok(listener_id)
}
Swift
class SdkEventListener: EventListener {
func onEvent(event: SdkEvent) {
print("Received event: ", event)
}
}
func addEventListener(sdk: BreezSdk, listener: SdkEventListener) -> String {
let listenerId = sdk.addEventListener(listener: listener)
return listenerId
}
Kotlin
class SdkListener : EventListener {
override fun onEvent(e: SdkEvent) {
// Log.v("SDKListener", "Received event $e")
}
}
fun addEventListener(sdk: BreezSdk, listener: SdkListener): String? {
try {
val listenerId = sdk.addEventListener(listener)
return listenerId
} catch (e: Exception) {
// handle error
return null
}
}
Javascript
class JsEventListener {
onEvent = (event: SdkEvent) => {
console.log(`Received event: ${JSON.stringify(event)}`)
}
}
const eventListener = new JsEventListener()
const listenerId = sdk.addEventListener(eventListener)
React Native
class JsEventListener {
onEvent = (event: SdkEvent) => {
console.log(`Received event: ${JSON.stringify(event)}`)
}
}
const eventListener = new JsEventListener()
const listenerId = sdk.addEventListener(eventListener)
Flutter
StreamSubscription<SdkEvent>? _eventSubscription;
Stream<SdkEvent>? _eventStream;
// Initializes SDK event stream.
//
// Call once on your Dart entrypoint file, e.g.; `lib/main.dart`
// or singleton SDK service. It is recommended to use a single instance
// of the SDK across your Flutter app.
void initializeEventsStream(BreezSdk sdk) {
_eventStream ??= sdk.addEventListener().asBroadcastStream();
}
final _eventStreamController = StreamController<SdkEvent>.broadcast();
Stream<SdkEvent> get eventStream => _eventStreamController.stream;
// Subscribe to the event stream
void subscribeToEventStream() {
_eventSubscription = _eventStream?.listen((sdkEvent) {
_eventStreamController.add(sdkEvent);
}, onError: (e) {
_eventStreamController.addError(e);
});
}
Python
class SdkListener(EventListener):
def on_event(self, event: SdkEvent):
logging.debug(f"Received event {event}")
def add_event_listener(sdk: BreezSdk, listener: SdkListener):
try:
listener_id = sdk.add_event_listener(listener=listener)
return listener_id
except Exception as error:
logging.error(error)
raise
Go
type SdkListener struct{}
func (SdkListener) OnEvent(e breez_sdk_spark.SdkEvent) {
log.Printf("Received event %#v", e)
}
func AddEventListener(sdk *breez_sdk_spark.BreezSdk, listener SdkListener) string {
return sdk.AddEventListener(listener)
}
Remove event listener API docs
When you no longer need to listen to events, you can remove the listener.
Rust
pub(crate) fn remove_event_listener(sdk: &BreezSdk, listener_id: &str) -> Result<()> {
sdk.remove_event_listener(listener_id);
Ok(())
}
Swift
func removeEventListener(sdk: BreezSdk, listenerId: String) {
sdk.removeEventListener(id: listenerId)
}
Kotlin
fun removeEventListener(sdk: BreezSdk, listenerId: String) {
try {
sdk.removeEventListener(listenerId)
} catch (e: Exception) {
// handle error
}
}
Javascript
sdk.removeEventListener(listenerId)
React Native
sdk.removeEventListener(listenerId)
Flutter
void unsubscribeFromEventStream() {
_eventSubscription?.cancel();
}
Python
def remove_event_listener(sdk: BreezSdk, listener_id: str):
try:
sdk.remove_event_listener(listener_id=listener_id)
except Exception as error:
logging.error(error)
raise
Go
func RemoveEventListener(sdk *breez_sdk_spark.BreezSdk, listenerId string) bool {
return sdk.RemoveEventListener(listenerId)
}