gowsh

package module
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2019 License: MIT Imports: 8 Imported by: 0

README

go-wsh

❇️ go-wsh | WebSocket Handler for APIs

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ClientGroupsLength é o tamanho dos grupos que estão no Hub
	ClientGroupsLength = 5
	Upgrader           = websocket.Upgrader{
		ReadBufferSize:  1024,
		WriteBufferSize: 1024,
		CheckOrigin:     func(r *http.Request) bool { return true },
	}
)

Functions

func EventDispatcher

func EventDispatcher(handlers *EventHandlers, message *EventMessage)

EventDispatcher é o responsável por tratar as mensagens recebidas pelo websocket e direcionalas ao handler correto

Essa função poderia estar um um arquivo próprio dentro deste pacote, pois a mesma vai acabar ficando muito grande

func GenerateULID

func GenerateULID() string

GenerateULID gera um id único

Types

type ClientGroup

type ClientGroup struct {
	// O ID do grupo serve para identifica-lo em meio a outros grupos
	ID string
	// Lista com todas as sessões de clientes conectados nesse grupo
	ClientSessions []*ClientSession
}

ClientGroup é responsável por manter as informações dos usuários do mesmo grupo para que possam fazer broadcast das mensagens

func NewClientGroup

func NewClientGroup(groupID string) *ClientGroup

NewClientGroup retorna um novo grupo sem sessões

func (*ClientGroup) AddClientSession

func (cg *ClientGroup) AddClientSession(clientSession *ClientSession)

AddClientSession coloca uma sessão nova dentro do grupo

type ClientSession

type ClientSession struct {
	// ID serve para diferencia-lo dos outros dãã...
	ID string
	// Esse é o grupo que esse client está inserido
	Group string
	// WebsocketConnection carrega a conexão WS do cliente para que ele possa continuar se comunicando
	WebsocketConnection *websocket.Conn
	// SendResponse envia para o usuário as respostas das chamadas
	SendResponse chan []byte
	// FinishClientSession finaliza o hub de operação dele
	FinishClientSession chan bool
	// Este cara vai receber a solicitação e vai trata-la
	EventsHub *EventHub
}

ClientSession é responsável por manter as informações do usuário que fez a solicitação

func NewClientSession

func NewClientSession() *ClientSession

NewClientSession cria uum novo usuário

func (*ClientSession) ReadFromSocket

func (cs *ClientSession) ReadFromSocket()

ReadFromSocket Pega as mensagens que vem do websocket

func (*ClientSession) SendBroadcast

func (cs *ClientSession) SendBroadcast(message *EventMessage)

SendBroadcast envia uma mensagem no padrão EventMessage para todos os Clients do mesmo grupo

func (*ClientSession) SendMessage

func (cs *ClientSession) SendMessage(message *EventMessage)

SendMessage envia uma mensagem no padrão EventMessage para o Client

func (*ClientSession) WriteToSocket

func (cs *ClientSession) WriteToSocket()

WriteToSocket Envia a mensagem para o cliente

type EventHandlers

type EventHandlers struct {
	HandlerList map[string]func(*EventMessage)
}

EventHandlers carrega a lista com todas as possiveis chamadas e seus handlers

type EventHub

type EventHub struct {
	// Este é o canal que vai distribuir as mensagens
	Messaging chan *EventMessage
	// Este canal finaliza o hub
	Finish chan bool
	// Essa é a lista com todos os Handlers
	Handlers *EventHandlers
	// Armazena todos os grupos de mensagem
	ClientGroups map[string]*ClientGroup
}

EventHub é o centralizador das mensagens, ele é responsável por pegar as mensagens e as enviar para as rotas

func NewEventHub

func NewEventHub() *EventHub

NewEventHub cria o novo EventHub com o channel já iniciado

func (*EventHub) AddGroup

func (eh *EventHub) AddGroup(clientGroup *ClientGroup)

AddGroup update group list with one new group

func (*EventHub) AddHandler

func (eh *EventHub) AddHandler(event string, f func(*EventMessage))

AddHandler adiciona um novo handler para as chamadas

func (*EventHub) Run

func (eh *EventHub) Run()

Run aqui é o hub onde as mensagens vão ser lidas do messaging e posteriormente serem enviadas

type EventMessage

type EventMessage struct {
	// Event é o tipo de evento que está relacionado a essa chamada
	Event string `json:"event"`

	// Data é a informação que a mensagem está transportando
	Data interface{} `json:"data"`

	// Client é o usuário que fez a solicitação
	Client *ClientSession `json:"-"`
}

EventMessage é o modelo de mensagens que serão compartilhados no webscoket

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL