worker有nodejs、rust、go的封装层,这里以go为例分析封装层,go与nodejs的实现基本一致
type Room struct {
IEventEmitter
locker sync.Mutex
logger logr.Logger
closed bool
peers map[string]*Peer
}
type Peer struct {
IEventEmitter
logger logr.Logger
id string
transport Transport
sents sync.Map
data interface{}
closed uint32
closeCh chan struct{}
}
type Transport interface {
eventemitter.IEventEmitter
fmt.Stringer
Send(data []byte) error
Close()
Closed() bool
Run() error
}
type WebsocketTransport struct {
eventemitter.IEventEmitter
logger logr.Logger
mu sync.Mutex
conn *websocket.Conn
closed uint32
}
type Worker struct {
IEventEmitter
// Worker logger.
logger logr.Logger
// Worker process PID.
pid int
// Channel instance.
channel *Channel
// PayloadChannel instance.
payloadChannel *PayloadChannel
// Closed flag.
closed uint32
// Custom app data.
appData interface{}
// WebRtcServers map
webRtcServers sync.Map
// Routers map.
routers sync.Map
// child is the worker process
child *exec.Cmd
// diedErr indices worker process stopped unexpectly
diedErr error
// waitCh notify worker process stopped expectly or not
waitCh chan error
// Observer instance.
observer IEventEmitter
cgoWorker *CgoWorker
}
type Router struct {
IEventEmitter
logger logr.Logger
internal internalData
data routerData
channel *Channel
payloadChannel *PayloadChannel
closed uint32
appData interface{}
transports sync.Map
producers sync.Map
rtpObservers sync.Map
dataProducers sync.Map
mapRouterPipeTransports sync.Map
observer IEventEmitter
}
type PeerData struct { locker sync.Mutex // // Not joined after a custom protoo “join” request is later received. Joined bool DisplayName string Device DeviceInfo RtpCapabilities *mediasoup.RtpCapabilities SctpCapabilities *mediasoup.SctpCapabilities
// // Have mediasoup related maps ready even before the Peer joins since we
// // allow creating Transports before joining.
transports map[string]mediasoup.ITransport
producers map[string]*mediasoup.Producer
consumers map[string]*mediasoup.Consumer
dataProducers map[string]*mediasoup.DataProducer
dataConsumers map[string]*mediasoup.DataConsumer } type PeerInfo struct {
Id string `json:"id,omitempty"`
DisplayName string `json:"displayName,omitempty"`
Device DeviceInfo `json:"device,omitempty"`
RtpCapabilities *mediasoup.RtpCapabilities `json:"rtpCapabilities,omitempty"`
Data *PeerData `json:"-,omitempty"` } ```