44 lines
988 B
Go
44 lines
988 B
Go
package processor
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/fox/fox/ipb"
|
|
"github.com/fox/fox/log"
|
|
)
|
|
|
|
type RpcHandler func(*ipb.InternalMsg) *ipb.InternalMsg
|
|
|
|
func NewRpcProcessor() *RpcProcessor {
|
|
return &RpcProcessor{
|
|
delegates: make(map[string]RpcHandler),
|
|
}
|
|
}
|
|
|
|
type RpcProcessor struct {
|
|
delegates map[string]RpcHandler
|
|
}
|
|
|
|
func (h *RpcProcessor) RegisterMessages(metas map[string]RpcHandler) {
|
|
for cmd, handler := range metas {
|
|
h.RegisterMessage(cmd, handler)
|
|
}
|
|
}
|
|
|
|
func (h *RpcProcessor) RegisterMessage(cmd string, delegate RpcHandler) {
|
|
h.delegates[cmd] = delegate
|
|
log.DebugF("processor register message %v", cmd)
|
|
}
|
|
|
|
func (h *RpcProcessor) UnregisterMessage(cmd string) {
|
|
delete(h.delegates, cmd)
|
|
log.DebugF("processor unregister message %v", cmd)
|
|
}
|
|
|
|
func (h *RpcProcessor) Dispatch(cmd string, msg *ipb.InternalMsg) (*ipb.InternalMsg, error) {
|
|
delegate, ok := h.delegates[cmd]
|
|
if !ok {
|
|
return nil, fmt.Errorf("cmd %v delegates not found", cmd)
|
|
}
|
|
return delegate(msg), nil
|
|
}
|