mirror of
https://github.com/kevin-DL/m3o-go.git
synced 2026-01-11 18:44:26 +00:00
121 lines
3.0 KiB
Go
Executable File
121 lines
3.0 KiB
Go
Executable File
package stream
|
|
|
|
import (
|
|
"go.m3o.com/client"
|
|
)
|
|
|
|
type Stream interface {
|
|
CreateChannel(*CreateChannelRequest) (*CreateChannelResponse, error)
|
|
ListChannels(*ListChannelsRequest) (*ListChannelsResponse, error)
|
|
ListMessages(*ListMessagesRequest) (*ListMessagesResponse, error)
|
|
SendMessage(*SendMessageRequest) (*SendMessageResponse, error)
|
|
}
|
|
|
|
func NewStreamService(token string) *StreamService {
|
|
return &StreamService{
|
|
client: client.NewClient(&client.Options{
|
|
Token: token,
|
|
}),
|
|
}
|
|
}
|
|
|
|
type StreamService struct {
|
|
client *client.Client
|
|
}
|
|
|
|
// Create a channel with a given name and description. Channels are created automatically but
|
|
// this allows you to specify a description that's persisted for the lifetime of the channel.
|
|
func (t *StreamService) CreateChannel(request *CreateChannelRequest) (*CreateChannelResponse, error) {
|
|
|
|
rsp := &CreateChannelResponse{}
|
|
return rsp, t.client.Call("stream", "CreateChannel", request, rsp)
|
|
|
|
}
|
|
|
|
// List all the active channels
|
|
func (t *StreamService) ListChannels(request *ListChannelsRequest) (*ListChannelsResponse, error) {
|
|
|
|
rsp := &ListChannelsResponse{}
|
|
return rsp, t.client.Call("stream", "ListChannels", request, rsp)
|
|
|
|
}
|
|
|
|
// List messages for a given channel
|
|
func (t *StreamService) ListMessages(request *ListMessagesRequest) (*ListMessagesResponse, error) {
|
|
|
|
rsp := &ListMessagesResponse{}
|
|
return rsp, t.client.Call("stream", "ListMessages", request, rsp)
|
|
|
|
}
|
|
|
|
// Send a message to the stream.
|
|
func (t *StreamService) SendMessage(request *SendMessageRequest) (*SendMessageResponse, error) {
|
|
|
|
rsp := &SendMessageResponse{}
|
|
return rsp, t.client.Call("stream", "SendMessage", request, rsp)
|
|
|
|
}
|
|
|
|
type Channel struct {
|
|
// description for the channel
|
|
Description string `json:"description"`
|
|
// last activity time
|
|
LastActive string `json:"last_active"`
|
|
// name of the channel
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
type CreateChannelRequest struct {
|
|
// description for the channel
|
|
Description string `json:"description"`
|
|
// name of the channel
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
type CreateChannelResponse struct {
|
|
}
|
|
|
|
type ListChannelsRequest struct {
|
|
}
|
|
|
|
type ListChannelsResponse struct {
|
|
Channels []Channel `json:"channels"`
|
|
}
|
|
|
|
type ListMessagesRequest struct {
|
|
// The channel to subscribe to
|
|
Channel string `json:"channel"`
|
|
// number of message to return
|
|
Limit int32 `json:"limit"`
|
|
}
|
|
|
|
type ListMessagesResponse struct {
|
|
// The channel subscribed to
|
|
Channel string `json:"channel"`
|
|
// Messages are chronological order
|
|
Messages []Message `json:"messages"`
|
|
}
|
|
|
|
type Message struct {
|
|
// the channel name
|
|
Channel string `json:"channel"`
|
|
// id of the message
|
|
Id string `json:"id"`
|
|
// the associated metadata
|
|
Metadata map[string]string `json:"metadata"`
|
|
// text of the message
|
|
Text string `json:"text"`
|
|
// time of message creation
|
|
Timestamp string `json:"timestamp"`
|
|
}
|
|
|
|
type SendMessageRequest struct {
|
|
// The channel to send to
|
|
Channel string `json:"channel"`
|
|
// The message text to send
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
type SendMessageResponse struct {
|
|
}
|