コード例 #1
0
        private static void BuildMethod(JsonRpcMethodBuilder builder, MethodInfo method)
        {
            Debug.Assert(method != null);
            Debug.Assert(builder != null);

            builder.InternalName = method.Name;
            builder.ResultType = method.ReturnType;
            builder.Dispatcher = new Dispatcher(method);
            
            //
            // Build via attributes.
            //
            
            object[] attributes = method.GetCustomAttributes(typeof(IMethodReflector), true);
            foreach (IMethodReflector reflector in attributes)
                reflector.Build(builder, method);
            
            //
            // Fault in the method name if still without name.
            //
            
            if (builder.Name.Length == 0)
                builder.Name = method.Name;

            //
            // Build the method parameters.
            //

            foreach (ParameterInfo parameter in method.GetParameters())
                BuildParameter(builder.DefineParameter(), parameter);
        }
コード例 #2
0
        internal JsonRpcMethod(JsonRpcMethodBuilder methodBuilder, JsonRpcServiceClass clazz)
        {
            Debug.Assert(methodBuilder != null);
            Debug.Assert(clazz != null);
            
            _name = methodBuilder.Name;
            _internalName = Mask.EmptyString(methodBuilder.InternalName, methodBuilder.Name);
            _resultType = methodBuilder.ResultType;
            _description = methodBuilder.Description;
            _dispatcher = methodBuilder.Dispatcher;
            _attributes = DeepCopy(methodBuilder.GetCustomAttributes());
            _class = clazz;
            
            JsonRpcParameterBuilder[] parameterBuilders = methodBuilder.GetParameters();
            _parameters = new JsonRpcParameter[parameterBuilders.Length];
            int paramIndex = 0;

            foreach (JsonRpcParameterBuilder parameterBuilder in parameterBuilders)
                _parameters[paramIndex++] = new JsonRpcParameter(parameterBuilder, this);
        }
コード例 #3
0
        internal JsonRpcMethod(JsonRpcMethodBuilder methodBuilder, JsonRpcServiceClass clazz)
        {
            Debug.Assert(methodBuilder != null);
            Debug.Assert(clazz != null);
            
            _name = methodBuilder.Name;
            _internalName = Mask.EmptyString(methodBuilder.InternalName, methodBuilder.Name);
            _resultType = methodBuilder.ResultType;
            _description = methodBuilder.Description;
            _dispatcher = methodBuilder.Dispatcher;
            _attributes = DeepCopy(methodBuilder.GetCustomAttributes());
            _class = clazz;
            
            //
            // Set up parameters and their names.
            //
            
            ICollection parameterBuilders = methodBuilder.Parameters;
            _parameters = new JsonRpcParameter[parameterBuilders.Count];
            _parameterNames = new string[parameterBuilders.Count];

            foreach (JsonRpcParameterBuilder parameterBuilder in parameterBuilders)
            {
                JsonRpcParameter parameter = new JsonRpcParameter(parameterBuilder, this);
                int position = parameter.Position;
                _parameters[position] = parameter;
                _parameterNames[position] = parameter.Name;
            }
            
            //
            // Keep a sorted list of parameters and their names so we can
            // do fast look ups using binary search.
            //
            
            _sortedParameters = (JsonRpcParameter[]) _parameters.Clone();
            Array.Sort(_parameterNames, _sortedParameters, Comparer.DefaultInvariant);
        }
コード例 #4
0
 public JsonRpcMethodBuilder DefineMethod()
 {
     JsonRpcMethodBuilder builder = new JsonRpcMethodBuilder(this);
     MethodList.Add(builder);
     return builder;
 }
コード例 #5
0
 public void Init()
 {
     _classBuilder = new JsonRpcServiceClassBuilder();
     _builder = _classBuilder.DefineMethod();
 }
コード例 #6
0
 public void Build(JsonRpcMethodBuilder builder, MethodInfo method)
 {
     builder.AddCustomAttribute(this);
 }
コード例 #7
0
 public void Init()
 {
     _methodBuilder = (new JsonRpcServiceClassBuilder()).DefineMethod();
     _builder = _methodBuilder.DefineParameter();
 }
コード例 #8
0
 void IMethodReflector.Build(JsonRpcMethodBuilder builder, MethodInfo method)
 {
     builder.Description = Text;
 }
コード例 #9
0
 internal JsonRpcParameterBuilder(JsonRpcMethodBuilder method)
 {
     Debug.Assert(method != null);
         
     _method = method;
 }
コード例 #10
0
 void IMethodReflector.Build(JsonRpcMethodBuilder builder, MethodInfo method)
 {
     builder.AddCustomAttribute(this);
 }