41 lines
885 B
Go
41 lines
885 B
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package ws
|
|
|
|
import (
|
|
"github.com/gorilla/websocket"
|
|
"github.com/mainflux/mainflux/pkg/messaging"
|
|
)
|
|
|
|
// Client handles messaging and websocket connection.
|
|
type Client struct {
|
|
conn *websocket.Conn
|
|
id string
|
|
}
|
|
|
|
// NewClient returns a new websocket client.
|
|
func NewClient(c *websocket.Conn) *Client {
|
|
return &Client{
|
|
conn: c,
|
|
id: "",
|
|
}
|
|
}
|
|
|
|
// Cancel handles the websocket connection after unsubscribing.
|
|
func (c *Client) Cancel() error {
|
|
if c.conn == nil {
|
|
return nil
|
|
}
|
|
return c.conn.Close()
|
|
}
|
|
|
|
// Handle handles the sending and receiving of messages via the broker.
|
|
func (c *Client) Handle(msg *messaging.Message) error {
|
|
// To prevent publisher from receiving its own published message
|
|
if msg.GetPublisher() == c.id {
|
|
return nil
|
|
}
|
|
return c.conn.WriteMessage(websocket.TextMessage, msg.Payload)
|
|
}
|