service_manager.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package service
  2. import (
  3. "fmt"
  4. "git.bvbej.com/bvbej/base-golang/pkg/websocket/codec"
  5. _ "git.bvbej.com/bvbej/base-golang/pkg/websocket/codec/json"
  6. "git.bvbej.com/bvbej/base-golang/pkg/websocket/peer"
  7. "go.uber.org/zap"
  8. )
  9. var (
  10. serviceLogger *zap.Logger
  11. RegisteredServiceList = make(map[string]*Service) // all registered service
  12. RouterCodec codec.Codec
  13. )
  14. const ChildName = "Hbase"
  15. type Hbase interface{}
  16. func RegisterService(logger *zap.Logger, comp ...Component) {
  17. serviceLogger = logger
  18. for _, v := range comp {
  19. s := NewService(v)
  20. if _, ok := RegisteredServiceList[s.Name]; ok {
  21. serviceLogger.Sugar().Errorf("service: service already defined: %s", s.Name)
  22. }
  23. if err := s.ExtractHandler(); err != nil {
  24. serviceLogger.Sugar().Errorf("service: extract handler function failed: %v", err)
  25. }
  26. RegisteredServiceList[s.Name] = s
  27. for name, handler := range s.Handlers {
  28. router := fmt.Sprintf("%s.%s", s.Name, name)
  29. //注册消息 用于解码
  30. codec.RegisterMessage(router, handler.Type)
  31. serviceLogger.Sugar().Debugf("service: router %s param %s registed", router, handler.Type)
  32. }
  33. }
  34. }
  35. func SetCodec(name string) error {
  36. RouterCodec = codec.GetCodec(name)
  37. if RouterCodec == nil {
  38. return fmt.Errorf("service: codec %s not registered", name)
  39. }
  40. return nil
  41. }
  42. func Send(session *peer.Session, router string, data any) error {
  43. if RouterCodec == nil {
  44. return fmt.Errorf("service: codec not set")
  45. }
  46. rb, err := RouterCodec.Marshal(router, data, nil)
  47. if err != nil {
  48. return fmt.Errorf("service: %v", err)
  49. }
  50. return session.Conn.Send(rb)
  51. }