|
|
- package container
-
- import (
- "errors"
- "fmt"
- "reflect"
- )
-
- type NewSessionBroker struct {
- // 调用器
- caller Caller
- // 会话
- sessionContext *SessionContext
- }
-
- 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() != RequestContextType {
- // 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:
- return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("第一个参数不能为空!")))}
- break
- default:
- // Todo Log
- return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("第一个参数类型错误!")))}
- }
- requestContext := firstParameter.Interface().(*RequestContext)
- if requestContext.session != nil {
- // Todo Log
- return []reflect.Value{reflect.ValueOf(errors.New(fmt.Sprintf("上下文的会话应当为空!")))}
- }
- transactionHandler, err := broker.sessionContext.transactionHandlerFactory.Create()
- if err != nil {
- return []reflect.Value{reflect.ValueOf(err)}
- }
- defer transactionHandler.Close()
- requestContext.session = transactionHandler.Session()
- return broker.caller(in)
- }
|