noir

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jan 26, 2021 License: AGPL-3.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ManagerPingFrequency = 10 * time.Second
	QueueMessageTimeout  = 25 * time.Second
)
View Source
const (
	RouterTopic   = "noir/"
	WebrtcTimeout = 25 * time.Second
	RouterMaxAge  = WebrtcTimeout
)

Variables

View Source
var (
	SESSION_TIMEOUT = 10 * time.Second
)

Functions

func EnqueueReply

func EnqueueReply(queue Queue, value *pb.NoirReply) error

func EnqueueRequest

func EnqueueRequest(queue Queue, value *pb.NoirRequest) error

func FillDefaults

func FillDefaults(value *pb.NoirRequest)

func GetRoomCleanupTime added in v0.2.1

func GetRoomCleanupTime(data *pb.RoomData) time.Time

func GetRoomEndTime added in v0.2.1

func GetRoomEndTime(data *pb.RoomData) time.Time

func GetUserCleanupTime added in v0.2.1

func GetUserCleanupTime(data *pb.UserData) time.Time

func GetUserEndTime added in v0.2.1

func GetUserEndTime(data *pb.UserData) time.Time

func MarshalReply

func MarshalReply(value *pb.NoirReply) ([]byte, error)

func MarshalRequest

func MarshalRequest(value *pb.NoirRequest) ([]byte, error)

func ParseSDP added in v0.2.1

func ParseSDP(offer webrtc.SessionDescription) (*sdp.SessionDescription, error)

func RandomString

func RandomString(length int) string

func ReadAction

func ReadAction(request *pb.NoirRequest) (string, error)

func ReadAdminAction added in v0.2.7

func ReadAdminAction(admin *pb.AdminRequest) (string, error)

func ReadSignalAction

func ReadSignalAction(signal *pb.SignalRequest) (string, error)

func SaveRoomData added in v0.2.1

func SaveRoomData(roomID string, data *pb.RoomData, m *Manager) error

func StringWithCharset

func StringWithCharset(length int, charset string) string

func TrackSummary added in v0.2.5

func TrackSummary(desc *sdp.SessionDescription) (int, int, int, string)

func UnmarshalRequest

func UnmarshalRequest(message []byte, destination *pb.NoirRequest) error

func ValidateHealthy added in v0.2.1

func ValidateHealthy(node *pb.NodeData) bool

Types

type Config

type Config struct {
	Ion sfu.Config
	Log log.Config `mapstructure:"log"`
}

type Job added in v0.2.7

type Job struct {
	// contains filtered or unexported fields
}

func NewBaseJob added in v0.2.7

func NewBaseJob(manager *Manager, handler string, jobID string) *Job

func (*Job) GetCommandQueue added in v0.2.7

func (j *Job) GetCommandQueue() Queue

func (*Job) GetData added in v0.2.7

func (j *Job) GetData() *pb.JobData

func (*Job) GetManager added in v0.2.7

func (j *Job) GetManager() *Manager

func (*Job) Kill added in v0.2.7

func (j *Job) Kill(code int)

func (*Job) KillWithError added in v0.2.7

func (j *Job) KillWithError(err error)

type JobHandler added in v0.2.7

type JobHandler func(request *pb.NoirRequest) RunnableJob

type Join added in v0.2.1

type Join struct {
	Sid   string                    `json:"sid"`
	Offer webrtc.SessionDescription `json:"offer"`
}

Join message sent when initializing a peer connection

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

func NewRedisManager

func NewRedisManager(provider *NoirSFU, client *redis.Client, nodeID string) Manager

func NewTestSetup

func NewTestSetup() (Manager, *redis.Client)

func SetupNoir added in v0.2.1

func SetupNoir(sfu *NoirSFU, client *redis.Client, nodeID string) Manager

func (*Manager) BindRoomSession added in v0.2.1

func (m *Manager) BindRoomSession(room Room, session *sfu.Session) *Room

func (*Manager) Checkin

func (m *Manager) Checkin() error

func (*Manager) ClaimRoomNode

func (m *Manager) ClaimRoomNode(roomID string, nodeID string) (bool, error)

func (*Manager) Cleanup

func (m *Manager) Cleanup()

func (*Manager) CloseRoom

func (m *Manager) CloseRoom(roomID string)

