37 lines
717 B
Go
37 lines
717 B
Go
package subscriptions
|
|
|
|
import (
|
|
"io"
|
|
)
|
|
|
|
// Message defines a client's channel data.
|
|
type Message struct {
|
|
Name string `json:"name"`
|
|
Data []byte `json:"data"`
|
|
}
|
|
|
|
// WriteSSE writes the current message in a SSE format into the provided writer.
|
|
//
|
|
// For example, writing to a router.Event:
|
|
//
|
|
// m := Message{Name: "users/create", Data: []byte{...}}
|
|
// m.Write(e.Response, "yourEventId")
|
|
// e.Flush()
|
|
func (m *Message) WriteSSE(w io.Writer, eventId string) error {
|
|
parts := [][]byte{
|
|
[]byte("id:" + eventId + "\n"),
|
|
[]byte("event:" + m.Name + "\n"),
|
|
[]byte("data:"),
|
|
m.Data,
|
|
[]byte("\n\n"),
|
|
}
|
|
|
|
for _, part := range parts {
|
|
_, err := w.Write(part)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|