Ejemplo n.º 1
0
 public byte[] SerializedCall(object hostObject, ICallBoxDecoder decoder, byte[] data)
 {
     try
     {
         decoder.Parse(data);
     }
     catch(Exception ex)
     {
         return decoder.GetExceptionResponse(ex);
     }
     return SerializedCall(hostObject, decoder);
 }
Ejemplo n.º 2
0
        public byte[] SerializedCall(object hostObject, ICallBoxDecoder decoder)
        {
            try
            {
                string methodName = decoder.GetMethodName();
                CallInfoCacheItem mici;
                if (CallMap.TryGetValue(methodName, out mici) == false)
                    throw new Exception("MethodName: " + methodName + " not found");

                // build parameters
                object[] callparams = BuildSerializedParameters(decoder, mici);

                object ret = mici.Call(hostObject, callparams);
                //object ret = methodinfo.Invoke(hostObject, BindingFlags.ExactBinding, null, callparams, null);

                if (mici.HasReturn)
                    return decoder.GetOKResponse(ret);
                return null;
            }
            catch (Exception ex)
            {
                return decoder.GetExceptionResponse(ex);
            }
        }
Ejemplo n.º 3
0
        internal static object[] BuildSerializedParameters(ICallBoxDecoder decoder, CallInfoCacheItem mici)
        {
            MethodInfo methodinfo = mici.MI;
            var paramnames = mici.ParameterNames;
            var paramtypes = mici.ParameterTypes;

            object[] callparams = null;

            if (paramnames.Length != 0)
            {
                callparams = new object[paramnames.Length];
                for (int i = 0; i < callparams.Length; i++)
                {
                    if (decoder.TryGetArgument(i, paramnames[i], paramtypes[i], out callparams[i]) == false)
                    {
                        throw new Exception("Argument missing: " + paramnames[i]);
                    }
                }
            }
            return callparams;
        }