示例#1
0
 public virtual void EmitPostPublicEventHandlerReturnValueStatements(CodeBuilder b)
 {
     if (!PublicReturnType.IsVoid)
     {
         b.AppendLine("__retval = {0};", PublicReturnType.PublicUnwrapExpression("e.m_returnValue"));
     }
 }
示例#2
0
    public virtual void EmitPublicCall(CodeBuilder b, string apiClassName, string apiFunctionName)
    {
        var apiCall = string.Format("CfxApi.{2}.{0}({1})", apiFunctionName, PublicArgumentList, apiClassName);

        for (var i = 0; i <= ManagedArguments.Length - 1; i++)
        {
            ManagedArguments[i].EmitPrePublicCallStatements(b);
        }

        var b1 = new CodeBuilder(b.CurrentIndent);

        for (var i = 0; i <= ManagedArguments.Length - 1; i++)
        {
            ManagedArguments[i].EmitPostPublicStatements(b1);
        }

        if (PublicReturnType.IsVoid)
        {
            b.AppendLine(apiCall + ";");
            b.AppendBuilder(b1);
        }
        else
        {
            if (b1.IsNotEmpty)
            {
                b.AppendLine("var __retval = {0};", apiCall);
                b.AppendBuilder(b1);
                b.AppendLine("return {0};", PublicReturnType.PublicReturnExpression("__retval"));
            }
            else
            {
                b.AppendLine("return {0};", PublicReturnType.PublicReturnExpression(apiCall));
            }
        }
    }
示例#3
0
 public virtual void EmitPostPublicEventHandlerReturnValueStatements(CodeBuilder b)
 {
     if (!PublicReturnType.IsVoid)
     {
         PublicReturnType.EmitSetCallbackReturnValueStatements(b);
     }
 }
示例#4
0
    protected virtual void EmitExecuteInTargetProcess(CodeBuilder b)
    {
        switch (Owner.CallMode)
        {
        case CfxCallMode.FunctionCall:

            foreach (var arg in ManagedArguments)
            {
                if (!arg.IsThisArgument)
                {
                    arg.EmitPreProxyCallStatements(b);
                    args.Add(arg.ProxyUnwrapExpression);
                }
            }

            string fCall = null;
            if (ManagedArguments.Length > 0 && ManagedArguments[0].IsThisArgument)
            {
                b.AppendLine("var self_local = ({0})RemoteProxy.Unwrap(self);", ManagedArguments[0].ArgumentType.PublicSymbol);
                fCall = string.Format("self_local.{0}({1})", Owner.PublicFunctionName, args.Join());
            }
            else
            {
                fCall = string.Format("{0}.{1}({2})", Owner.PublicClassName, Owner.PublicFunctionName, args.Join());
            }

            if (!PublicReturnType.IsVoid)
            {
                b.AppendLine("__retval = {0};", PublicReturnType.ProxyWrapExpression(fCall));
            }
            else
            {
                b.AppendLine(fCall + ";");
            }

            foreach (var arg in ManagedArguments)
            {
                if (!arg.IsThisArgument)
                {
                    arg.EmitPostProxyCallStatements(b);
                }
            }

            break;

        case CfxCallMode.PropertyGetter:
            b.AppendLine("var self_local = ({0})RemoteProxy.Unwrap(self);", ManagedArguments[0].ArgumentType.PublicSymbol);
            b.AppendLine("__retval = {0};", PublicReturnType.ProxyWrapExpression("self_local." + Owner.PropertyName));
            break;

        case CfxCallMode.PropertySetter:
            b.AppendLine("var self_local = ({0})RemoteProxy.Unwrap(self);", ManagedArguments[0].ArgumentType.PublicSymbol);
            b.AppendLine("self_local.{0} = {1};", Owner.PropertyName, ManagedArguments[1].ProxyUnwrapExpression);
            break;
        }
    }
    protected virtual void EmitExecuteInTargetProcess(CodeBuilder b)
    {
        for (var i = 0; i <= ManagedArguments.Length - 1; i++)
        {
            ManagedArguments[i].EmitPreProxyCallStatements(b);
        }

        var apiCall = string.Format("CfxApi.{2}.{0}({1})", Owner.CfxApiFunctionName, ProxyArgumentList, Owner.PublicClassName.Substring(3));

        if (PublicReturnType.IsVoid)
        {
            b.AppendLine(apiCall + ";");
        }
        else
        {
            b.AppendLine("__retval = {0};", PublicReturnType.ProxyReturnExpression(apiCall));
        }

        for (var i = 0; i <= ManagedArguments.Length - 1; i++)
        {
            ManagedArguments[i].EmitPostProxyCallStatements(b);
        }
    }
