50 lines
		
	
	
		
			999 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			999 B
		
	
	
	
		
			Go
		
	
	
	
package events
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
)
 | 
						|
 | 
						|
// EventMemory is the structure for event writing to a channel. It contains the eventer
 | 
						|
// options and the event itself.  Methods for reading and writing are also defined from it.
 | 
						|
type EventMemory struct {
 | 
						|
	options  EventerOptions
 | 
						|
	elements chan *Event
 | 
						|
}
 | 
						|
 | 
						|
// Write event to memory queue
 | 
						|
func (e EventMemory) Write(event Event) (err error) {
 | 
						|
	e.elements <- &event
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
// Read event(s) from memory queue
 | 
						|
func (e EventMemory) Read(ctx context.Context, options ReadOptions) (err error) {
 | 
						|
	select {
 | 
						|
	case <-ctx.Done():
 | 
						|
		return
 | 
						|
	default:
 | 
						|
	}
 | 
						|
 | 
						|
	select {
 | 
						|
	case event := <-e.elements:
 | 
						|
		options.EventChannel <- event
 | 
						|
	default:
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// String returns eventer type
 | 
						|
func (e EventMemory) String() string {
 | 
						|
	return e.options.EventerType
 | 
						|
}
 | 
						|
 | 
						|
// NewMemoryEventer returns configured MemoryEventer
 | 
						|
func NewMemoryEventer() Eventer {
 | 
						|
	return EventMemory{
 | 
						|
		options: EventerOptions{
 | 
						|
			EventerType: Memory.String(),
 | 
						|
		},
 | 
						|
		elements: make(chan *Event, 100),
 | 
						|
	}
 | 
						|
}
 |