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