summaryrefslogtreecommitdiff
path: root/internal/stream/stream.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2021-09-03 10:27:40 +0100
committerLibravatar GitHub <noreply@github.com>2021-09-03 10:27:40 +0100
commit25edd57eaf3eecf0b449a4dabb5b5fc5d6ae7687 (patch)
treeb6cffb65d46a07f59d5393a257973910d4116227 /internal/stream/stream.go
parentsession name fix (#185) (diff)
parentreview changes (diff)
downloadgotosocial-25edd57eaf3eecf0b449a4dabb5b5fc5d6ae7687.tar.xz
Merge pull request #186 from superseriousbusiness/struct_validation
Struct validation
Diffstat (limited to 'internal/stream/stream.go')
-rw-r--r--internal/stream/stream.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/stream/stream.go b/internal/stream/stream.go
new file mode 100644
index 000000000..9d1d27d72
--- /dev/null
+++ b/internal/stream/stream.go
@@ -0,0 +1,38 @@
+package stream
+
+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"`
+}