Example #1
0
        /// <summary>
        /// repeatedly check job status until the job is complete - failed or not.
        /// </summary>
        public static void PollForJobCompletion(BidiSplWrap bidiSpl, int printerJobID)
        {
            const int pollSleepMilliseconds = 2000;

            while (true)
            {
                string printerStatusXML = bidiSpl.GetPrinterData(strings.PRINTER_MESSAGES);
                PrinterStatusValues printerStatusValues = Util.ParsePrinterStatusXML(printerStatusXML);

                if ((0 != printerStatusValues._errorCode) && (printerJobID == printerStatusValues._printerJobID))
                {
                    string message = string.Format("{0} severity: {1}", printerStatusValues._errorString, printerStatusValues._errorSeverity);
                    throw new BidiException(message, printerStatusValues._printerJobID, printerStatusValues._errorCode);
                }

                string          jobStatusRequest = strings.JOB_STATUS_XML;
                string          jobInfoXML       = string.Format(jobStatusRequest, printerJobID);
                string          jobStatusXML     = bidiSpl.GetPrinterData(strings.JOB_STATUS, jobInfoXML);
                JobStatusValues jobStatusValues  = Util.ParseJobStatusXML(jobStatusXML);

                Console.WriteLine("Printer job ID: {0} {1}", printerJobID, jobStatusValues._jobState);

                if (strings.JOB_ACTIVE != jobStatusValues._jobState)
                {
                    return;
                }

                Thread.Sleep(pollSleepMilliseconds);
            }
        }
Example #2
0
        /// <summary>
        /// repeatedly get the printer status until with printer status contains
        /// a valid windows jobID.
        /// </summary>
        /// <returns>zero if any error detected, or the windows jobID</returns>
        public static int WaitForWindowsJobID(BidiSplWrap bidiSpl, string printerName)
        {
            const int sleepMilliSeconds = 1000;

            var printerStatusXML = bidiSpl.GetPrinterData(strings.PRINTER_MESSAGES);
            var printerStatus    = Util.ParsePrinterStatusXML(printerStatusXML);

            do
            {
                if (0 != printerStatus._windowsJobID)
                {
                    Console.WriteLine(string.Format("returning windowsJobID {0}.", printerStatus._windowsJobID));
                    return(printerStatus._windowsJobID);
                }

                Console.WriteLine(string.Format("waiting {0} millseconds for windows jobID", sleepMilliSeconds));
                Thread.Sleep(sleepMilliSeconds);

                printerStatusXML = bidiSpl.GetPrinterData(strings.PRINTER_MESSAGES);
                printerStatus    = Util.ParsePrinterStatusXML(printerStatusXML);
            } while (0 == printerStatus._errorCode);

            Console.WriteLine("printer error:");
            Console.WriteLine(printerStatusXML);

            return(0);
        }
Example #3
0
        public static String[] ReadMagstripe(BidiSplWrap bidiSpl, bool jisRequest)
        {
            String[] magData = new String[3];
            // replace schema string MAGSTRIPE_READ to MAGSTRIPE_READ_FRONT for front side read
            string printerStatusXML = bidiSpl.GetPrinterData(strings.MAGSTRIPE_READ);

            PrinterStatusValues printerStatusValues = Util.ParsePrinterStatusXML(printerStatusXML);

            if (0 == printerStatusValues._errorCode)
            {
                // Console.WriteLine("Magstripe data read successfully; printer job id: " + printerStatusValues._printerJobID);



                string track1 = "";
                string track2 = "";
                string track3 = "";

                Util.ParseMagstripeStrings(printerStatusXML, ref track1, ref track2, ref track3, jisRequest);

                bidiSpl.SetPrinterData(strings.ENDJOB);
                if (track1.Length != 0)
                {
                    // Convert the Base64 UUEncoded output.
                    byte[] binaryData = System.Convert.FromBase64String(track1);
                    string str        = System.Text.Encoding.UTF8.GetString(binaryData);
                    magData[0] = str;
                }

                if (track2.Length != 0)
                {
                    // Convert the Base64 UUEncoded output.
                    byte[] binaryData = System.Convert.FromBase64String(track2);
                    string str        = System.Text.Encoding.UTF8.GetString(binaryData);
                    magData[1] = str;
                }

                if (track3.Length != 0)
                {
                    // Convert the Base64 UUEncoded output.
                    byte[] binaryData = System.Convert.FromBase64String(track3);
                    string str        = System.Text.Encoding.UTF8.GetString(binaryData);
                    magData[2] = str;
                }
            }
            else
            {
                throw new BidiException(printerStatusValues._errorString, printerStatusValues._printerJobID, printerStatusValues._errorCode);
            }

            return(magData);
        }
Example #4
0
        /// <summary>
        ///
        /// Issue an IBidi StartJob with xml markup to start an IBidi print job.
        ///
        /// We do this to have the printer check for supplies, or, just to obtain the
        /// printerJobID for job completion polling later.
        ///
        /// If the printer is out of supplies, throw an exception.
        ///
        /// </summary>
        public static int StartJob(
            BidiSplWrap bidiSpl,
            bool checkSupplies,
            string hopperID)
        {
            const int pollSleepMilliseconds = 2000;

            int printerJobID = 0;

            do
            {
                string printerOptionsXML = bidiSpl.GetPrinterData(strings.PRINTER_OPTIONS2);
                PrinterOptionsValues printerOptionsValues = Util.ParsePrinterOptionsXML(printerOptionsXML);

                int checkPrintRibbon    = (printerOptionsValues._printHead == "Installed") ? 1 : 0;
                int checkEmbossSupplies = printerOptionsValues._moduleEmbosser == "None" ? 0 : 1;

                string startJobXml = string.Format(
                    strings.STARTJOB_XML,
                    hopperID,
                    checkPrintRibbon,
                    checkEmbossSupplies);

                string printerStatusXML = bidiSpl.SetPrinterData(strings.STARTJOB, startJobXml);
                PrinterStatusValues printerStatusValues = Util.ParsePrinterStatusXML(printerStatusXML);

                if (506 == printerStatusValues._errorCode)
                {
                    // Printer cannot accept another job as it is busy. Try again.
                    Console.WriteLine("StartJob(): {0} Trying again.", printerStatusValues._errorString);

                    // let the current card process in the printer:
                    Thread.Sleep(pollSleepMilliseconds);
                }
                else if (0 != printerStatusValues._errorCode)
                {
                    var message = string.Format("StartJob(): {0} {1}",
                                                printerStatusValues._errorCode,
                                                printerStatusValues._errorString);
                    throw new BidiException(message, printerStatusValues._printerJobID, printerStatusValues._errorCode);
                }
                else
                {
                    Console.WriteLine("Printer job ID: {0} started.", printerStatusValues._printerJobID);
                    printerJobID = printerStatusValues._printerJobID;
                }
            } while (0 == printerJobID);

            return(printerJobID);
        }