コード例 #1
0
        /// <summary>
        /// Given an XML reader and a collection of text writers, generate the desired source
        /// </summary>
        /// <param name="readerIDL">Reader of input XML</param>
        /// <param name="textwriters">Writers for output</param>
        public static void BuildCodeFromDbusIDL(XmlReader readerIDL, TextWriters textwriters)
        {
            XDocument doc = XDocument.Load(readerIDL);
            IEnumerable <IDLInterface> idlInterfaces = IDLProcessor.Transform(doc.Element("node")); //Parse the XML into lists of objects

#if DEBUG
            foreach (IDLInterface IDLint in idlInterfaces)
            {
                IDLint.DumpImpl(Console.Out);
            }
#endif
            IDLProcessor.Generate(idlInterfaces, textwriters); //Output objects as source
        }
コード例 #2
0
 /// <summary>
 /// Accepts IDL input and outputs code through the given text writers
 /// </summary>
 /// <param name="interfaces">Input IDL</param>
 /// <param name="textwriters">TextWriters struct for output</param>
 public static void Generate(IEnumerable<IDLInterface> interfaces, TextWriters textwriters)
 {
     if (textwriters.writerInterface != null)
     {
         new InterfaceBuilder().Generate(interfaces, textwriters.writerInterface);
     #if DEBUG
         if (System.Diagnostics.Debugger.IsAttached)
         {
             Console.WriteLine("Interface code generated, press enter to continue...");
             Console.ReadLine();
         }
     #endif // DEBUG
     }
     if (textwriters.writerProxy != null)
     {
         new ProxyBuilder().Generate(interfaces, textwriters.writerProxy);
     #if DEBUG
         if (System.Diagnostics.Debugger.IsAttached)
         {
             Console.WriteLine("Proxy code generated, press enter to continue...");
             Console.ReadLine();
         }
     #endif // DEBUG
     }
     if (textwriters.writerService != null)
     {
         new MarshalBuilder().Generate(interfaces, textwriters.writerService);
     #if DEBUG
         if (System.Diagnostics.Debugger.IsAttached)
         {
             Console.WriteLine("Marshal code generated, press enter to continue...");
             Console.ReadLine();
         }
     #endif // DEBUG
     }
     if (textwriters.writerWCFContracts != null)
     {
         new WCFContractBuilder().Generate(interfaces, textwriters.writerWCFContracts);
     #if DEBUG
         if (System.Diagnostics.Debugger.IsAttached)
         {
             Console.WriteLine("WCF Contracts code generated, press enter to continue...");
             Console.ReadLine();
         }
     #endif // DEBUG
     }
     if (textwriters.writerWCFService != null)
     {
         // Non-passthrough version creates dbus instance at method invocation time
         //new WCFServiceBuilder().Generate(interfaces, textwriters.writerWCFService);
         new WCFPassthruServiceBuilder().Generate(interfaces, textwriters.writerWCFService);
     #if DEBUG
         if (System.Diagnostics.Debugger.IsAttached)
         {
             Console.WriteLine("WCF Service code generated, press enter to continue...");
             Console.ReadLine();
         }
     #endif // DEBUG
     }
     if (textwriters.writerWCFHost != null)
     {
         // Non-passthrough version creates dbus instance at method invocation time
         //new WCFHostBuilder().Generate(interfaces, textwriters.writerWCFHost);
         new WCFPassthruHostBuilder().Generate(interfaces, textwriters.writerWCFHost);
     #if DEBUG
         if (System.Diagnostics.Debugger.IsAttached)
         {
             Console.WriteLine("WCF Host code generated, press enter to continue...");
             Console.ReadLine();
         }
     #endif // DEBUG
        }
 }
