1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package broker
- import (
- "encoding/json"
- "sync"
- "time"
- )
- var (
- eventPool = new(sync.Pool)
- )
- func applyEvent() *Event {
- if v := eventPool.Get(); v == nil {
- return &Event{
- Timestamp: time.Now().Unix(),
- }
- } else {
- e := v.(*Event)
- e.Timestamp = time.Now().Unix()
- e.Header = make(map[string]string)
- e.Body = nil
- return e
- }
- }
- func releaseEvent(e *Event) {
- eventPool.Put(e)
- }
- type Event struct {
- Namespace string `json:"-"`
- Name string `json:"name"`
- Trigger string `json:"-"` //触发的用户,用于一些订阅者过滤数据
- Timestamp int64 `json:"ts"`
- Header map[string]string `json:"meta"`
- Body []byte `json:"body,omitempty"`
- }
- func (e *Event) WithTrigger(target string) *Event {
- e.Trigger = target
- return e
- }
- func (e *Event) Set(k, v string) *Event {
- if e.Header == nil {
- e.Header = make(map[string]string)
- }
- e.Header[k] = v
- return e
- }
- func (e *Event) MultiSet(ss ...string) *Event {
- if len(ss)%2 != 0 {
- return e
- }
- if e.Header == nil {
- e.Header = make(map[string]string)
- }
- for i := 0; i < len(ss); i += 2 {
- e.Header[ss[i]] = ss[i+1]
- }
- return e
- }
- func (e *Event) Get(k string) string {
- if e.Header == nil {
- return ""
- }
- return e.Header[k]
- }
- func (e *Event) Encode() (buf []byte) {
- buf, _ = json.Marshal(e)
- return
- }
- func NewEvent(namespace string, name string) *Event {
- e := applyEvent()
- e.Namespace = namespace
- e.Name = name
- return e
- }
|