/// <summary>
        ///Actual claim method task that claims and enables printer instance 2 asynchronously. It then adds the releasedevicerequested event handler as well to the claimed printer.
        /// </summary>
        private async Task <bool> ClaimAndEnablePrinter2()
        {
            if (printerInstance2 == null)
            {
                rootPage.NotifyUser("Cound not claim printer. Make sure you find printer first.", NotifyType.ErrorMessage);
                return(false);
            }

            if (printerInstance1 != null && claimedPrinter2 == null)
            {
                rootPage.NotifyUser("Trying to claim instance 2.", NotifyType.StatusMessage);

                claimedPrinter2 = await printerInstance2.ClaimPrinterAsync();

                if (claimedPrinter2 != null)
                {
                    claimedPrinter2.ReleaseDeviceRequested += ClaimedPrinter2_ReleaseDeviceRequested;
                    rootPage.NotifyUser("Claimed Printer Instance 2", NotifyType.StatusMessage);
                    if (!await claimedPrinter2.EnableAsync())
                    {
                        rootPage.NotifyUser("Could not enable printer instance 2.", NotifyType.ErrorMessage);
                    }
                    else
                    {
                        return(true);
                    }
                }
                else
                {
                    rootPage.NotifyUser("Claim Printer instance 2 failed. Probably because instance 1 is holding on to it.", NotifyType.ErrorMessage);
                }
            }
            return(false);
        }
        /// <summary>
        /// Reset all instances of claimed printer and remove event handlers.
        /// </summary>
        private void ResetTheScenarioState()
        {
            IsAnImportantTransactionInstance1 = true;
            IsAnImportantTransactionInstance2 = false;
            chkInstance1.IsChecked            = true;
            chkInstance2.IsChecked            = false;

            //Remove releasedevicerequested handler and dispose claimed printer object.
            if (claimedPrinter1 != null)
            {
                claimedPrinter1.ReleaseDeviceRequested -= ClaimedPrinter1_ReleaseDeviceRequested;
                claimedPrinter1.Dispose();
                claimedPrinter1 = null;
            }

            if (claimedPrinter2 != null)
            {
                claimedPrinter2.ReleaseDeviceRequested -= ClaimedPrinter2_ReleaseDeviceRequested;
                claimedPrinter2.Dispose();
                claimedPrinter2 = null;
            }

            if (printerInstance1 != null)
            {
                printerInstance1.Dispose();
                printerInstance1 = null;
            }

            if (printerInstance2 != null)
            {
                printerInstance2.Dispose();
                printerInstance2 = null;
            }
        }
        private async Task <bool> PrintLine(string message, ClaimedPosPrinter claimedPrinter)
        {
            if (claimedPrinter == null)
            {
                rootPage.NotifyUser("Claimed printer object is null. Cannot print.", NotifyType.ErrorMessage);
                return(false);
            }

            if (claimedPrinter.Receipt == null)
            {
                rootPage.NotifyUser("No receipt printer object in claimed printer.", NotifyType.ErrorMessage);
                return(false);
            }

            ReceiptPrintJob job = claimedPrinter.Receipt.CreateJob();

            job.PrintLine(message);
            if (await job.ExecuteAsync())
            {
                rootPage.NotifyUser("Printed line", NotifyType.StatusMessage);
                return(true);
            }
            rootPage.NotifyUser("Was not able to print line", NotifyType.StatusMessage);
            return(false);
        }
 public void ReleaseClaimedPrinter()
 {
     if (ClaimedPrinter != null)
     {
         ClaimedPrinter.ReleaseDeviceRequested -= ClaimedPrinter_ReleaseDeviceRequested;
         ClaimedPrinter.Dispose();
         ClaimedPrinter = null;
         StateChanged?.Invoke();
     }
 }
 /// <summary>
 /// Default checkbox selection makes it an important transaction, hence we do not release claim when we get a release devicerequested event.
 /// </summary>
 async void ClaimedPrinter_ReleaseDeviceRequested(ClaimedPosPrinter sender, PosPrinterReleaseDeviceRequestedEventArgs args)
 {
     if (IsAnImportantTransaction)
     {
         await sender.RetainDeviceAsync();
     }
     else
     {
         ResetTheScenarioState();
     }
 }
