GAAS GFrame项目web后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.2 KiB

package container
import (
"errors"
"fmt"
"reflect"
)
type NewSessionBroker struct {
// 调用器
caller Caller
// 会话
session *Session
}
func (broker *NewSessionBroker) Call(in []reflect.Value) []reflect.Value {
// 从接口获取方法,Receiver不算作入参
if len(in) < 1 {
// Todo Log
return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("参数长度错误!")))}
}
firstParameter := in[0]
switch firstParameter.Kind() {
case reflect.Ptr:
if firstParameter.Type() != xormSessionType {
// Todo Log
return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("第一个参数类型不正确!")))}
}
if !firstParameter.IsNil() {
// Todo Log
return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("第一个参数已经赋值!")))}
}
break
case reflect.Invalid:
break
default:
// Todo Log
return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("第一个参数类型不正确!")))}
}
transactionHandler, err := broker.session.transactionHandlerFactory.Create()
if err != nil {
return []reflect.Value{reflect.ValueOf(err)}
}
defer transactionHandler.Close()
in[0] = reflect.ValueOf(transactionHandler.Session())
return broker.caller(in)
}