Newer
Older
import (
"fmt"
"reflect"
"github.com/hyperledger/burrow/event"
"github.com/hyperledger/burrow/txs"
)
var cdc = txs.NewAminoCodec()
var eventMessageTag = event.TagMap{event.MessageTypeKey: reflect.TypeOf(&Event{}).String()}
type Provider interface {
GetEvents(startKey, endKey Key, consumer func(*Event) (stop bool)) (stopped bool, err error)
LatestEventKey() Key
type Event struct {
Header *Header
Call *EventDataCall `json:",omitempty"`
Log *EventDataLog `json:",omitempty"`
Tx *EventDataTx `json:",omitempty"`
tags event.Tags
}
func DecodeEvent(bs []byte) (*Event, error) {
ev := new(Event)
err := cdc.UnmarshalBinary(bs, ev)
if err != nil {
return nil, err
}
return ev, nil
}
func (ev *Event) Key() Key {
return ev.Header.Key()
}
// Performs a shallow copy of Event
func (ev *Event) Copy() *Event {
h := *ev.Header
evCopy := Event{
Header: &h,
}
if ev.Tx != nil {
tx := *ev.Tx
evCopy.Tx = &tx
}
if ev.Call != nil {
call := *ev.Call
evCopy.Call = &call
}
if ev.Log != nil {
log := *ev.Log
evCopy.Log = &log
}
return &evCopy
}
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
func (ev *Event) Encode() ([]byte, error) {
return cdc.MarshalBinary(ev)
}
func (ev *Event) Tags() event.Tags {
if ev.tags == nil {
ev.tags = event.CombinedTags{
ev.Header,
eventMessageTag,
ev.Tx,
ev.Call,
ev.Log,
}
}
return ev.tags
}
func (ev *Event) Get(key string) (value string, ok bool) {
return ev.Tags().Get(key)
}
func (ev *Event) Keys() []string {
return ev.Tags().Keys()
}
func (ev *Event) Len() int {
return ev.Tags().Len()
}
// event.Cache will provide an index through this methods of Indexable
func (ev *Event) ProvideIndex(index uint64) {
ev.Header.Index = index
}
func (ev *Event) String() string {
return fmt.Sprintf("%v", ev.Header)
}
func (ev *Event) GetTx() *EventDataTx {
if ev == nil {
return nil
}
return ev.Tx
}
func (ev *Event) GetCall() *EventDataCall {
if ev == nil {
return nil
}
return ev.Call
}
func (ev *Event) GetLog() *EventDataLog {
if ev == nil {
return nil
}
return ev.Log
}