コード例 #3
0
        static void Main(string[] args)
        {
            //Holds all of the argument paths we may get given
            ArgHolder pathArg = new ArgHolder();
            ArgHolder interfaceArg = new ArgHolder();
            ArgHolder serviceArg = new ArgHolder();
            ArgHolder proxyArg = new ArgHolder();
            ArgHolder contractArg = new ArgHolder();
            ArgHolder wcfserviceArg = new ArgHolder();
            ArgHolder hostArg = new ArgHolder();

            bool bVerbose = false; //Verbosity level
            bool bOutputSpecified = false; //Whether any output values have been set

            #region argParsing
            for (int i = 0; i < args.Length; i++)
            {
                string arg = args[i].ToLower();
                ArgHolder holder = null;

                if (arg.StartsWith("--")) // If long param
                {
                    switch(arg)
                    {
                        case "--path":
                            holder = pathArg;
                            break;
                        case "--interface":
                            holder = interfaceArg;
                            break;
                        case "--service":
                            holder = serviceArg;
                            break;
                        case "--proxy":
                            holder = proxyArg;
                            break;
                        case "--contract":
                            holder = contractArg;
                            break;
                        case "--wcfservice":
                            holder = wcfserviceArg;
                            break;
                        case "--host":
                            holder = hostArg;
                            break;
                        case "--verbose":
                            bVerbose = true;
                            break;
                        default:
                            Console.Error.WriteLine(args[i] + " not a valid argument");
                            break;
                    }
                } // Ends if long param
                else if (arg.StartsWith("-")) // Else if short param
                {
                    switch(arg)
                    {
                        case "-p":
                            holder = pathArg;
                            break;
                        case "-i":
                            holder = interfaceArg;
                            break;
                        case "-s":
                            holder = serviceArg;
                            break;
                        case "-x":
                            holder = proxyArg;
                            break;
                        case "-c":
                            holder = contractArg;
                            break;
                        case "-w":
                            holder = wcfserviceArg;
                            break;
                        case "-h":
                            holder = hostArg;
                            break;
                        case "-v":
                            bVerbose = true;
                            break;
                        default:
                            Console.Error.WriteLine(args[i] + " not a valid argument");
                            break;
                    }
                } // Ends else if short param
                else
                {
                    if (arg == "/?")
                    {
                        Usage();
                    }
                    else
                    {
                        Console.Error.WriteLine(args[i] + " not a valid argument");
                    }
                }

                //If given a parameter that comes as two args, i.e. arg & path, consume an extra arg this loop
                if (holder != null)
                {
                    i++;
                    if (i >= args.Length)
                    {
                        Console.Error.WriteLine(string.Format("Insufficient number of arguments provided."));
                        Usage();
                    }
                    holder.Arg = args[i];
                    if (holder != pathArg)
                    {
                        bOutputSpecified = true;
                    }
                }
            } // Ends loop over args
            #endregion argParsing

            // Check we were given an input file at least
            if (pathArg.Arg == null)
            {
                System.Console.Error.WriteLine("No input path specified");
                Usage();
            }

            // If no output parameters specified, just spit out all code to default files
            if (!bOutputSpecified)
            {
                interfaceArg.Arg = DefaultInterfaceFile;
                serviceArg.Arg = DefaultImplementationFile;
                proxyArg.Arg = DefaultProxyFile;
                contractArg.Arg = DefaultContractFile;
                wcfserviceArg.Arg = DefaultWCFServiceFile;
                hostArg.Arg = DefaultHostFile;
            } // Ends if no output parameters specified

            #region outputWriters
            // Initialise all writers to null
            TextWriter writerInterface = null;
            TextWriter writerService = null;
            TextWriter writerProxy = null;
            TextWriter writerContract = null;
            TextWriter writerWCFService = null;
            TextWriter writerHost = null;

            //Lets us print out info in exceptions if anything goes wrong
            string exceptionInfoString = "";
            string givenArg = "";
            //try-catch-bail
            try
            {
                //try-catch-info-throw
                try
                {
                    //Only open the files we've been told to care about
                    //i.e. We need to prevent any ArgumentNullExceptions as it's a valid use case
                    exceptionInfoString = "Service Interface";
                    givenArg = interfaceArg.Arg;
                    if (givenArg != null) writerInterface = new StreamWriter(givenArg);

                    exceptionInfoString = "Service Implementation";
                    givenArg = serviceArg.Arg;
                    if (givenArg != null) writerService = new StreamWriter(givenArg);

                    exceptionInfoString = "Client Proxy";
                    givenArg = proxyArg.Arg;
                    if (givenArg != null) writerProxy = new StreamWriter(givenArg);

                    exceptionInfoString = "WCF Contract";
                    givenArg = contractArg.Arg;
                    if (givenArg != null) writerContract = new StreamWriter(givenArg);

                    exceptionInfoString = "WCF Service";
                    givenArg = wcfserviceArg.Arg;
                    if (givenArg != null) writerWCFService = new StreamWriter(givenArg);

                    exceptionInfoString = "WCF Host";
                    givenArg = hostArg.Arg;
                    if (givenArg != null) writerHost = new StreamWriter(givenArg);
                }
                catch (System.ArgumentException sae)
                {
                    System.Console.Error.WriteLine("Bad output path {0} given for {1}", givenArg, exceptionInfoString);
                    throw sae;
                }
                catch (System.UnauthorizedAccessException uae)
                {
                    System.Console.Error.WriteLine("Unauthorised access to {0} given for {1}", givenArg, exceptionInfoString);
                    throw uae;
                }
                catch (System.IO.DirectoryNotFoundException dnfe)
                {
                    System.Console.Error.WriteLine("Invalid directory in path {0} given for {1}", givenArg, exceptionInfoString);
                    throw dnfe;
                }
                catch (System.IO.PathTooLongException ptle)
                {
                    System.Console.Error.WriteLine("The specified path, file name, or both in {0} given for {1}, exceeds the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.", givenArg, exceptionInfoString);
                    throw ptle;
                }
                catch (Exception ex)
                {
                    System.Console.Error.Write(ex.ToString()); //Cover any missed bases
                    throw ex;
                }//End try-catch-info-throw
            }
            catch (Exception)
            {
                Environment.Exit(0);
            }//End try-catch-bail

            //May be that we're being watched by a debugger and need to output in two directions at once
            if (System.Diagnostics.Debugger.IsAttached)
            {
                TextWriter writerDebug = new TextWriterDebug();
                writerInterface = writerInterface != null ? new TextWriterMulti(writerInterface, writerDebug) : null;
                writerService = writerService != null ? new TextWriterMulti(writerService, writerDebug) : null;
                writerProxy = writerProxy != null ? new TextWriterMulti(writerProxy, writerDebug) : null;
                writerContract = writerContract != null ? new TextWriterMulti(writerContract, writerDebug) : null;
                writerWCFService = writerWCFService != null ? new TextWriterMulti(writerWCFService, writerDebug) : null;
                writerHost = writerHost != null ? new TextWriterMulti(writerHost, writerDebug) : null;
            }

            TextWriters textwriters = new TextWriters
            {
                writerInterface = writerInterface,
                writerService = writerService,
                writerProxy = writerProxy,
                writerWCFContracts = writerContract,
                writerWCFService = writerWCFService,
                writerWCFHost = writerHost
            };
            #endregion outputWriters

            //Output info if in verbose
            if (bVerbose)
            {
                System.Console.WriteLine(string.Format("// IDL input path: \"{0}\"", pathArg.Arg));
                System.Diagnostics.Debug.WriteLine(string.Format("// IDL input path: \"{0}\"", pathArg.Arg));

                foreach (TextWriter textwriter in textwriters.GenTextWriters())
                {
                    if(textwriter != null)
                    {
                        System.Console.WriteLine(string.Format("// Output path: \"{0}\"", ((FileStream)((StreamWriter)textwriter).BaseStream).Name));
                        System.Diagnostics.Debug.WriteLine(string.Format("// Output path: \"{0}\"", ((FileStream)((StreamWriter)textwriter).BaseStream).Name));
                    }
                }
            }

            System.Xml.XmlReaderSettings readerSettings = new System.Xml.XmlReaderSettings();
            readerSettings.DtdProcessing = System.Xml.DtdProcessing.Ignore;
            readerSettings.ValidationType = ValidationType.None;
            readerSettings.ConformanceLevel = System.Xml.ConformanceLevel.Auto;
            readerSettings.CloseInput = true;

            //Try to open the input xml file and generate the output code
            try
            {
                try
                {
                    if (pathArg.Arg != null) BuildCodeFromDbusIDL(XmlReader.Create(pathArg.Arg, readerSettings), textwriters);
                }
                catch (System.IO.FileNotFoundException fne)
                {
                    System.Console.Error.WriteLine("Could not find the input file {0}", pathArg.Arg);
                    throw fne;
                }
                catch (System.UriFormatException ufe)
                {
                    System.Console.Error.WriteLine("URI Formatting exception for input file {0}", pathArg.Arg);
                    throw ufe;
                }
            }
            catch (Exception)
            {
                Environment.Exit(0);
            }

            //Close everything
            textwriters.Close();

            //If debugger attached, wait for them to tell us to quit
            if (System.Diagnostics.Debugger.IsAttached)
            {
                Console.WriteLine("Press a key to continue...");
                Console.ReadKey(true);
            }
        }
コード例 #4
0
 /// <summary>
 /// Given an XML reader and a collection of text writers, generate the desired source
 /// </summary>
 /// <param name="readerIDL">Reader of input XML</param>
 /// <param name="textwriters">Writers for output</param>
 public static void BuildCodeFromDbusIDL(XmlReader readerIDL, TextWriters textwriters)
 {
     XDocument doc = XDocument.Load(readerIDL);
     IEnumerable<IDLInterface> idlInterfaces = IDLProcessor.Transform(doc.Element("node")); //Parse the XML into lists of objects
     #if DEBUG
     foreach (IDLInterface IDLint in idlInterfaces)
     {
         IDLint.DumpImpl(Console.Out);
     }
     #endif
     IDLProcessor.Generate(idlInterfaces, textwriters); //Output objects as source
 }
コード例 #5
0
        static void Main(string[] args)
        {
            //Holds all of the argument paths we may get given
            ArgHolder pathArg       = new ArgHolder();
            ArgHolder interfaceArg  = new ArgHolder();
            ArgHolder serviceArg    = new ArgHolder();
            ArgHolder proxyArg      = new ArgHolder();
            ArgHolder contractArg   = new ArgHolder();
            ArgHolder wcfserviceArg = new ArgHolder();
            ArgHolder hostArg       = new ArgHolder();

            bool bVerbose         = false; //Verbosity level
            bool bOutputSpecified = false; //Whether any output values have been set

            #region argParsing
            for (int i = 0; i < args.Length; i++)
            {
                string    arg    = args[i].ToLower();
                ArgHolder holder = null;

                if (arg.StartsWith("--")) // If long param
                {
                    switch (arg)
                    {
                    case "--path":
                        holder = pathArg;
                        break;

                    case "--interface":
                        holder = interfaceArg;
                        break;

                    case "--service":
                        holder = serviceArg;
                        break;

                    case "--proxy":
                        holder = proxyArg;
                        break;

                    case "--contract":
                        holder = contractArg;
                        break;

                    case "--wcfservice":
                        holder = wcfserviceArg;
                        break;

                    case "--host":
                        holder = hostArg;
                        break;

                    case "--verbose":
                        bVerbose = true;
                        break;

                    default:
                        Console.Error.WriteLine(args[i] + " not a valid argument");
                        break;
                    }
                } // Ends if long param
                else if (arg.StartsWith("-")) // Else if short param
                {
                    switch (arg)
                    {
                    case "-p":
                        holder = pathArg;
                        break;

                    case "-i":
                        holder = interfaceArg;
                        break;

                    case "-s":
                        holder = serviceArg;
                        break;

                    case "-x":
                        holder = proxyArg;
                        break;

                    case "-c":
                        holder = contractArg;
                        break;

                    case "-w":
                        holder = wcfserviceArg;
                        break;

                    case "-h":
                        holder = hostArg;
                        break;

                    case "-v":
                        bVerbose = true;
                        break;

                    default:
                        Console.Error.WriteLine(args[i] + " not a valid argument");
                        break;
                    }
                } // Ends else if short param
                else
                {
                    if (arg == "/?")
                    {
                        Usage();
                    }
                    else
                    {
                        Console.Error.WriteLine(args[i] + " not a valid argument");
                    }
                }

                //If given a parameter that comes as two args, i.e. arg & path, consume an extra arg this loop
                if (holder != null)
                {
                    i++;
                    if (i >= args.Length)
                    {
                        Console.Error.WriteLine(string.Format("Insufficient number of arguments provided."));
                        Usage();
                    }
                    holder.Arg = args[i];
                    if (holder != pathArg)
                    {
                        bOutputSpecified = true;
                    }
                }
            } // Ends loop over args
            #endregion argParsing

            // Check we were given an input file at least
            if (pathArg.Arg == null)
            {
                System.Console.Error.WriteLine("No input path specified");
                Usage();
            }

            // If no output parameters specified, just spit out all code to default files
            if (!bOutputSpecified)
            {
                interfaceArg.Arg  = DefaultInterfaceFile;
                serviceArg.Arg    = DefaultImplementationFile;
                proxyArg.Arg      = DefaultProxyFile;
                contractArg.Arg   = DefaultContractFile;
                wcfserviceArg.Arg = DefaultWCFServiceFile;
                hostArg.Arg       = DefaultHostFile;
            } // Ends if no output parameters specified

            #region outputWriters
            // Initialise all writers to null
            TextWriter writerInterface  = null;
            TextWriter writerService    = null;
            TextWriter writerProxy      = null;
            TextWriter writerContract   = null;
            TextWriter writerWCFService = null;
            TextWriter writerHost       = null;

            //Lets us print out info in exceptions if anything goes wrong
            string exceptionInfoString = "";
            string givenArg            = "";
            //try-catch-bail
            try
            {
                //try-catch-info-throw
                try
                {
                    //Only open the files we've been told to care about
                    //i.e. We need to prevent any ArgumentNullExceptions as it's a valid use case
                    exceptionInfoString = "Service Interface";
                    givenArg            = interfaceArg.Arg;
                    if (givenArg != null)
                    {
                        writerInterface = new StreamWriter(givenArg);
                    }

                    exceptionInfoString = "Service Implementation";
                    givenArg            = serviceArg.Arg;
                    if (givenArg != null)
                    {
                        writerService = new StreamWriter(givenArg);
                    }

                    exceptionInfoString = "Client Proxy";
                    givenArg            = proxyArg.Arg;
                    if (givenArg != null)
                    {
                        writerProxy = new StreamWriter(givenArg);
                    }

                    exceptionInfoString = "WCF Contract";
                    givenArg            = contractArg.Arg;
                    if (givenArg != null)
                    {
                        writerContract = new StreamWriter(givenArg);
                    }

                    exceptionInfoString = "WCF Service";
                    givenArg            = wcfserviceArg.Arg;
                    if (givenArg != null)
                    {
                        writerWCFService = new StreamWriter(givenArg);
                    }

                    exceptionInfoString = "WCF Host";
                    givenArg            = hostArg.Arg;
                    if (givenArg != null)
                    {
                        writerHost = new StreamWriter(givenArg);
                    }
                }
                catch (System.ArgumentException sae)
                {
                    System.Console.Error.WriteLine("Bad output path {0} given for {1}", givenArg, exceptionInfoString);
                    throw sae;
                }
                catch (System.UnauthorizedAccessException uae)
                {
                    System.Console.Error.WriteLine("Unauthorised access to {0} given for {1}", givenArg, exceptionInfoString);
                    throw uae;
                }
                catch (System.IO.DirectoryNotFoundException dnfe)
                {
                    System.Console.Error.WriteLine("Invalid directory in path {0} given for {1}", givenArg, exceptionInfoString);
                    throw dnfe;
                }
                catch (System.IO.PathTooLongException ptle)
                {
                    System.Console.Error.WriteLine("The specified path, file name, or both in {0} given for {1}, exceeds the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.", givenArg, exceptionInfoString);
                    throw ptle;
                }
                catch (Exception ex)
                {
                    System.Console.Error.Write(ex.ToString()); //Cover any missed bases
                    throw ex;
                }//End try-catch-info-throw
            }
            catch (Exception)
            {
                Environment.Exit(0);
            }//End try-catch-bail

            //May be that we're being watched by a debugger and need to output in two directions at once
            if (System.Diagnostics.Debugger.IsAttached)
            {
                TextWriter writerDebug = new TextWriterDebug();
                writerInterface  = writerInterface != null ? new TextWriterMulti(writerInterface, writerDebug) : null;
                writerService    = writerService != null ? new TextWriterMulti(writerService, writerDebug) : null;
                writerProxy      = writerProxy != null ? new TextWriterMulti(writerProxy, writerDebug) : null;
                writerContract   = writerContract != null ? new TextWriterMulti(writerContract, writerDebug) : null;
                writerWCFService = writerWCFService != null ? new TextWriterMulti(writerWCFService, writerDebug) : null;
                writerHost       = writerHost != null ? new TextWriterMulti(writerHost, writerDebug) : null;
            }

            TextWriters textwriters = new TextWriters
            {
                writerInterface    = writerInterface,
                writerService      = writerService,
                writerProxy        = writerProxy,
                writerWCFContracts = writerContract,
                writerWCFService   = writerWCFService,
                writerWCFHost      = writerHost
            };
            #endregion outputWriters

            //Output info if in verbose
            if (bVerbose)
            {
                System.Console.WriteLine(string.Format("// IDL input path: \"{0}\"", pathArg.Arg));
                System.Diagnostics.Debug.WriteLine(string.Format("// IDL input path: \"{0}\"", pathArg.Arg));

                foreach (TextWriter textwriter in textwriters.GenTextWriters())
                {
                    if (textwriter != null)
                    {
                        System.Console.WriteLine(string.Format("// Output path: \"{0}\"", ((FileStream)((StreamWriter)textwriter).BaseStream).Name));
                        System.Diagnostics.Debug.WriteLine(string.Format("// Output path: \"{0}\"", ((FileStream)((StreamWriter)textwriter).BaseStream).Name));
                    }
                }
            }


            System.Xml.XmlReaderSettings readerSettings = new System.Xml.XmlReaderSettings();
            readerSettings.DtdProcessing    = System.Xml.DtdProcessing.Ignore;
            readerSettings.ValidationType   = ValidationType.None;
            readerSettings.ConformanceLevel = System.Xml.ConformanceLevel.Auto;
            readerSettings.CloseInput       = true;

            //Try to open the input xml file and generate the output code
            try
            {
                try
                {
                    if (pathArg.Arg != null)
                    {
                        BuildCodeFromDbusIDL(XmlReader.Create(pathArg.Arg, readerSettings), textwriters);
                    }
                }
                catch (System.IO.FileNotFoundException fne)
                {
                    System.Console.Error.WriteLine("Could not find the input file {0}", pathArg.Arg);
                    throw fne;
                }
                catch (System.UriFormatException ufe)
                {
                    System.Console.Error.WriteLine("URI Formatting exception for input file {0}", pathArg.Arg);
                    throw ufe;
                }
            }
            catch (Exception)
            {
                Environment.Exit(0);
            }

            //Close everything
            textwriters.Close();

            //If debugger attached, wait for them to tell us to quit
            if (System.Diagnostics.Debugger.IsAttached)
            {
                Console.WriteLine("Press a key to continue...");
                Console.ReadKey(true);
            }
        }
