-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbrocker.go
More file actions
54 lines (47 loc) · 782 Bytes
/
Copy pathbrocker.go
File metadata and controls
54 lines (47 loc) · 782 Bytes
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
package common
type Component interface {
Resolve(opCh Operation)
Launch()
Stop()
}
type BaseComponent struct {
stopCh chan struct{}
opCh chan Operation
}
func NewBaseComponent() *BaseComponent {
return &BaseComponent{
stopCh: make(chan struct{}),
opCh: make(chan Operation),
}
}
func (b *BaseComponent) Resolve(op Operation) {
b.opCh <- op
}
func (b *BaseComponent) Launch() {
go func() {
for {
select {
case <-b.stopCh:
break
case op := <-b.opCh:
b.dealOp(op)
}
}
}()
}
func (b *BaseComponent) Stop() {
b.stopCh <- struct{}{}
}
func (b *BaseComponent) dealOp(operation Operation) {
fn := func() {
operation.CB()
operation.Ret <- struct{}{}
}
if !operation.IsAsynchronous {
fn()
} else {
go func() {
fn()
}()
}
}