コード例 #1
0
    public static int Main()
    {
        /*
         * User Configuration Area
         */
        string authToken = "Password for Builtin User or API Key"; //Password of the internal Administrative user for papercut or the XML API Key if set
        string server = "localhost"; //URL of the papercut server ie. papercut.localDomain.edu or 172.2.21.5
        int port = 9191; //Standard application server port is 9191
        string printerName = "Virtual-Queue-on-Printserver"; //This should be the name of the Queue in papercut that controls the cost and permissions.
        string printerServer = "Printserver"; //This is the the name of the print server the fake print queue is sitting on to configure costs.

        /*
         * Non-User Area Below
         */

        // Creates a Server Command Proxy, provided by the Papercut.
        string user = Environment.UserName; //Windows Username of the currently logged in user.
        string computerName = Environment.MachineName;
        ServerCommandProxy serverProxy = new ServerCommandProxy(server, port, authToken);

        try {
            //Test to see if User Exists
            if (!serverProxy.UserExists(user))
            {
                // User does not exist! Explain and exit returning 1
                Console.WriteLine("I'm sorry but this user does not exist in the chargeback system. Please ensure you are registered for printing.");
                return 1;
            }
            //Test to see if user printing is disabled
            if (Boolean.Parse(serverProxy.GetUserProperty(user, "disabled-print")))
            {
                 Console.WriteLine("I'm sorry but your print account is disabled. Please ensure you are registered for printing.");
                 return 2;
            }
            //Test to see if user can afford the print
            if(Boolean.Parse(serverProxy.GetUserProperty(user, "restricted"))){
                    // Account is restricted, make sure that it has money for the print
                    double printerCost = serverProxy.GetPrinterCostSimple(printerServer, printerName); // Get the user's account balance to see if they are able to afford the print
                        if (serverProxy.AdjustUserAccountBalanceIfAvailable(user, -1 * printerCost, "Test Charge for " + printerServer + "\\" + printerName, ""))
                        {
                            serverProxy.AdjustUserAccountBalance(user, printerCost, "Test Charge for " + printerServer + "\\" + printerName, "");
                        }
                        else
                        {
                            Console.WriteLine("I'm sorry but this user does not have enough money for this print on their account.");
                            return 3;
                        }
                    }
              //Charge User for the Print Job
              string printjob = "user="******",server=" + server + ",printer=" + printerName + ",client-machine=" + computerName + ",server=" + printerServer; // This assembles a string of information to submit the printjob
              serverProxy.ProcessJob(printjob); // Sends the formatted print job
              return 0; // job was charged. Success!

        } catch (XmlRpcFaultException fex) {
            Console.WriteLine("Fault: {0}, {1}", fex.FaultCode, fex.FaultString);
            return -1;
        }
    }