Streaming (#49)
Add new status and notification websocket streaming capabilities
This commit is contained in:
		
							
								
								
									
										38
									
								
								internal/gtsmodel/stream.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								internal/gtsmodel/stream.go
									
									
									
									
									
										Normal file
									
								
							| @ -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"` | ||||
| } | ||||
		Reference in New Issue
	
	Block a user