Skip to content
Snippets Groups Projects
Select Git revision
  • 766c2ca54febe29bce90f3586eaa9a18bb5d3da8
  • master default protected
  • 3.0
  • develop
  • revert-2069-tripleVersion
  • 3.1
  • rest-protocol
  • feat/remoting_rocketmq
  • dapr-support
  • 1.5
  • 1.4
  • 1.3
  • 1.2
  • 1.1
  • v3.0.3-rc2
  • v3.0.3-rc1
  • v3.0.2
  • v1.5.8
  • v1.5.9-rc1
  • v3.0.1
  • v1.5.8-rc1
  • v3.0.0
  • v3.0.0-rc4-1
  • v3.0.0-rc4
  • v3.0.0-rc3
  • v1.5.7
  • v1.5.7-rc2
  • v3.0.0-rc2
  • remove
  • v1.5.7-rc1
  • v3.0.0-rc1
  • v1.5.7-rc1-tmp
  • 1.5.6
  • v1.5.6
34 results

rpcinvocation.go

Blame
  • rpcinvocation.go 7.41 KiB
    /*
     * Licensed to the Apache Software Foundation (ASF) under one or more
     * contributor license agreements.  See the NOTICE file distributed with
     * this work for additional information regarding copyright ownership.
     * The ASF licenses this file to You under the Apache License, Version 2.0
     * (the "License"); you may not use this file except in compliance with
     * the License.  You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package invocation
    
    import (
    	"reflect"
    	"sync"
    )
    
    import (
    	"github.com/apache/dubbo-go/common"
    	"github.com/apache/dubbo-go/common/constant"
    	"github.com/apache/dubbo-go/protocol"
    )
    
    // ///////////////////////////
    // Invocation Implement of RPC
    // ///////////////////////////
    
    // todo: is it necessary to separate fields of consumer(provider) from RPCInvocation
    // nolint
    type RPCInvocation struct {
    	methodName string
    	// Parameter Type Names. It is used to specify the parameterType
    	parameterTypeNames []string
    	parameterTypes     []reflect.Type
    
    	parameterValues []reflect.Value
    	arguments       []interface{}
    	reply           interface{}
    	callBack        interface{}
    	attachments     map[string]interface{}
    	// Refer to dubbo 2.7.6.  It is different from attachment. It is used in internal process.
    	attributes map[string]interface{}
    	invoker    protocol.Invoker
    	lock       sync.RWMutex
    }
    
    // NewRPCInvocation creates a RPC invocation.
    func NewRPCInvocation(methodName string, arguments []interface{}, attachments map[string]interface{}) *RPCInvocation {
    	return &RPCInvocation{
    		methodName:  methodName,
    		arguments:   arguments,
    		attachments: attachments,
    		attributes:  make(map[string]interface{}, 8),
    	}
    }
    
    // NewRPCInvocationWithOptions creates a RPC invocation with @opts.
    func NewRPCInvocationWithOptions(opts ...option) *RPCInvocation {
    	invo := &RPCInvocation{}
    	for _, opt := range opts {
    		opt(invo)
    	}
    	if invo.attributes == nil {