diff options
author | 2021-06-19 11:18:55 +0200 | |
---|---|---|
committer | 2021-06-19 11:18:55 +0200 | |
commit | aa8a0d08501cbb22400a67ece85c45fdfbdc6131 (patch) | |
tree | 4a4581fb8f1c9bf8cac742be15d7a57eec170a1b /internal/gtsmodel/stream.go | |
parent | update CONTRIBUTING with css bundling instructions, and go fmt (#48) (diff) | |
download | gotosocial-aa8a0d08501cbb22400a67ece85c45fdfbdc6131.tar.xz |
Streaming (#49)
Add new status and notification websocket streaming capabilities
Diffstat (limited to 'internal/gtsmodel/stream.go')
-rw-r--r-- | internal/gtsmodel/stream.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/gtsmodel/stream.go b/internal/gtsmodel/stream.go new file mode 100644 index 000000000..4a1571de5 --- /dev/null +++ b/internal/gtsmodel/stream.go @@ -0,0 +1,38 @@ +package gtsmodel + +import "sync" + +// StreamsForAccount is a wrapper for the multiple streams that one account can have running at the same time. +// TODO: put a limit on this +type StreamsForAccount struct { + // The currently held streams for this account + Streams []*Stream + // Mutex to lock/unlock when modifying the slice of streams. + sync.Mutex +} + +// Stream represents one open stream for a client. +type Stream struct { + // ID of this stream, generated during creation. + ID string + // Type of this stream: user/public/etc + Type string + // Channel of messages for the client to read from + Messages chan *Message + // Channel to close when the client drops away + Hangup chan interface{} + // Only put messages in the stream when Connected + Connected bool + // Mutex to lock/unlock when inserting messages, hanging up, changing the connected state etc. + sync.Mutex +} + +// Message represents one streamed message. +type Message struct { + // All the stream types this message should be delivered to. + Stream []string `json:"stream"` + // The event type of the message (update/delete/notification etc) + Event string `json:"event"` + // The actual payload of the message. In case of an update or notification, this will be a JSON string. + Payload string `json:"payload"` +} |