44 lines
856 B
Go
44 lines
856 B
Go
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package sse
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// EventLog holds all of previous events
|
|
type EventLog []*Event
|
|
|
|
// Add event to eventlog
|
|
func (e *EventLog) Add(ev *Event) {
|
|
if !ev.hasContent() {
|
|
return
|
|
}
|
|
|
|
ev.ID = []byte(e.currentindex())
|
|
ev.timestamp = time.Now()
|
|
*e = append(*e, ev)
|
|
}
|
|
|
|
// Clear events from eventlog
|
|
func (e *EventLog) Clear() {
|
|
*e = nil
|
|
}
|
|
|
|
// Replay events to a subscriber
|
|
func (e *EventLog) Replay(s *Subscriber) {
|
|
for i := 0; i < len(*e); i++ {
|
|
id, _ := strconv.Atoi(string((*e)[i].ID))
|
|
if id >= s.eventid {
|
|
s.connection <- (*e)[i]
|
|
}
|
|
}
|
|
}
|
|
|
|
func (e *EventLog) currentindex() string {
|
|
return strconv.Itoa(len(*e))
|
|
}
|