json server for js
[public/pos.git] / database / client.cpp
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <thrift/protocol/TBinaryProtocol.h>
4 #include <thrift/transport/TSocket.h>
5 #include <thrift/transport/TTransportUtils.h>
6 #include "Pos.h"
7 #include "sha1.h"
8 #include <iostream>
9
10 using namespace std;
11 using namespace apache::thrift;
12 using namespace apache::thrift::protocol;
13 using namespace apache::thrift::transport;
14
15 using namespace pos;
16
17 using namespace boost;
18
19 int main(int argc, char** argv) {
20   if (argc != 2) {
21     cout << "Usage: client <host>\n";
22     exit(1);
23   }
24   shared_ptr<TTransport> socket(new TSocket(argv[1], 9090));
25   shared_ptr<TTransport> transport(new TFramedTransport(socket));
26   shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
27   PosClient client(protocol);
28
29   try {
30     transport->open();
31   } catch(TException & e) {
32     std::cerr << e.what() << "\n";
33   }
34
35   string s;
36   std::cout << "(0) Exit\n"
37                "(1) Add card to member\n"
38                "(2) Register new product\n"
39                "(3) Buy a product\n"
40                "(4) Deposit money\n"
41                "(5) Print balance\n"
42                "(6) Set price of product\n";
43   while(1) {
44     cout << "> ";
45     uint32_t in;
46     std::cin >> in;
47     switch(in) {
48       case 0: exit(0);
49       case 1: {
50         string user, card;
51         cout << "Username: ";
52         cin >> user;
53         cout << "Swipe card: ";
54         getline(cin,s);
55         getline(cin,card);
56         client.getSalt(s);
57         s = SHA1Hash(s+"PSK").toHex();
58         client.associateHashWithName(s, card, user);
59         break;
60       }
61       case 2: {
62         uint64_t upc;
63                 cout << "UPC: ";
64                 cin >> upc;
65
66                 int32_t price;
67                 cout << "price: ";
68                 cin >> price;
69
70                 client.getSalt(s);
71                 s = SHA1Hash(s+"PSK").toHex();
72                 client.setUPCPrice(s, upc, price);
73         break;
74       }
75       case 3: {
76         string user;
77         uint64_t upc;
78         cout << "UPC: ";
79         cin >> upc;
80         int32_t price = client.getUPCPrice(upc);
81         cout << "\tThe price is " << (double)price/100.0 << "\n";
82         cout << "Username: ";
83         cin >> user;
84         int32_t balance = client.getNameAccountBalance(user);
85         if (balance > price) {
86           cout << "\tYour balance is " << (double)balance/100.0 << ", buying... \n";
87         } else {
88           cout << "Insufficient balance!\n";
89           break;
90         }
91         client.getSalt(s);
92         s = SHA1Hash(s+"PSK").toHex();
93         client.doTransactionOnName(s, user, -price);
94         client.getSalt(s);
95         s = SHA1Hash(s+"PSK").toHex();
96         client.doStockChange(s, upc, -1);
97         balance = client.getNameAccountBalance(user);
98         cout << "\tNew balance is " << (double)balance/100.0f << ".\n";
99         break;
100       }
101       case 4: {
102         string user;
103         double delta; //lol
104         cout << "Username: ";
105         cin >> user;
106         cout << "Amount to change balance by in dollars: ";
107         cin >> delta;
108         client.getSalt(s);
109         s = SHA1Hash(s+"PSK").toHex();
110         client.doTransactionOnName(s, user, (int)(100.0*delta));
111         break;
112       }
113       case 5: {
114         string user;
115         cout << "Username: ";
116         cin >> user;
117         cout << "$" << ((double)client.getNameAccountBalance(user))/100.0 << "\n";
118         break;
119       }
120       case 6: {
121         double f;
122         uint64_t upc;
123         cout << "UPC: ";
124         cin >> upc;
125         cout << "Price: ";
126         cin >> f;
127         client.getSalt(s);
128         s = SHA1Hash(s+"PSK").toHex();
129         client.setUPCPrice(s, upc, (int32_t)(f*100.0));
130         break;
131       }
132     }
133     cout <<"\n";
134   }
135
136
137
138   for (uint32_t i =0; i < 5000; i++) {
139     std::string s;
140     client.getSalt(s);
141     s = SHA1Hash(s + "PSK").toHex();
142     client.doTransactionOnName(s, "j3parker", 1);
143   }
144
145
146   cout << "j3parker balance: " << client.getNameAccountBalance("j3parker") << "\n";
147   cout << "m4burns balance: " << client.getNameAccountBalance("m4burns") << "\n";
148
149   return 0;
150 }
151