-
Notifications
You must be signed in to change notification settings - Fork 1
/
processor.go
52 lines (43 loc) · 1.41 KB
/
processor.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
package rupicola
import (
"net/http"
"github.com/korbank/rupicola-go/rupicolarpc"
)
type rupicolaProcessor struct {
limits Limits
processor rupicolarpc.JsonRpcProcessor
config *Config
}
func newRupicolaProcessorFromConfig(conf *Config) *rupicolaProcessor {
rupicolaProcessor := &rupicolaProcessor{
config: conf,
limits: conf.Limits,
processor: rupicolarpc.NewJsonRpcProcessor()}
for k, v := range conf.Methods {
var metype rupicolarpc.MethodType
if v.Streamed {
metype = rupicolarpc.StreamingMethodLegacy
} else {
metype = rupicolarpc.RPCMethod
}
method := rupicolaProcessor.processor.AddMethod(k, metype, v)
if v.Limits.ExecTimeout >= 0 {
method.ExecutionTimeout(v.Limits.ExecTimeout)
}
if v.Limits.MaxResponse >= 0 {
method.MaxSize(uint(v.Limits.MaxResponse))
}
}
return rupicolaProcessor
}
// Create separate context for given bind point (required for concurrent listening)
func (proc *rupicolaProcessor) spawnChild(bind *Bind) *rupicolaProcessorChild {
child := &rupicolaProcessorChild{proc, bind, http.NewServeMux(), Logger.With().Str("bindpoint", bind.Address).Logger()}
child.mux.Handle(proc.config.Protocol.URI.RPC, child)
child.mux.Handle(proc.config.Protocol.URI.Streamed, child)
return child
}
// Start listening (this exits only on failure)
func (child *rupicolaProcessorChild) listen() error {
return child.bind.Bind(child.mux, child.parent.config.Limits)
}