method.go 853 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package service
  2. import (
  3. "reflect"
  4. "unicode"
  5. "unicode/utf8"
  6. "git.bvbej.com/bvbej/base-golang/pkg/websocket/peer"
  7. )
  8. var (
  9. typeOfError = reflect.TypeOf((*error)(nil)).Elem()
  10. typeOfBytes = reflect.TypeOf(([]byte)(nil))
  11. typeOfSession = reflect.TypeOf(peer.NewSession(nil))
  12. )
  13. func isExported(name string) bool {
  14. w, _ := utf8.DecodeRuneInString(name)
  15. return unicode.IsUpper(w)
  16. }
  17. // 方法检测
  18. func isHandlerMethod(method reflect.Method) bool {
  19. mt := method.Type
  20. if method.PkgPath != "" {
  21. return false
  22. }
  23. if mt.NumIn() != 3 {
  24. return false
  25. }
  26. if mt.NumOut() != 2 {
  27. return false
  28. }
  29. if t1 := mt.In(1); t1.Kind() != reflect.Ptr || t1 != typeOfSession {
  30. return false
  31. }
  32. if (mt.In(2).Kind() != reflect.Ptr && mt.In(2) != typeOfBytes) || mt.Out(1) != typeOfError || mt.Out(0).Kind() != reflect.Ptr {
  33. return false
  34. }
  35. return true
  36. }