func (*Manager) ConnectUser added in v0.2.1

func (m *Manager) ConnectUser(signal *pb.SignalRequest) (*sfu.Peer, *pb.UserData, error)

func (*Manager) CountMatchingKeys added in v0.2.7

func (m *Manager) CountMatchingKeys(pattern string) (int64, error)

func (*Manager) CreateRoomIfNotExists added in v0.2.1

func (m *Manager) CreateRoomIfNotExists(roomID string) (*pb.RoomData, error)

func (*Manager) DisconnectUser added in v0.2.1

func (m *Manager) DisconnectUser(userID string)

func (*Manager) FirstAvailableWorkerID

func (m *Manager) FirstAvailableWorkerID(action string) (string, error)

func (*Manager) GetLocalRoom

func (m *Manager) GetLocalRoom(roomID string) (*Room, error)

func (*Manager) GetQueue

func (m *Manager) GetQueue(topic string) Queue

func (*Manager) GetRemoteNodeData added in v0.2.1

func (m *Manager) GetRemoteNodeData(nodeID string) (*pb.NodeData, error)

func (*Manager) GetRemoteRoomData added in v0.2.1

func (m *Manager) GetRemoteRoomData(roomID string) (*pb.RoomData, error)

func (*Manager) GetRemoteRoomExists

func (m *Manager) GetRemoteRoomExists(roomID string) (bool, error)

func (*Manager) GetRemoteUserData added in v0.2.1

func (m *Manager) GetRemoteUserData(userID string) (*pb.UserData, error)

func (*Manager) GetRemoteWorkerQueue

func (m *Manager) GetRemoteWorkerQueue(id string) *Queue

func (*Manager) GetRouter

func (m *Manager) GetRouter() *Router

func (*Manager) GetWorker

func (m *Manager) GetWorker() *Worker

func (*Manager) ID

func (m *Manager) ID() string

func (*Manager) LoadData added in v0.2.1

func (m *Manager) LoadData(key string) (*pb.NoirObject, error)

func (*Manager) LookupSignalRoomID

func (m *Manager) LookupSignalRoomID(signal *pb.SignalRequest) (string, error)

func (*Manager) MarkOffline

func (m *Manager) MarkOffline(nodeID string)

func (*Manager) NodeCount added in v0.2.1

func (m *Manager) NodeCount() int

func (*Manager) Noir

func (m *Manager) Noir()

The Noir thread launches the worker and router, and then handles ticker tasks (update cluster health, print status) and watches for the quit servers to cleanup

func (*Manager) RandomWorkerId

func (m *Manager) RandomWorkerId() (string, error)

func (*Manager) RoomCount

func (m *Manager) RoomCount() int

func (*Manager) SFU

func (m *Manager) SFU() *NoirSFU

func (*Manager) SaveData added in v0.2.1

func (m *Manager) SaveData(key string, status *pb.NoirObject, expiry time.Duration) error

Only on RedisManager

func (*Manager) SetRouter

func (m *Manager) SetRouter(r *Router)

func (*Manager) SetWorker

func (m *Manager) SetWorker(w *Worker)

func (*Manager) UpdateAvailableNodes added in v0.2.1

func (m *Manager) UpdateAvailableNodes() error

func (*Manager) UpdateRoomScore added in v0.2.7

func (m *Manager) UpdateRoomScore(roomID string)

func (*Manager) ValidateHealthyNodeID added in v0.2.1

func (m *Manager) ValidateHealthyNodeID(nodeID string) error

func (*Manager) ValidateOffer added in v0.2.1

func (m *Manager) ValidateOffer(room *pb.RoomData, userID string, offer webrtc.SessionDescription) (*sdp.SessionDescription, error)

func (*Manager) WorkerData added in v0.2.1

func (m *Manager) WorkerData(id string) *pb.NodeData

func (*Manager) WorkerForRoom

func (m *Manager) WorkerForRoom(roomID string) (string, error)

type Negotiation added in v0.2.1

type Negotiation struct {
	Desc webrtc.SessionDescription `json:"desc"`
}

Negotiation message sent when renegotiating the peer connection

type NoirSFU

type NoirSFU interface {
	sfu.SessionProvider
	AttachManager(*Manager)
}

func NewNoirSFU

func NewNoirSFU(c Config) NoirSFU

NewNoirSFU will create an object that represent the NoirSFU interface

type PeerJob added in v0.2.7

type PeerJob struct {
	Job
	// contains filtered or unexported fields
}

func NewPeerJob added in v0.2.7

func NewPeerJob(manager *Manager, handler string, roomID string, userID string) *PeerJob

func (*PeerJob) GetFromPeerQueue added in v0.2.7

func (j *PeerJob) GetFromPeerQueue() Queue

func (*PeerJob) GetPeerConnection added in v0.2.7

func (j *PeerJob) GetPeerConnection() (*webrtc.PeerConnection, error)

func (*PeerJob) GetPeerData added in v0.2.7

func (j *PeerJob) GetPeerData() *pb.PeerJobData

func (*PeerJob) GetPeerQueue added in v0.2.7

func (j *PeerJob) GetPeerQueue() Queue

func (*PeerJob) Kill added in v0.3.0

func (j *PeerJob) Kill(code int)

func (*PeerJob) KillWithError added in v0.3.0

func (j *PeerJob) KillWithError(err error)

func (*PeerJob) SendJoin added in v0.3.0

func (j *PeerJob) SendJoin() error

type Queue

type Queue interface {
	Add(value []byte) error
	Next() ([]byte, error)
	BlockUntilNext(timeout time.Duration) ([]byte, error)
	Count() (int64, error)
	Cleanup() error
	Topic() string
}

func NewListQueue

func NewListQueue(topic string) Queue

func NewRedisQueue

func NewRedisQueue(client *redis.Client, topic string, maxAge time.Duration) Queue

func NewRedisWorkerQueue

func NewRedisWorkerQueue(client *redis.Client, id string) Queue

func NewTestQueue

func NewTestQueue(topic string) Queue

TEST UTILS

type Room

type Room struct {
	// contains filtered or unexported fields
}

func NewChannel added in v0.2.1

func NewChannel(roomID string, publishPassword string) Room

A Channel is a Room with isChannel=true, only allows 1 publisher

func NewRoom

func NewRoom(roomID string) Room

func (*Room) Bind added in v0.2.1

func (r *Room) Bind(session *sfu.Session, manager *Manager)

func (*Room) LatestData added in v0.2.1

func (r *Room) LatestData() *pb.RoomData

func (*Room) Save added in v0.2.1

func (r *Room) Save() error

func (*Room) Session

func (r *Room) Session() *sfu.Session

func (*Room) SetOptions added in v0.2.1

func (r *Room) SetOptions(options *pb.RoomOptions)

func (*Room) UpdateData added in v0.2.1

func (r *Room) UpdateData(remote *pb.RoomData)

type Router

type Router interface {
	HandleForever()
	GetQueue() *Queue
	HandleNext() error
	Handle(*pb.NoirRequest) error
	NextCommand() (*pb.NoirRequest, error)
}

func NewRedisRouter

func NewRedisRouter(client *redis.Client, mgr *Manager) Router

func NewRouter

func NewRouter(queue Queue, mgr *Manager) Router

type RunnableJob added in v0.2.7

type RunnableJob interface {
	Handle()
}

type User added in v0.2.1

type User struct {
	sfu.Peer
	// contains filtered or unexported fields
}

User represent the User model

func NewUser added in v0.2.1

func NewUser(provider *sfu.SFU, userID string) User

NewUser will create an object that represent the Signal interface

func (*User) Cleanup added in v0.2.1

func (s *User) Cleanup()

func (*User) ID added in v0.2.1

func (s *User) ID() string

func (*User) Join added in v0.2.1

func (s *User) Join(roomID string, sdp webrtc.SessionDescription) (*webrtc.SessionDescription, error)

func (*User) PeerID added in v0.2.1

func (s *User) PeerID() string

func (*User) RoomID added in v0.2.1

func (s *User) RoomID() string

type Worker

type Worker interface {
	HandleForever()
	HandleNext(timeout time.Duration) error
	RegisterHandler(name string, handler JobHandler)
	GetQueue() *Queue
	ID() string
}

func NewRedisWorker

func NewRedisWorker(id string, manager *Manager, client *redis.Client) Worker

func NewWorker

func NewWorker(id string, manager *Manager, queue Queue) Worker

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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