Example #6
0
        private void ResetTheScenarioState()
        {
            //Remove releasedevicerequested handler and dispose claimed printer object.
            if (claimedPrinter != null)
            {
                claimedPrinter.ReleaseDeviceRequested -= ClaimedPrinter_ReleaseDeviceRequested;
                claimedPrinter.Dispose();
                claimedPrinter = null;
            }

            printer = null;
        }
        private void ResetTheScenarioState()
        {
            //Remove releasedevicerequested handler and dispose claimed printer object.
            if (claimedPrinter != null)
            {
                claimedPrinter.ReleaseDeviceRequested -= ClaimedPrinter_ReleaseDeviceRequested;
                claimedPrinter.Dispose();
                claimedPrinter = null;
            }

            printer = null;
        }
Example #8
0
        private ReceiptPrintJob GetCustomerFooter(ClaimedPosPrinter printer)
        {
            ReceiptPrintJob customerFooter = printer.Receipt.CreateJob();

            customerFooter.PrintLine();
            customerFooter.PrintLine("______________________");
            customerFooter.PrintLine("Tip");
            customerFooter.PrintLine();
            customerFooter.PrintLine("Customer Copy");
            LineFeedAndCutPaper(customerFooter);

            return(customerFooter);
        }
Example #9
0
 async void ClaimedPrinter2_ReleaseDeviceRequested(ClaimedPosPrinter sender, PosPrinterReleaseDeviceRequestedEventArgs args)
 {
     if (IsAnImportantTransactionInstance2)
     {
         await sender.RetainDeviceAsync();
     }
     else
     {
         claimedPrinter2.ReleaseDeviceRequested -= ClaimedPrinter2_ReleaseDeviceRequested;
         claimedPrinter2.Dispose();
         claimedPrinter2 = null;
     }
 }
 /// <summary>
 /// Releases claim of printer instance 1
 /// </summary>
 void Release1_Click(object sender, RoutedEventArgs e)
 {
     if (claimedPrinter1 != null)
     {
         claimedPrinter1.ReleaseDeviceRequested -= ClaimedPrinter1_ReleaseDeviceRequested;
         claimedPrinter1.Dispose();
         claimedPrinter1 = null;
         rootPage.NotifyUser("Released claimed Instance 1", NotifyType.StatusMessage);
     }
     else
     {
         rootPage.NotifyUser("Instance 1 not claimed to release", NotifyType.StatusMessage);
     }
 }
Example #11
0
 /// <summary>
 /// Releases claim of printer instance 2
 /// </summary>
 void Release2_Click(object sender, RoutedEventArgs e)
 {
     if (claimedPrinter2 != null)
     {
         claimedPrinter2.ReleaseDeviceRequested -= ClaimedPrinter2_ReleaseDeviceRequested;
         claimedPrinter2.Dispose();
         claimedPrinter2 = null;
         rootPage.NotifyUser("Released claimed Instance 2", NotifyType.StatusMessage);
     }
     else
     {
         rootPage.NotifyUser("Instance 2 not claimed to release", NotifyType.StatusMessage);
     }
 }
 /// <summary>
 /// If the "Retain device" checkbox is checked, we retain the device.
 /// Otherwise, we allow the other claimant to claim the device.
 /// </summary>
 private async void ClaimedPrinter_ReleaseDeviceRequested(ClaimedPosPrinter sender, PosPrinterReleaseDeviceRequestedEventArgs args)
 {
     if (IsAnImportantTransaction)
     {
         await sender.RetainDeviceAsync();
     }
     else
     {
         await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
         {
             NotifyUser("Lost printer claim.", NotifyType.ErrorMessage);
             ReleaseClaimedPrinter();
         });
     }
 }
Example #13
0
        private ReceiptPrintJob GetMerchantFooter(ClaimedPosPrinter printer)
        {
            ReceiptPrintJob merchantFooter = printer.Receipt.CreateJob();

            merchantFooter.PrintLine();
            merchantFooter.PrintLine("______________________");
            merchantFooter.PrintLine("Tip");
            merchantFooter.PrintLine();
            merchantFooter.PrintLine("______________________");
            merchantFooter.PrintLine("Signature");
            merchantFooter.PrintLine();
            merchantFooter.PrintLine("Merchant Copy");
            LineFeedAndCutPaper(merchantFooter);

            return(merchantFooter);
        }
        /// <summary>
        /// Actual claim method task that claims the printer asynchronously
        /// </summary>
        private async Task <bool> ClaimPrinter()
        {
            if (claimedPrinter == null)
            {
                claimedPrinter = await printer.ClaimPrinterAsync();

                if (claimedPrinter != null)
                {
                    rootPage.NotifyUser("Claimed Printer", NotifyType.StatusMessage);
                }
                else
                {
                    rootPage.NotifyUser("Claim Printer failed", NotifyType.ErrorMessage);
                    return(false);
                }
            }
            return(true);
        }
        async void ClaimedPrinter1_ReleaseDeviceRequested(ClaimedPosPrinter sender, PosPrinterReleaseDeviceRequestedEventArgs args)
        {
            if (IsAnImportantTransactionInstance1)
            {
                await sender.RetainDeviceAsync();
            }
            else
            {
                claimedPrinter1.ReleaseDeviceRequested -= ClaimedPrinter1_ReleaseDeviceRequested;
                claimedPrinter1.Dispose();
                claimedPrinter1 = null;

                if (printerInstance1 != null)
                {
                    printerInstance1.Dispose();
                    printerInstance1 = null;
                }
            }
        }
        /// <summary>
        /// Releases claim of printer instance 1
        /// </summary>
        void Release1_Click(object sender, RoutedEventArgs e)
        {
            if (claimedPrinter1 != null)
            {
                claimedPrinter1.ReleaseDeviceRequested -= ClaimedPrinter1_ReleaseDeviceRequested;
                claimedPrinter1.Dispose();
                claimedPrinter1 = null;

                if (printerInstance1 != null)
                {
                    printerInstance1.Dispose();
                    printerInstance1 = null;
                }

                rootPage.NotifyUser("Released claimed Instance 1", NotifyType.StatusMessage);
            }
            else
            {
                rootPage.NotifyUser("Instance 1 not claimed to release", NotifyType.StatusMessage);
            }
        }
 public ClaimedPosPrinterEvents(ClaimedPosPrinter This)
 {
     this.This = This;
 }
 /// <summary>
 /// Actual claim method task that claims the printer asynchronously
 /// </summary>
 private async Task<bool> ClaimPrinter()
 {
     if (claimedPrinter == null)
     {
         claimedPrinter = await printer.ClaimPrinterAsync();
         if (claimedPrinter != null)
         {
             claimedPrinter.ReleaseDeviceRequested += ClaimedPrinter_ReleaseDeviceRequested;
             rootPage.NotifyUser("Claimed Printer", NotifyType.StatusMessage);
         }
         else
         {
             rootPage.NotifyUser("Claim Printer failed", NotifyType.ErrorMessage);
             return false;
         }
     }
     return true;
 }
        private ReceiptPrintJob GetMerchantFooter(ClaimedPosPrinter printer)
        {
            ReceiptPrintJob merchantFooter = printer.Receipt.CreateJob();
            merchantFooter.PrintLine();
            merchantFooter.PrintLine("______________________");
            merchantFooter.PrintLine("Tip");
            merchantFooter.PrintLine();
            merchantFooter.PrintLine("______________________");
            merchantFooter.PrintLine("Signature");
            merchantFooter.PrintLine();
            merchantFooter.PrintLine("Merchant Copy");
            merchantFooter.CutPaper();

            return merchantFooter;
        }
        private ReceiptPrintJob GetCustomerFooter(ClaimedPosPrinter printer)
        {
            ReceiptPrintJob customerFooter = printer.Receipt.CreateJob();
            customerFooter.PrintLine();
            customerFooter.PrintLine("______________________");
            customerFooter.PrintLine("Tip");
            customerFooter.PrintLine();
            customerFooter.PrintLine("Customer Copy");
            customerFooter.CutPaper();

            return customerFooter;
        }
 /// <summary>
 /// Default checkbox selection makes it an important transaction, hence we do not release claim when we get a release devicerequested event.
 /// </summary>
 async void ClaimedPrinter_ReleaseDeviceRequested(ClaimedPosPrinter sender, PosPrinterReleaseDeviceRequestedEventArgs args)
 {
     if (IsAnImportantTransaction)
     {
         await sender.RetainDeviceAsync();
     }
     else
     {
         ResetTheScenarioState();
     }
 }
        /// <summary>
        ///Actual claim method task that claims and enables printer instance 2 asynchronously. It then adds the releasedevicerequested event handler as well to the claimed printer.
        /// </summary>
        private async Task<bool> ClaimAndEnablePrinter2()
        {
            if (printerInstance2 == null)
            {
                rootPage.NotifyUser("Cound not claim printer. Make sure you find printer first.", NotifyType.ErrorMessage);
                return false;
            }

            if (printerInstance1 != null && claimedPrinter2 == null)
            {
                rootPage.NotifyUser("Trying to claim instance 2.", NotifyType.StatusMessage);

                claimedPrinter2 = await printerInstance2.ClaimPrinterAsync();
                if (claimedPrinter2 != null)
                {
                    claimedPrinter2.ReleaseDeviceRequested += ClaimedPrinter2_ReleaseDeviceRequested;
                    rootPage.NotifyUser("Claimed Printer Instance 2", NotifyType.StatusMessage);
                    if (!await claimedPrinter2.EnableAsync())
                    {
                        rootPage.NotifyUser("Could not enable printer instance 2.", NotifyType.ErrorMessage);
                    }
                    else
                    {
                        return true;
                    }
                }
                else
                {
                    rootPage.NotifyUser("Claim Printer instance 2 failed. Probably because instance 1 is holding on to it.", NotifyType.ErrorMessage);
                }
            }
            return false;
        }
        /// <summary>
        /// Reset all instances of claimed printer and remove event handlers.
        /// </summary>
        private void ResetTheScenarioState()
        {
            IsAnImportantTransactionInstance1 = true;
            IsAnImportantTransactionInstance2 = false;
            chkInstance1.IsChecked = true;
            chkInstance2.IsChecked = false;

            //Remove releasedevicerequested handler and dispose claimed printer object.
            if (claimedPrinter1 != null)
            {
                claimedPrinter1.ReleaseDeviceRequested -= ClaimedPrinter1_ReleaseDeviceRequested;
                claimedPrinter1.Dispose();
                claimedPrinter1 = null;
            }

            if (claimedPrinter2 != null)
            {
                claimedPrinter2.ReleaseDeviceRequested -= ClaimedPrinter2_ReleaseDeviceRequested;
                claimedPrinter2.Dispose();
                claimedPrinter2 = null;
            }
            printerInstance1 = null;
            printerInstance2 = null;
        }
        private async Task<bool> PrintLine(string message, ClaimedPosPrinter claimedPrinter)
        {
            if (claimedPrinter == null)
            {
                rootPage.NotifyUser("Claimed printer object is null. Cannot print.", NotifyType.ErrorMessage);
                return false;
            }

            if (claimedPrinter.Receipt == null)
            {
                rootPage.NotifyUser("No receipt printer object in claimed printer.", NotifyType.ErrorMessage);
                return false;
            }

            ReceiptPrintJob job = claimedPrinter.Receipt.CreateJob();
            job.PrintLine(message);
            if (await job.ExecuteAsync())
            {
                rootPage.NotifyUser("Printed line", NotifyType.StatusMessage);
                return true;
            }
            rootPage.NotifyUser("Was not able to print line", NotifyType.StatusMessage);
            return false;
        }
 async void ClaimedPrinter2_ReleaseDeviceRequested(ClaimedPosPrinter sender, PosPrinterReleaseDeviceRequestedEventArgs args)
 {
     if (IsAnImportantTransactionInstance2)
     {
         await sender.RetainDeviceAsync();
     }
     else
     {
         claimedPrinter2.ReleaseDeviceRequested -= ClaimedPrinter2_ReleaseDeviceRequested;
         claimedPrinter2.Dispose();
         claimedPrinter2 = null;
     }
 }