-
Notifications
You must be signed in to change notification settings - Fork 0
/
worker.go
99 lines (89 loc) · 2.36 KB
/
worker.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package mediasoup_go_worker
import (
"encoding/json"
"sync"
"github.com/byyam/mediasoup-go-worker/internal/utils"
"github.com/byyam/mediasoup-go-worker/mediasoupdata"
"github.com/byyam/mediasoup-go-worker/mserror"
"github.com/byyam/mediasoup-go-worker/rtc"
"github.com/byyam/mediasoup-go-worker/workerchannel"
)
type workerBase struct {
pid int
logger utils.Logger
routerMap sync.Map
}
func (w *workerBase) GetPid() int {
return w.pid
}
func (w *workerBase) OnChannelRequest(request workerchannel.RequestData) (response workerchannel.ResponseData) {
w.logger.Debug("method=%s,internal=%+v", request.Method, request.Internal)
switch request.Method {
case mediasoupdata.MethodWorkerCreateRouter:
router := rtc.NewRouter(request.Internal.RouterId)
w.routerMap.Store(request.Internal.RouterId, router)
case mediasoupdata.MethodWorkerClose:
w.Stop()
case mediasoupdata.MethodWorkerDump:
response.Data = w.FillJson()
case mediasoupdata.MethodWorkerGetResourceUsage:
response.Data = w.FillJsonResourceUsage()
case mediasoupdata.MethodWorkerUpdateSettings:
// todo
default:
r, ok := w.routerMap.Load(request.Internal.RouterId)
if !ok {
response.Err = mserror.ErrRouterNotFound
return
}
router := r.(*rtc.Router)
router.HandleRequest(request, &response)
}
w.logger.Debug("method:%s, response:%s", request.Method, response)
return
}
func (w *workerBase) Stop() {
w.routerMap.Range(func(key, value interface{}) bool {
router := value.(*rtc.Router)
router.Close()
return true
})
w.logger.Warn("pid:%d is killed", w.pid)
}
func (w *workerBase) FillJson() json.RawMessage {
var routerIds []string
w.routerMap.Range(func(key, value interface{}) bool {
routerIds = append(routerIds, key.(string))
return true
})
dumpData := mediasoupdata.WorkerDump{
Pid: w.pid,
RouterIds: routerIds,
}
data, _ := json.Marshal(&dumpData)
w.logger.Debug("dumpData:%+v", dumpData)
return data
}
func (w *workerBase) FillJsonResourceUsage() json.RawMessage {
// todo
ruData := mediasoupdata.WorkerResourceUsage{
RU_Utime: 0,
RU_Stime: 0,
RU_Maxrss: 0,
RU_Ixrss: 0,
RU_Idrss: 0,
RU_Isrss: 0,
RU_Minflt: 0,
RU_Majflt: 0,
RU_Nswap: 0,
RU_Inblock: 0,
RU_Oublock: 0,
RU_Msgsnd: 0,
RU_Msgrcv: 0,
RU_Nsignals: 0,
RU_Nvcsw: 0,
RU_Nivcsw: 0,
}
data, _ := json.Marshal(&ruData)
return data
}