cash2ecash

cash2ecash: cash acceptor that issues digital cash (experimental)
Log | Files | Refs | Submodules | README | LICENSE

bankCommunication.hpp (2080B)


      1 #ifndef BANK_COMMUNICATION_H
      2 #define BANK_COMMUNICATION_H
      3 
      4 #include "bank_lib.h"
      5 #include "global.hpp"
      6 #include <cstdlib>
      7 #include <cstring>
      8 #include <iostream>
      9 #include <ostream>
     10 #include <thread>
     11 
     12 class BankCommunication{
     13   private:
     14 
     15   static const char *status;
     16 
     17   static void initCallback(){
     18     event(EVENT_BANK_TOKEN_DONE);
     19   }
     20   
     21   static void withdrawalRequestCallback(){
     22     event(EVENT_BANK_WITHDRAWAL_DONE);
     23   }
     24 
     25   static void withdrawalConfirmRequestCallback(){
     26     event(EVENT_BANK_W_CONFIRMATION_DONE);
     27   }
     28 
     29   static void withdrawalIDInfoRequestCallback(){
     30     if  (0 == std::strcmp(status, "pending")){
     31       event(EVENT_BANK_W_STATUS_PENDING);
     32     }else if (0 == std::strcmp(status, "selected")) {
     33       event(EVENT_BANK_W_STATUS_SELECTED);
     34     }else if (0 == std::strcmp(status, "aborted")) {
     35       event(EVENT_BUTTON_ABORT);
     36     }else{
     37       std::cerr << "Unexpected Withdrawal Staus: " << status << std::endl;
     38       exit(EXIT_FAILURE);
     39     }
     40   }
     41   
     42   protected:
     43   public:
     44     void init(){
     45       std::thread threadInit(&bankCommunicationInit, initCallback);
     46       threadInit.detach();
     47   }
     48 
     49   void withdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, bool *noAmountToWallet, const char **res_withdrawal_id, const char **res_taler_withdraw_uri){
     50     std::thread threadWithdrawalRequest(&bankCommunicationWithdrawalRequest, amount, suggestedAmount, noAmountToWallet, res_withdrawal_id, res_taler_withdraw_uri, withdrawalRequestCallback);
     51     threadWithdrawalRequest.detach();
     52   }
     53 
     54   void withdrawalConfirmRequest(const char *withdrawal_id, struct TALER_Amount *amount){
     55     std::thread threadWithdrawalConfirmRequest(&bankCommunicationWithdrawalConfirmRequest, withdrawal_id, amount, withdrawalConfirmRequestCallback);
     56     threadWithdrawalConfirmRequest.detach();
     57   }
     58 
     59   void withrawalStatusRequest(const char *withdrawal_id){
     60     std::thread threadWithdrawalStatusRequest(&bankCommunicationWithdrawalIDInfoRequest, withdrawal_id, &status, withdrawalIDInfoRequestCallback);
     61     threadWithdrawalStatusRequest.detach();
     62   }
     63 };
     64 
     65 #endif