Pull to refresh

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

Reading time3 min
Views5.7K
Здравствуйте, уважаемые коллеги, любители 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!
Tags:
Hubs:
Total votes 6: ↑5 and ↓1+4
Comments11

Articles