event_emitter

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 18, 2023 License: MIT Imports: 2 Imported by: 0

README

EventEmitter

Build Status codecov

Install
go get -v github.com/lxzan/event_emitter@latest
Quick Start
package main

import (
	"fmt"
	"github.com/lxzan/event_emitter"
)

func main() {
	var em = event_emitter.New[event_emitter.Int64Subscriber](&event_emitter.Config{
		BucketNum:  16,
		BucketSize: 128,
	})

	var suber1 = em.NewSubscriber()
	em.Subscribe(suber1, "greet", func(subscriber event_emitter.Int64Subscriber, msg any) {
		fmt.Printf("recv: sub_id=%d, msg=%v\n", subscriber.GetSubscriberID(), msg)
	})
	em.Subscribe(suber1, "greet1", func(subscriber event_emitter.Int64Subscriber, msg any) {
		fmt.Printf("recv: sub_id=%d, msg=%v\n", subscriber.GetSubscriberID(), msg)
	})

	var suber2 = em.NewSubscriber()
	em.Subscribe(suber2, "greet1", func(subscriber event_emitter.Int64Subscriber, msg any) {
		fmt.Printf("recv: sub_id=%d, msg=%v\n", subscriber.GetSubscriberID(), msg)
	})

	em.Publish("greet1", "hello!")
}
GWS Broadcast
package main

import (
	"github.com/lxzan/event_emitter"
	"github.com/lxzan/gws"
)

type Socket struct{ *gws.Conn }

func (c *Socket) GetSubscriberID() int64 {
	userId, _ := c.Session().Load("userId")
	return userId.(int64)
}

func Sub(em *event_emitter.EventEmitter[*Socket], topic string, socket *Socket) {
	em.Subscribe(socket, topic, func(subscriber *Socket, msg any) {
		_ = msg.(*gws.Broadcaster).Broadcast(subscriber.Conn)
	})
}

func Pub(em *event_emitter.EventEmitter[*Socket], topic string, op gws.Opcode, msg []byte) {
	var broadcaster = gws.NewBroadcaster(op, msg)
	defer broadcaster.Close()
	em.Publish(topic, broadcaster)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	// 分片数
	// Number of slices
	BucketNum int64

	// 每个分片的初始化容量, 根据订阅量估算, 默认为0.
	// Initialization capacity of each slice, estimated from subscriptions, default 0.
	BucketSize int64
}

type EventEmitter

type EventEmitter[T Subscriber[T]] struct {
	// contains filtered or unexported fields
}

func New

func New[T Subscriber[T]](conf *Config) *EventEmitter[T]

New 创建事件发射器实例 Creating an EventEmitter Instance

func (*EventEmitter[T]) CountSubscriberByTopic

func (c *EventEmitter[T]) CountSubscriberByTopic(topic string) int

CountSubscriberByTopic 获取主题订阅人数 Get the number of subscribers to a topic

func (*EventEmitter[T]) GetTopicsBySubscriber added in v0.1.0

func (c *EventEmitter[T]) GetTopicsBySubscriber(suber T) []string

GetTopicsBySubscriber 通过订阅者获取主题列表 Get a list of topics by subscriber

func (*EventEmitter[T]) NewSubscriber

func (c *EventEmitter[T]) NewSubscriber() Int64Subscriber

NewSubscriber 生成订阅ID. 也可以使用自己的ID, 保证唯一即可. Generate a subscription ID. You can also use your own ID, just make sure it's unique.

func (*EventEmitter[T]) Publish

func (c *EventEmitter[T]) Publish(topic string, msg any)

Publish 向主题发布消息 Publish a message to the topic

func (*EventEmitter[T]) Subscribe

func (c *EventEmitter[T]) Subscribe(suber T, topic string, f func(subscriber T, msg any))

Subscribe 订阅主题消息. 注意: 回调函数必须是非阻塞的. Subscribe messages from the topic. Note: Callback functions must be non-blocking.

func (*EventEmitter[T]) UnSubscribe

func (c *EventEmitter[T]) UnSubscribe(suber T, topic string)

UnSubscribe 取消订阅一个主题 Cancel a subscribed topic

func (*EventEmitter[T]) UnSubscribeAll

func (c *EventEmitter[T]) UnSubscribeAll(suber T)

UnSubscribeAll 取消订阅所有主题 Cancel all subscribed topics

type Int64Subscriber added in v0.1.0

type Int64Subscriber int64

func (Int64Subscriber) GetSubscriberID added in v0.1.0

func (c Int64Subscriber) GetSubscriberID() int64

type Subscriber added in v0.1.0

type Subscriber[T any] interface {
	GetSubscriberID() int64 // 获取订阅者唯一ID
}

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL