isglb

package module
v0.0.0-...-e7c6d99 Latest Latest
Warning

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

Go to latest
Published: Dec 7, 2022 License: MIT Imports: 13 Imported by: 0

README

isglb

islb? is-graph-lb!

What is this?

A library for dion:

  • status sync (e.g. track route status)
  • report upload (e.g. webrtc stats)
  • route control

How to use

  1. Implement Algorithm with your route algorithm
  2. Implement Status, Report, Request with some protocol (e.g. gRPC)
  3. For server, implement ServerConn with some protocol (e.g. gRPC)
  4. For client, implement ClientStreamFactory with some protocol (e.g. gRPC)

How to implement a server

  1. Start a server in your protocol (e.g. gRPC)
  2. Create a ISGLBService by NewISGLBService
  3. When established a new connection, call SyncSFU

How to implement a client

  1. Create a Client by NewClient
  2. Write a OnStatusRecv with your protocol (e.g. gRPC)
  3. Call SendReport and SendStatus as you like

log

Client.Logger & Service.Logger

Documentation

Index

Constants

This section is empty.

Variables

View Source
var WarnDalay = 4 * time.Second

Functions

func GetLogger

func GetLogger() *logrus.Logger

func SetLogger

func SetLogger(logger *logrus.Logger)

Types

type ChanClientStream

type ChanClientStream[S proto.Status] struct {
	// contains filtered or unexported fields
}

ChanClientStream a ClientStream based on chan for test

func (ChanClientStream[S]) Recv

func (c ChanClientStream[S]) Recv() (S, error)

func (ChanClientStream[S]) Send

func (c ChanClientStream[S]) Send(request proto.Request) error

type ChanClientStreamFactory

type ChanClientStreamFactory[S proto.Status] struct {
	// contains filtered or unexported fields
}

func NewChanClientStreamFactory

func NewChanClientStreamFactory[S proto.Status](service *Service[S]) ChanClientStreamFactory[S]

func (ChanClientStreamFactory[S]) NewClientStream

func (c ChanClientStreamFactory[S]) NewClientStream(ctx context.Context) (stream.ClientStream[proto.Request, S], error)

type ChanServerConn

type ChanServerConn[S proto.Status] struct {
	// contains filtered or unexported fields
}

ChanServerConn a ServerConn based on chan for test

func (ChanServerConn[S]) ID

func (c ChanServerConn[S]) ID() string

func (ChanServerConn[S]) Recv

func (c ChanServerConn[S]) Recv() (proto.Request, error)

func (ChanServerConn[S]) Send

func (c ChanServerConn[S]) Send(status S) error

type Client

type Client[S proto.Status, R proto.Report] struct {
	*stream.Client[proto.Request, S]

	OnStatusRecv func(s S)
	// contains filtered or unexported fields
}

Client for send/recv Status/Report

func NewClient

func NewClient[S proto.Status, R proto.Report](factory ClientStreamFactory[S]) *Client[S, R]

func (*Client[S, R]) SendReport

func (c *Client[S, R]) SendReport(report R)

SendReport send the report, maybe lose when cannot connect

func (*Client[S, R]) SendStatus

func (c *Client[S, R]) SendStatus(status S)

SendStatus send the Status, if there is a new status should be sent, the last send will be canceled

type ClientStreamFactory

type ClientStreamFactory[S proto.Status] interface {
	NewClientStream(ctx context.Context) (stream.ClientStream[proto.Request, S], error)
}

ClientStreamFactory for stream.Client. Generate stream.ClientStream for reconnect

type ComputationReporter

type ComputationReporter interface {
	// Bind ComputationReporter to a channel
	// you should push your ComputationReport into this channel
	Bind(chan<- *pb.ComputationReport)
}

ComputationReporter describe an abstract SFU that can report the Transmission quality

type SFUStatusSyncer

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

SFUStatusSyncer is a Client to sync SFUStatus

func NewSFUStatusSyncer

func NewSFUStatusSyncer(factory ClientStreamFactory[*pb.SFUStatus], myself *pb.Node, toolbox ToolBox) *SFUStatusSyncer

func (*SFUStatusSyncer) NotifySFUStatus

func (s *SFUStatusSyncer) NotifySFUStatus()

func (*SFUStatusSyncer) Start

func (s *SFUStatusSyncer) Start()

func (*SFUStatusSyncer) Stop

func (s *SFUStatusSyncer) Stop()

type ServerConn

type ServerConn[S proto.Status] interface {
	setmap.IfaceSetMapItem[string]
	Send(S) error
	Recv() (proto.Request, error)
}

func NewChanCSPair

