summaryrefslogtreecommitdiff
path: root/internal/stream/stream.go
diff options
context:
space:
mode:
authorLibravatar tsmethurst <tobi.smethurst@klarrio.com>2021-09-01 18:29:25 +0200
committerLibravatar tsmethurst <tobi.smethurst@klarrio.com>2021-09-01 18:29:25 +0200
commit4696e1a7b389599fa981f334b343daa911b11f5d (patch)
treed1ca0c896cdacb82ad7c64ee150aa32b37d4c053 /internal/stream/stream.go
parentmove oauth models into gtsmodel (diff)
downloadgotosocial-4696e1a7b389599fa981f334b343daa911b11f5d.tar.xz
moving stuff around
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"`
+}