示例#6
0
    protected virtual void EmitRemoteProcedure(CodeBuilder b, string apiClassName, string apiFunctionName)
    {
        for (var i = 0; i <= ManagedParameters.Length - 1; i++)
        {
            ManagedParameters[i].EmitRemoteProcedurePreCallStatements(b);
        }

        var apiCall = string.Format("CfxApi.{2}.{0}({1})", apiFunctionName, RemoteProcedureCallArgumentList, apiClassName);

        if (PublicReturnType.IsVoid)
        {
            b.AppendLine(apiCall + ";");
        }
        else
        {
            b.AppendLine("__retval = {0};", PublicReturnType.RemoteProcedureReturnExpression(apiCall));
        }

        for (var i = 0; i <= ManagedParameters.Length - 1; i++)
        {
            ManagedParameters[i].EmitRemoteProcedurePostCallStatements(b);
        }
    }
    public void EmitRemoteCallClassBody(CodeBuilder b)
    {
        b.AppendLine();

        foreach (var arg in ManagedArguments)
        {
            arg.EmitRemoteCallFields(b);
        }

        if (!PublicReturnType.IsVoid)
        {
            PublicReturnType.EmitRemoteCallFields(b, "__retval");
        }

        b.AppendLine();
        if (ManagedArguments.Length > 0)
        {
            b.BeginBlock("protected override void WriteArgs(StreamHandler h)");
            foreach (var arg in ManagedArguments)
            {
                if (arg.ArgumentType.IsIn)
                {
                    arg.EmitRemoteWrite(b);
                }
            }
            b.EndBlock();
            b.AppendLine();

            b.BeginBlock("protected override void ReadArgs(StreamHandler h)");
            foreach (var arg in ManagedArguments)
            {
                if (arg.ArgumentType.IsIn)
                {
                    arg.EmitRemoteRead(b);
                }
            }
            b.EndBlock();
            b.AppendLine();
        }

        var outArgs = new List <Argument>();

        foreach (var arg in ManagedArguments)
        {
            if (arg.ArgumentType.IsOut)
            {
                outArgs.Add(arg);
            }
            else if (arg.ArgumentType.IsStringCollectionType && Owner.CefName.Contains("::get_"))
            {
                outArgs.Add(arg);
            }
        }

        if (outArgs.Count > 0 || !PublicReturnType.IsVoid)
        {
            b.BeginBlock("protected override void WriteReturn(StreamHandler h)");
            foreach (var arg in outArgs)
            {
                arg.EmitRemoteWrite(b);
            }
            if (!PublicReturnType.IsVoid)
            {
                b.AppendLine("h.Write(__retval);", PublicReturnType.PublicSymbol);
            }
            b.EndBlock();
            b.AppendLine();

            b.BeginBlock("protected override void ReadReturn(StreamHandler h)");
            foreach (var arg in outArgs)
            {
                arg.EmitRemoteRead(b);
            }
            if (!PublicReturnType.IsVoid)
            {
                b.AppendLine("h.Read(out __retval);", PublicReturnType.PublicSymbol);
            }
            b.EndBlock();
            b.AppendLine();
        }

        b.BeginBlock("protected override void ExecuteInTargetProcess(RemoteConnection connection)");
        EmitExecuteInTargetProcess(b);
        b.EndBlock();
    }
示例#8
0
    public void EmitRemoteCallClassBody(CodeBuilder b, string apiClassName, string apiFunctionName)
    {
        b.AppendLine();

        foreach (var arg in ManagedParameters)
        {
            arg.EmitRemoteCallFields(b);
        }

        if (!PublicReturnType.IsVoid)
        {
            PublicReturnType.EmitRemoteCallFields(b, "__retval");
        }

        b.AppendLine();
        if (ManagedParameters.Length > 0)
        {
            b.BeginBlock("protected override void WriteArgs(StreamHandler h)");
            foreach (var arg in ManagedParameters)
            {
                if (arg.ParameterType.IsIn)
                {
                    arg.EmitRemoteWrite(b);
                }
            }
            b.EndBlock();
            b.AppendLine();

            b.BeginBlock("protected override void ReadArgs(StreamHandler h)");
            foreach (var arg in ManagedParameters)
            {
                if (arg.ParameterType.IsIn)
                {
                    arg.EmitRemoteRead(b);
                }
            }
            b.EndBlock();
            b.AppendLine();
        }

        var outArgs = new List <Parameter>();

        foreach (var arg in ManagedParameters)
        {
            if (arg.ParameterType.IsOut)
            {
                outArgs.Add(arg);
            }
            else if (arg.ParameterType.IsStringCollectionType && arg.ParameterType.AsStringCollectionType.ClassName == "CfxStringList")
            {
                outArgs.Add(arg);
            }
        }

        if (outArgs.Count > 0 || !PublicReturnType.IsVoid)
        {
            b.BeginBlock("protected override void WriteReturn(StreamHandler h)");
            foreach (var arg in outArgs)
            {
                arg.EmitRemoteWrite(b);
            }
            if (!PublicReturnType.IsVoid)
            {
                b.AppendLine("h.Write(__retval);", PublicReturnType.PublicSymbol);
            }
            b.EndBlock();
            b.AppendLine();

            b.BeginBlock("protected override void ReadReturn(StreamHandler h)");
            foreach (var arg in outArgs)
            {
                arg.EmitRemoteRead(b);
            }
            if (!PublicReturnType.IsVoid)
            {
                b.AppendLine("h.Read(out __retval);", PublicReturnType.PublicSymbol);
            }
            b.EndBlock();
            b.AppendLine();
        }

        b.BeginBlock("protected override void RemoteProcedure()");
        EmitRemoteProcedure(b, apiClassName, apiFunctionName);
        b.EndBlock();
    }