KDispatcher — легкий и удобный eventbus для повседневного использования

от автора

Здравствуйте, уважаемые коллеги, любители Kotlin

В своей первой статье я хочу рассказать вам об одной полезной библиотеке, которую я написал, исключительно на Kotlin, и активно поддерживаю и развиваю. Называется она, — KDispatcher. Предназначена для рассылки и подписки на уведомления между вашими компонентами кода. Вы можете использовать его в любом kotlin-проекте, будь то Android, Frontend, Backend или KotlinNative.

Основные преимущества:

  • Быстрая и простая подписка на события
  • Приоритетность вызовов функций-слушателей (callbacks)
  • Использование kotlin extension functions
  • Потоко-безопасность


Итак, чтобы использовать эту библиотеку у себя в проекте, вам необходимо подключить ее через Gradle:

implementation 'com.rasalexman.kdispatcher:kdispatcher:x.y.z'

или Maven:

<dependency>   <groupId>com.rasalexman.kdispatcher</groupId>   <artifactId>kdispatcher</artifactId>   <version>x.y.z</version>   <type>pom</type> </dependency>

После этого, вы можете воспользоваться двумя способами:

1) Вызвать метод объекта:

KDispatcher.subscribe(eventName, ::listenerFunction, priority)

где, eventName — строковое название вашего события, на которое вы хотите подписаться; ::listenerFunction — функция, которая принимает один параметр типа Notification и может быть вида

(Notification<T>)->Unit

содержащий в себе объект ваших данных (data:T) и название события(eventName:String). Последний, не обязательный параметр, priority:Int — числовая переменная, для сортировки вызова ваших коллбэков (callback functions), так как вы можете подписать на одно событие сразу несколько слушателей. Чтобы передать событие вам необходимо вызвать метод:

KDispatcher.call(eventName:String, data:Any)

Так же вы можете отписываться от прослушивания событий, когда они вам больше не нужны, с помощью метода:

KDispatcher.unsubscribe(eventName:String, ::listenerFunction)

Все очень просто.

2) Второй способ это заимплементить ваши классы (слово конечно не очень, но надеюсь все поймут) от интерфейса IKDispatcher и вы сможете получить все функциональности событийного фреймворка, и даже больше, за счет kotlin extension functions. Ниже хочу привести небольшой пример использования этого интерфейса:

 class MainActivity : AppCompatActivity(), IKDispatcher {      private val eventListenerOne = this::eventOneHandler     //...          override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         scopeOperation()     }     private fun scopeOperation() {         // подписываемся на события используя разные способы         subscribe(EVENT_CALL_ONE, 3, eventListenerOne)         subscribe(EVENT_CALL_ONE, 1, ::eventListenerTwo)         subscribe(EVENT_CALL_ONE, 2, MyClass::eventListenerFour)         // вызываем событие         call(EVENT_CALL_ONE, "FIRST CALL FROM KDISPATCHER")                  /**          * так же вы можете использовать lambda-выражения          */         val eventName = "LAMBDA_EVENT"         subscribe<String>(eventName) { notification ->             println("LAMBDA_EVENT HAS FIRED with event name ${notification.eventName} and data ${notification.data}")             unsubscribe(notification.eventName)         }                  call(eventName, "FIRST CALL CUSTOM LABDA EVENT")     }          fun eventOneHandler(notification:Notification<Any>) {        println("eventOneHandler MY TEST IS COMING event = ${notification.eventName} AND data = ${notification.data}")     } } 

Полный пример использования вы сможете найти по ссылке
KDispatcher на гитхабе

Спасибо, что дочитали до конца. Буду очень рад отзывам и помощи в развитие проекта.

Всем приятного кодинга на потрясающем языке KOTLIN!


ссылка на оригинал статьи https://habr.com/post/418707/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *