public async void ProcessQueuedBaskets() { log.Debug("PosManager: Process queued baskets."); while (true) { try { var basket = basketQueue.Dequeue(); await OnBasketReceived(basket); } catch (InvalidOperationException ex) { log.DebugException("PosManager: Queue is empty.", ex); break; } } }
private void ExecuteQuery(string connectionString, string queryString, Action <SqlDataReader> action, List <SqlParameter> parameters = null, bool isStoredProcedure = false) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand sqlCommand = new SqlCommand(queryString, connection)) { if (isStoredProcedure) { sqlCommand.CommandType = CommandType.StoredProcedure; } if (parameters != null) { foreach (var param in parameters) { sqlCommand.Parameters.Add(param); } } try { connection.Open(); using (SqlDataReader dataReader = sqlCommand.ExecuteReader()) { action(dataReader); dataReader.Close(); } } catch (Exception ex) { log.DebugException(string.Format("DBAccess: {0}", ex.Message), ex); throw ex; } finally { connection.Close(); } } } }
private async Task <string> SendAsync(string data, CancellationToken token) { string result = ""; bool pendingData = true; try { if (awaitaiblePeer?.RemoteTcpPeer != null) { log.Debug("TpsService: RemoteTcpPeer is not null.Encode data as bytes."); var bytes = Encoding.UTF8.GetBytes(data); log.Debug("TpsService: Send the bytes to remoteTcpPeer."); await awaitaiblePeer.RemoteTcpPeer.SendAsync(bytes, token); log.Debug("TpsService: Get the response as frame by frame."); do { var response = await awaitaiblePeer.ReadFrameAsync(token).ConfigureAwait(false); log.Debug("TpsService: Encode the response as string."); result += Encoding.UTF8.GetString(response); var trimmedResult = result.TrimEnd('\r', '\n'); if (trimmedResult.EndsWith("END-DATA")) { pendingData = false; result = trimmedResult; } } while (pendingData); } else { throw new Exception("TpsService: Problem while sending data: peer is null"); } } catch (Exception ex) { log.DebugException("TpsService: Exception: ", ex); return(""); } log.Debug("TpsService: Encoded result: {0}.", result); return(result); }
public static void Debug(this IMvxLog logger, Exception exception, string message, params object[] args) { logger.DebugException(message, exception, args); }
public FcsMessageDeserializationResult Deserialize(byte[] data) { log.Debug("FcsMessageSerializer: Deserializing Message.."); FcsMessageDeserializationResult result = new FcsMessageDeserializationResult(); int processedBytes = 0; using (MemoryStream memoryStream = new MemoryStream(data)) { BinaryReader reader = new BinaryReader(memoryStream); try { byte headerStart = reader.ReadByte(); processedBytes++; if (headerStart != 0X01) { //Todo: handle error log.Error("FcsMessageSerializer: Error in headerStart byte {0}", headerStart); } byte sequenceNumber = reader.ReadByte(); processedBytes++; byte[] bytes = reader.ReadBytes(4); processedBytes += 4; bytes = bytes.Reverse().ToArray(); int xmlLength = BitConverter.ToInt32(bytes, 0); log.Debug("FcsMessageSerializer: Seq#: {0}, XmlLength: {1}", sequenceNumber, xmlLength); bytes = reader.ReadBytes(xmlLength); processedBytes += xmlLength; string xmlMessage = System.Text.Encoding.UTF8.GetString(bytes); log.Debug("FcsMessageSerializer: Received xml message from Fcs: {0}", xmlMessage); if (xmlLength != xmlMessage.Length) { //Todo: something wrong } byte messageEnd = reader.ReadByte(); processedBytes++; if (messageEnd != 0x04) { //Todo: something wrong log.Error("FcsMessageSerializer: Message end ({0} didn't match", messageEnd); } result.IsSuccessful = true; XElement messageElement = XElement.Parse(xmlMessage); XElement commandElement = messageElement.FirstNode as XElement; if (messageElement.Name == "FCSCommand") { log.Debug("FcsMessageSerializer: Message element name:FcsCommand."); if (commandElement.Name == "Basket") { log.Debug("FcsMessageSerializer: Command element name:Basket."); FcsCommand <BasketRequest> fcsCommand = new FcsCommand <BasketRequest>(); fcsCommand.XmlCommand = commandElement; result.MessageType = FcsMessageType.BasketCommand; result.FcsMessage = fcsCommand; } else if (commandElement.Name == "Configuration") { log.Debug("FcsMessageSerializer: Command element name: Configuration"); FcsCommand <ConfigurationRequest> fcsCommand = new FcsCommand <ConfigurationRequest>(); //Todo: We need to remove this after FCS is fixed ReplaceDescendantAttributeName(commandElement, "Grade", "Type", "type"); fcsCommand.XmlCommand = commandElement; result.MessageType = FcsMessageType.ConfigurationCommand; result.FcsMessage = fcsCommand; } } else if (messageElement.Name == "FCSResponse") { log.Debug("FcsMessageSerializer: Message element name:FcsResponse."); if (commandElement.Name == "SignOnResp") { log.Debug("FcsMessageSerializer: Command element name:SignOnResp."); FcsResponse <SignOnResponse> fcsResponse = new FcsResponse <SignOnResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.SignOnResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "SignOnTPOSResp") { log.Debug("FcsMessageSerializer: Command element name:SignOnTPOSResp."); FcsResponse <SignOnTPosResponse> fcsResponse = new FcsResponse <SignOnTPosResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.SignOnTPosResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "SignOffTPOSResp") { log.Debug("FcsMessageSerializer: Command element name:SignOffTPOSResp."); FcsResponse <SignOffTPosResponse> fcsResponse = new FcsResponse <SignOffTPosResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.SignOffTPosResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "PrepayResp") { log.Debug("FcsMessageSerializer: Command element name:PrepayResp."); FcsResponse <PrepayResponse> fcsResponse = new FcsResponse <PrepayResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.PrepayResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "BasketResp") { log.Debug("FcsMessageSerializer: Command element name:BasketResp."); FcsResponse <BasketResponse> fcsResponse = new FcsResponse <BasketResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.BasketResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "SetPumpResp") { log.Debug("FcsMessageSerializer: Command element name: SetPumpResp"); FcsResponse <SetPumpResponse> fcsResponse = new FcsResponse <SetPumpResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.SetPumpResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "SetPriceResp") { log.Debug("FcsMessageSerializer: Command element name: SetPriceResp"); FcsResponse <SetPriceResponse> fcsResponse = new FcsResponse <SetPriceResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.SetPriceResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "GetReportResp") { log.Debug("FcsMessageSerializer: Command element name: GetReportResp"); FcsResponse <GetReportResponse> fcsResponse = new FcsResponse <GetReportResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.GetReportResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "GetReceiptResp") { log.Debug("FcsMessageSerializer: Command element name: GetReceiptResp"); FcsResponse <GetReceiptResponse> fcsResponse = new FcsResponse <GetReceiptResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.GetReceiptResponse; result.FcsMessage = fcsResponse; } else if (commandElement.Name == "GetReceiptDataResp") { log.Debug("FcsMessageSerializer: Command element name: GetReceiptDataResp"); FcsResponse <GetReceiptDataResponse> fcsResponse = new FcsResponse <GetReceiptDataResponse>(); fcsResponse.XmlCommand = commandElement; result.MessageType = FcsMessageType.GetReceiptDataResponse; result.FcsMessage = fcsResponse; } } else if (messageElement.Name == "FCSEvent") { log.Debug("FcsMessageSerializer: Message element name:FcsEvent."); if (commandElement.Name == "Status") { log.Debug("FcsMessageSerializer: Command element name:Status."); FcsEvent <FcsStatus> fcsEvent = new FcsEvent <FcsStatus>(); fcsEvent.XmlCommand = commandElement; result.MessageType = FcsMessageType.EventStatus; result.FcsMessage = fcsEvent; } else if (commandElement.Name == "PriceChanged") { log.Debug("FcsMessageSerializer: Command element name:PriceChanged."); FcsEvent <PriceChangedEvent> fcsEvent = new FcsEvent <PriceChangedEvent>(); fcsEvent.XmlCommand = commandElement; result.MessageType = FcsMessageType.EventPriceChanged; result.FcsMessage = fcsEvent; } else if (commandElement.Name == "Prepay") { log.Debug("FcsMessageSerializer: Command element name:Prepay."); FcsEvent <PrepayEvent> fcsEvent = new FcsEvent <PrepayEvent>(); fcsEvent.XmlCommand = commandElement; result.MessageType = FcsMessageType.EventPrepay; result.FcsMessage = fcsEvent; } } } catch (EndOfStreamException eos) { log.DebugException("FcsMessageSerializer: exception{0}.", eos); processedBytes = 0; result.IsSuccessful = false; } catch (XmlException xmlException) { log.DebugException("FcsMessageSerializer: exception{0}.", xmlException); processedBytes = 0; result.IsSuccessful = false; } } result.ByteProcessed = processedBytes; log.Debug("FcsMessageSerializer: Return DeSerialized data."); return(result); }
public override async void ViewAppeared() { log.Debug("CardRefundViewModel: View is appeared."); base.ViewAppeared(); try { SubscribeAllEvents(); IsTpsConnected = App.IsTpsConnected; IsFcsConnected = App.IsFcsConnected; if (!IsTpsConnected) { log.Debug("CardRefundViewModel: TPS is not connected.Go to tender selection page."); await NavigateToTenderSelection(); } else { log.Debug("CardRefundViewModel: TPS is connected.Process sale for refund."); double refundAmount = posManager.ActiveSale.GetAvailableRefund(); posManager.ActiveSale.TotalPaid = posManager.ActiveSale.Amount; posManager.ActiveSale.Change = refundAmount; log.Debug("CardRefundViewModel: RefundAmount: {0}, TotalPaid: {1}, Change: {2}", refundAmount, posManager.ActiveSale.TotalPaid, posManager.ActiveSale.Change); CancellationTokenSource tokenSource = new CancellationTokenSource(appSettings.DelayForTPSResponse); CancellationToken token = tokenSource.Token; log.Debug("CardRefundViewModel: Request for refund."); var response = await tpsService.RefundRequestAsync("Credit", this.pumpId, posManager.ActiveSale.InvoiceNo, refundAmount, token); if (response != null && response.RequestApproved) { log.Debug("CardRefundViewModel: RefundRequest response is not null and refund is approved."); posManager.ActiveSale.RefundStatus = Enums.RefundApprovalStatus.RefundApproved; } else if (response == null) { log.Debug("CardRefundViewModel: Task is canceled."); await this.navigationService.Close(this); } else { log.Debug("CardRefundViewModel: Refund is not approved."); posManager.ActiveSale.RefundStatus = Enums.RefundApprovalStatus.RefundNotApproved; } if (response != null) { log.Debug("CardRefundViewModel: RefundRequest response is not null.Generate and print receipt."); posManager.ActiveSale.RefundResponse = response; posManager.ActiveSale.Receipt = response.Receipt; GenerateReceipt(); await NavigateToPrintReceipt(); } } } catch (Exception ex) { log.DebugException(string.Format("CardRefundViewModel: Exception:{0} ", ex.Message), ex); } }