/systemkit-events

Primary LanguageGoOtherNOASSERTION

Go Events

Robust events for Go. It takes 0.1 seconds to send/receive 1 Million events.

Install

go get github.com/codemodify/systemkit-events

API

   
On(event, handler, callOnce) Subscribe
OnWithData(event, handler, callOnce) Subscribe with payload
Off(event, handlerRef) Unsubscribe
OffWithData(event, handlerRef) Unsubscribe with payload
Emit(event) Emit
EmitWithData(event, data) Emit with payload

Usage: Subscribe + Notify

package main

import (
	events "github.com/codemodify/systemkit-events"
)

func main() {
	events.Events().On("PING", func() {
		// FIMXE: will be called
	})

	events.Events().Emit("PING")
}

Usage: Subscribe (data) + Notify (data)

package main

import (
	events "github.com/codemodify/systemkit-events"
)

func main() {
	events.Events().OnWithData("PING", func(data []byte) {
		// FIMXE: will be called
	})

	events.Events().EmitWithData("PING", []byte("PING-DATA"))
}

Usage: Subscribe (yes-no-data) + Notify (data)

package main

import (
	events "github.com/codemodify/systemkit-events"
)

func main() {
	events.Events().OnWithData("PING", func(data []byte) {
		// FIMXE: will be called
	})

	events.Events().On("PING", func() {
		// FIMXE: will be called
	})

	events.Events().EmitWithData("PING", []byte("PING-DATA"))
}

Usage: Subscribe (yes-no-data) + Notify

package main

import (
	events "github.com/codemodify/systemkit-events"
)

func main() {
	events.Events().OnWithData("PING", func(data []byte) {
		// FIMXE: will be called, data will be nil
	})

	events.Events().On("PING", func() {
		// FIMXE: will be called
	})

	events.Events().Emit("PING")
}

Usage: Subscribe Once + Notify

package main

import (
	events "github.com/codemodify/systemkit-events"
)

func main() {

	handler1CallOnce := true
	events.Events().On("PING", func() {
		// FIMXE: will be called ONCE
	}, handler1CallOnce)

	handler3CallOnce := false
	events.Events().On("PING", func() {
		// FIMXE: will be called UNTIL "events.Events().Off()" is called
	}, handler3CallOnce)

	events.Events().Emit("PING")
}