func NewChanCSPair[S proto.Status](id string) (ServerConn[S], stream.ClientStream[proto.Request, S])

type Service

type Service[S proto.Status] struct {
	Alg proto.Algorithm // The core algorithm
	// contains filtered or unexported fields
}

Service represents isglb node

func NewService

func NewService[S proto.Status](alg proto.Algorithm) *Service[S]

func (*Service[S]) Sync

func (isglb *Service[S]) Sync(sig ServerConn[S]) error

Sync receive current Status, call the algorithm, and reply expected SFUStatus

type SessionEvent

type SessionEvent struct {
	Session *pb.ClientNeededSession
	State   SessionEvent_State
}

SessionEvent describe a event, user's join or leave

func (*SessionEvent) Clone

func (event *SessionEvent) Clone() *SessionEvent

type SessionEvent_State

type SessionEvent_State int32
const (
	SessionEvent_ADD    SessionEvent_State = 0
	SessionEvent_REMOVE SessionEvent_State = 1
)

type SessionTracker

type SessionTracker interface {
	// FetchSessionEvent fetch a SessionEvent
	// Block until return a new SessionEvent
	FetchSessionEvent() *SessionEvent
}

SessionTracker describe an abstract SFU that can report the user's join and leave

type StupidComputationReporter

type StupidComputationReporter struct {
	sync.Once
}

func (*StupidComputationReporter) Bind

type StupidSessionTracker

type StupidSessionTracker struct {
}

func (StupidSessionTracker) FetchSessionEvent

func (d StupidSessionTracker) FetchSessionEvent() *SessionEvent

type StupidTrackForwarder

type StupidTrackForwarder struct {
}

func (StupidTrackForwarder) ReplaceForwardTrack

func (t StupidTrackForwarder) ReplaceForwardTrack(oldTrackInfo *pb.ForwardTrack, newTrackInfo *pb.ForwardTrack)

func (StupidTrackForwarder) StartForwardTrack

func (t StupidTrackForwarder) StartForwardTrack(trackInfo *pb.ForwardTrack)

func (StupidTrackForwarder) StopForwardTrack

func (t StupidTrackForwarder) StopForwardTrack(trackInfo *pb.ForwardTrack)

type StupidTrackProcesser

type StupidTrackProcesser struct {
}

func (StupidTrackProcesser) ReplaceProceedTrack

func (t StupidTrackProcesser) ReplaceProceedTrack(oldTrackInfo *pb.ProceedTrack, newTrackInfo *pb.ProceedTrack)

func (StupidTrackProcesser) StartProceedTrack

func (t StupidTrackProcesser) StartProceedTrack(trackInfo *pb.ProceedTrack)

func (StupidTrackProcesser) StopProceedTrack

func (t StupidTrackProcesser) StopProceedTrack(trackInfo *pb.ProceedTrack)

type StupidTransmissionReporter

type StupidTransmissionReporter struct {
	sync.Once
}

func (*StupidTransmissionReporter) Bind

type ToolBox

type ToolBox struct {
	TrackForwarder       TrackForwarder
	TrackProcessor       TrackProcessor
	TransmissionReporter TransmissionReporter
	ComputationReporter  ComputationReporter
	SessionTracker       SessionTracker
}

type TrackForwarder

type TrackForwarder interface {

	// StartForwardTrack begin a track route
	StartForwardTrack(trackInfo *pb.ForwardTrack)
	// StopForwardTrack end a track route
	StopForwardTrack(trackInfo *pb.ForwardTrack)
	// ReplaceForwardTrack change a track route
	ReplaceForwardTrack(oldTrackInfo *pb.ForwardTrack, newTrackInfo *pb.ForwardTrack)
}

TrackForwarder describe an abstract SFU that can forward video tracks

type TrackProcessor

type TrackProcessor interface {

	// StartProceedTrack begin a track proceed
	StartProceedTrack(trackInfo *pb.ProceedTrack)
	// StopProceedTrack end a track proceed
	StopProceedTrack(trackInfo *pb.ProceedTrack)
	// ReplaceProceedTrack change a track proceed
	ReplaceProceedTrack(oldTrackInfo *pb.ProceedTrack, newTrackInfo *pb.ProceedTrack)
}

TrackProcessor describe an abstract SFU that can proceed video tracks

type TransmissionReporter

type TransmissionReporter interface {
	// Bind TransmissionReporter to a channel
	// you should push your TransmissionReport into this channel
	Bind(chan<- *pb.TransmissionReport)
}

TransmissionReporter describe an abstract SFU that can report the Transmission quality

Directories

Path Synopsis
algorithms

Jump to

Keyboard shortcuts

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