提交 e5ea72c7 编写于 作者: yanghye's avatar yanghye

upgrade-dev v2.3.19

上级 3118b91d
......@@ -157,8 +157,8 @@ func main() {
// i++
// time.Sleep(time.Second / 1000)
// //ipc.Emit("onTestName1", r0, i, r2, r3, r4, r5, r6, r7, r8, r9, r10)
// ipc.EmitAndCallback("onTestName2", []any{r0, i, r2, r3, r4, r5, r6, r7, r8, r9, r10}, func(r1 string) {
// fmt.Println("onTestName2 r1: ", r1)
// ipc.EmitAndCallback("onTestName2", []interface{}{r0, testGoEmit, r2, r3, r4, r5, r6, r7, r8, r9, r10}, func(r1 string, r2 int, r3 float64, r4 bool) {
// fmt.Println("onTestName1 callback", r1, r2, r3, r4)
// })
// }
//}()
......
......@@ -82,102 +82,113 @@ func (m *argumentCallback) Invoke(context IContext) {
argsList = context.ArgumentList()
if argsList != nil {
argsSize = argsList.Size()
rt := m.callback.Type()
inArgsCount := rt.NumIn()
inArgsValues = make([]reflect.Value, inArgsCount)
for i := 0; i < inArgsCount; i++ {
inType := rt.In(i)
if i < argsSize {
argsValue := argsList.GetByIndex(i)
if argsValue == nil {
}
rt := m.callback.Type()
inArgsCount := rt.NumIn()
inArgsValues = make([]reflect.Value, inArgsCount)
for i := 0; i < inArgsCount; i++ {
inType := rt.In(i)
if i < argsSize {
argsValue := argsList.GetByIndex(i)
if argsValue == nil {
inArgsValues[i] = reflect.New(inType).Elem()
continue
}
switch inType.Kind() {
case reflect.String:
inArgsValues[i] = reflect.ValueOf(argsValue.String())
case reflect.Int:
inArgsValues[i] = reflect.ValueOf(argsValue.Int())
case reflect.Int8:
inArgsValues[i] = reflect.ValueOf(int8(argsValue.Int()))
case reflect.Int16:
inArgsValues[i] = reflect.ValueOf(int16(argsValue.Int()))
case reflect.Int32:
inArgsValues[i] = reflect.ValueOf(int32(argsValue.Int()))
case reflect.Int64:
inArgsValues[i] = reflect.ValueOf(int64(argsValue.Int()))
case reflect.Uint:
inArgsValues[i] = reflect.ValueOf(uint(argsValue.Int()))
case reflect.Uint8:
inArgsValues[i] = reflect.ValueOf(uint8(argsValue.Int()))
case reflect.Uint16:
inArgsValues[i] = reflect.ValueOf(uint16(argsValue.Int()))
case reflect.Uint32:
inArgsValues[i] = reflect.ValueOf(uint32(argsValue.Int()))
case reflect.Uint64:
inArgsValues[i] = reflect.ValueOf(uint64(argsValue.Int()))
case reflect.Uintptr:
inArgsValues[i] = reflect.ValueOf(uintptr(argsValue.Int()))
case reflect.Float32:
inArgsValues[i] = reflect.ValueOf(float32(argsValue.Float()))
case reflect.Float64:
inArgsValues[i] = reflect.ValueOf(argsValue.Float())
case reflect.Bool:
inArgsValues[i] = reflect.ValueOf(argsValue.Bool())
case reflect.Struct:
if argsValue.IsObject() {
// struct
if jsonBytes := argsValue.Bytes(); jsonBytes != nil {
v := reflect.New(inType)
if err := jsoniter.Unmarshal(jsonBytes, v.Interface()); err == nil {
inArgsValues[i] = v.Elem()
continue
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
} else {
inArgsValues[i] = reflect.New(inType).Elem()
continue
}
switch inType.Kind() {
case reflect.String:
inArgsValues[i] = reflect.ValueOf(argsValue.String())
case reflect.Int:
inArgsValues[i] = reflect.ValueOf(argsValue.Int())
case reflect.Int8:
inArgsValues[i] = reflect.ValueOf(int8(argsValue.Int()))
case reflect.Int16:
inArgsValues[i] = reflect.ValueOf(int16(argsValue.Int()))
case reflect.Int32:
inArgsValues[i] = reflect.ValueOf(int32(argsValue.Int()))
case reflect.Int64:
inArgsValues[i] = reflect.ValueOf(int64(argsValue.Int()))
case reflect.Uint:
inArgsValues[i] = reflect.ValueOf(uint(argsValue.Int()))
case reflect.Uint8:
inArgsValues[i] = reflect.ValueOf(uint8(argsValue.Int()))
case reflect.Uint16:
inArgsValues[i] = reflect.ValueOf(uint16(argsValue.Int()))
case reflect.Uint32:
inArgsValues[i] = reflect.ValueOf(uint32(argsValue.Int()))
case reflect.Uint64:
inArgsValues[i] = reflect.ValueOf(uint64(argsValue.Int()))
case reflect.Uintptr:
inArgsValues[i] = reflect.ValueOf(uintptr(argsValue.Int()))
case reflect.Float32:
inArgsValues[i] = reflect.ValueOf(float32(argsValue.Float()))
case reflect.Float64:
inArgsValues[i] = reflect.ValueOf(argsValue.Float())
case reflect.Bool:
inArgsValues[i] = reflect.ValueOf(argsValue.Bool())
case reflect.Struct:
if argsValue.IsObject() {
// struct
case reflect.Map:
if argsValue.IsObject() {
// map key=string : value != interface
if inType.Elem().Kind() != reflect.Interface {
if jsonBytes := argsValue.Bytes(); jsonBytes != nil {
v := reflect.New(inType)
if err := jsoniter.Unmarshal(jsonBytes, v.Interface()); err == nil {
inArgsValues[i] = v.Elem()
vv := reflect.New(inType)
if err := jsoniter.Unmarshal(jsonBytes, vv.Interface()); err == nil {
inArgsValues[i] = vv.Elem()
continue
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
}
}
inArgsValues[i] = reflect.New(inType).Elem()
case reflect.Map:
if argsValue.IsObject() {
// map key=string : value != interface
if inType.Elem().Kind() != reflect.Interface {
if jsonBytes := argsValue.Bytes(); jsonBytes != nil {
vv := reflect.New(inType)
if err := jsoniter.Unmarshal(jsonBytes, vv.Interface()); err == nil {
inArgsValues[i] = vv.Elem()
continue
}
}
inArgsValues[i] = reflect.New(inType).Elem()
} else {
inArgsValues[i] = reflect.ValueOf(argsValue.Data())
inArgsValues[i] = reflect.New(inType).Elem()
}
} else {
inArgsValues[i] = reflect.New(inType).Elem()
inArgsValues[i] = reflect.ValueOf(argsValue.Data())
}
case reflect.Slice:
if argsValue.IsArray() {
// slick value != interface
if inType.Elem().Kind() != reflect.Interface {
if jsonBytes := argsValue.Bytes(); jsonBytes != nil {
vv := reflect.New(inType)
if err := jsoniter.Unmarshal(jsonBytes, vv.Interface()); err == nil {
inArgsValues[i] = vv.Elem()
continue
}
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
case reflect.Slice:
if argsValue.IsArray() {
// slick value != interface
if inType.Elem().Kind() != reflect.Interface {
if jsonBytes := argsValue.Bytes(); jsonBytes != nil {
vv := reflect.New(inType)
if err := jsoniter.Unmarshal(jsonBytes, vv.Interface()); err == nil {
inArgsValues[i] = vv.Elem()
continue
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
inArgsValues[i] = reflect.New(inType).Elem()
} else {
inArgsValues[i] = reflect.ValueOf(argsValue.Data())
inArgsValues[i] = reflect.New(inType).Elem()
}
} else {
inArgsValues[i] = reflect.New(inType).Elem()
inArgsValues[i] = reflect.ValueOf(argsValue.Data())
}
default:
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
} else {
default:
inArgsValues[i] = reflect.New(inType).Elem()
}
} else {
inArgsValues[i] = reflect.New(inType).Elem()
}
}
// call
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册