package service import ( "reflect" "unicode" "unicode/utf8" "git.bvbej.com/bvbej/base-golang/pkg/websocket/peer" ) var ( typeOfError = reflect.TypeOf((*error)(nil)).Elem() typeOfBytes = reflect.TypeOf(([]byte)(nil)) typeOfSession = reflect.TypeOf(peer.NewSession(nil)) ) func isExported(name string) bool { w, _ := utf8.DecodeRuneInString(name) return unicode.IsUpper(w) } // 方法检测 func isHandlerMethod(method reflect.Method) bool { mt := method.Type if method.PkgPath != "" { return false } if mt.NumIn() != 3 { return false } if mt.NumOut() != 2 { return false } if t1 := mt.In(1); t1.Kind() != reflect.Ptr || t1 != typeOfSession { return false } if (mt.In(2).Kind() != reflect.Ptr && mt.In(2) != typeOfBytes) || mt.Out(1) != typeOfError || mt.Out(0).Kind() != reflect.Ptr { return false } return true }