fox/processor/rpcProcessor.go

44 lines
988 B
Go
Raw Permalink Normal View History

2025-06-02 01:08:12 +08:00
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
}