コード例 #6
0
        /// <summary>
        /// Accepts IDL input and outputs code through the given text writers
        /// </summary>
        /// <param name="interfaces">Input IDL</param>
        /// <param name="textwriters">TextWriters struct for output</param>
        public static void Generate(IEnumerable <IDLInterface> interfaces, TextWriters textwriters)
        {
            if (textwriters.writerInterface != null)
            {
                new InterfaceBuilder().Generate(interfaces, textwriters.writerInterface);
#if DEBUG
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Console.WriteLine("Interface code generated, press enter to continue...");
                    Console.ReadLine();
                }
#endif // DEBUG
            }
            if (textwriters.writerProxy != null)
            {
                new ProxyBuilder().Generate(interfaces, textwriters.writerProxy);
#if DEBUG
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Console.WriteLine("Proxy code generated, press enter to continue...");
                    Console.ReadLine();
                }
#endif // DEBUG
            }
            if (textwriters.writerService != null)
            {
                new MarshalBuilder().Generate(interfaces, textwriters.writerService);
#if DEBUG
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Console.WriteLine("Marshal code generated, press enter to continue...");
                    Console.ReadLine();
                }
#endif // DEBUG
            }
            if (textwriters.writerWCFContracts != null)
            {
                new WCFContractBuilder().Generate(interfaces, textwriters.writerWCFContracts);
#if DEBUG
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Console.WriteLine("WCF Contracts code generated, press enter to continue...");
                    Console.ReadLine();
                }
#endif // DEBUG
            }
            if (textwriters.writerWCFService != null)
            {
                // Non-passthrough version creates dbus instance at method invocation time
                //new WCFServiceBuilder().Generate(interfaces, textwriters.writerWCFService);
                new WCFPassthruServiceBuilder().Generate(interfaces, textwriters.writerWCFService);
#if DEBUG
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Console.WriteLine("WCF Service code generated, press enter to continue...");
                    Console.ReadLine();
                }
#endif // DEBUG
            }
            if (textwriters.writerWCFHost != null)
            {
                // Non-passthrough version creates dbus instance at method invocation time
                //new WCFHostBuilder().Generate(interfaces, textwriters.writerWCFHost);
                new WCFPassthruHostBuilder().Generate(interfaces, textwriters.writerWCFHost);
#if DEBUG
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    Console.WriteLine("WCF Host code generated, press enter to continue...");
                    Console.ReadLine();
                }
#endif // DEBUG
            }
        }