This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 //Banking Application Server\r
2 \r
3 /* Startup object is generated with the initialstate flag set by the\r
4  *  system to start the computation up */\r
5 \r
6 task Startup(StartupObject s{initialstate})\r
7 {\r
8     System.printString("Starting\n");\r
9     ServerSocket ss = new ServerSocket(8080);\r
10     System.printString("Creating ServerSocket\n");\r
11         BankDatabase Bank = new BankDatabase(){DatabaseInit};\r
12     taskexit(s{!initialstate}); /* Turns initial state flag off, so this task won't refire */\r
13 }\r
14 \r
15 task AcceptConnection(ServerSocket ss{SocketPending})\r
16 {\r
17     BankAppSocket bas = new BankAppSocket(){BASocketInit};\r
18         ss.accept(bas);\r
19     System.printString("Connected\n");\r
20 }\r
21 \r
22 //i think this task could probably be broken up into smaller tasks\r
23 task ProcessRequest(BankAppSocket bas{IOPending && BASocketInit}, BankDatabase Bank{DatabaseInit})\r
24 {\r
25         String message = new String(bas.receive());\r
26         //System.printString(message);\r
27         \r
28         //login\r
29         if(message.startsWith("1"))\r
30         {\r
31                 String account = message.subString(1, 10);\r
32                 String pin = message.subString(10, 14);\r
33                 \r
34                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
35                 {\r
36                         if(Bank.database[i].AccountNumber.equals(account) && Bank.database[i].PIN.equals(pin))\r
37                         {\r
38                                 bas.send("Login OK");\r
39                                 //System.printString("Login OK");\r
40                         }\r
41                         else\r
42                         {\r
43                                 bas.send("Login Error");\r
44                                 //System.printString("Login Error");\r
45                         }\r
46                 }\r
47         }\r
48         //logout\r
49         else if(message.startsWith("2"))\r
50         {\r
51                 String account = message.subString(1, 10);\r
52                 \r
53                 //find the account\r
54                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
55                 {\r
56                         if(Bank.database[i].AccountNumber.equals(account))\r
57                         {\r
58                                 bas.send("Logout OK");\r
59                                 //System.printString("Logout OK");\r
60                         }\r
61                         else\r
62                         {\r
63                                 bas.send("Logout Error");\r
64                                 //System.printString("Logout Error");\r
65                         }\r
66                 }\r
67         }\r
68         //create\r
69         else if(message.startsWith("3"))\r
70         {\r
71                 String account = message.subString(1, 10);\r
72                 String first = message.subString(10, 20);\r
73                 String middle = message.subString(20, 30);\r
74                 String last = message.subString(30, 40);\r
75                 String type = message.subString(40, 41);\r
76                 String balance = message.subString(41, 51);\r
77                 String pin = message.subString(51, 55);\r
78                 \r
79                 //find first empty space\r
80                 int id = -1;\r
81                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
82                 {\r
83                         if(Bank.database[i].AccountNumber.equals("@@@@@@@@@"))\r
84                                 id = i;\r
85                 }\r
86                 \r
87                 if(id != -1)\r
88                 {\r
89                         //should check for input errors first but...\r
90                         Bank.database[id].AccountNumber = first;\r
91                         Bank.database[id].FirstName = middle;\r
92                         Bank.database[id].MiddleName = last;\r
93                         Bank.database[id].LastName = last;\r
94                         Bank.database[id].AccountType = type;\r
95                         Bank.database[id].Balance = balance;\r
96                         Bank.database[id].PIN = pin;\r
97                 \r
98                         Bank.numOfAccounts++;\r
99                 \r
100                         bas.send(Bank.database[id].AccountNumber);\r
101                         //System.printString(Bank.database[id].AccountNumber);\r
102                 }\r
103                 else\r
104                 {\r
105                         bas.send("Create Error");\r
106                         //System.printString("Create Error");\r
107                 }\r
108         }\r
109         //delete\r
110         else if(message.startsWith("4"))\r
111         {\r
112                 String account = message.subString(1, 10);\r
113                 \r
114                 //find the account\r
115                 int id = -1;\r
116                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
117                 {\r
118                         if(Bank.database[i].AccountNumber.equals(account))\r
119                                 id = i;\r
120                 }\r
121                 \r
122                 if(id != -1)\r
123                 {\r
124                         Bank.database[id].AccountNumber = "@@@@@@@@@@";\r
125                         Bank.database[id].FirstName = "@@@@@@@@@@";\r
126                         Bank.database[id].MiddleName = "@@@@@@@@@@";\r
127                         Bank.database[id].LastName = "@@@@@@@@@@";\r
128                         Bank.database[id].AccountType = "@";\r
129                         Bank.database[id].Balance = "@@@@@@@@@@";\r
130                         Bank.database[id].PIN = "@@@@";\r
131                         Bank.numOfAccounts--;\r
132                         \r
133                         bas.send("Close Account OK");\r
134                         //System.printString("Close Account OK");\r
135                 }\r
136                 else\r
137                 {\r
138                         bas.send("Close Account Error");\r
139                         //System.printString("Close Account Error");\r
140                 }\r
141         }\r
142         //modify\r
143         else if(message.startsWith("5"))\r
144         {\r
145                 String account = message.subString(1, 10);\r
146                 String field = message.subString(10, 11);\r
147                 //two digits 00-99\r
148                 String numBytes = message.subString(11, 13);\r
149                 String data = message.subString(13, 13 + Integer.parseInt(numBytes));\r
150                 \r
151                 //find the account\r
152                 int id = -1;\r
153                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
154                 {\r
155                         if(Bank.database[i].AccountNumber.equals(account))\r
156                                 id = i;\r
157                 }\r
158                 \r
159                 if(id != -1)\r
160                 {\r
161                         //maybe shouldn't allow changes to some of these fields\r
162                         if(field.equals("1"))\r
163                         {\r
164                                 Bank.database[id].AccountNumber = data;\r
165                         }\r
166                         else if(field.equals("2"))\r
167                         {\r
168                                 Bank.database[id].FirstName = data;\r
169                         }\r
170                         else if(field.equals("3"))\r
171                         {\r
172                                 Bank.database[id].MiddleName = data;\r
173                         }\r
174                         else if(field.equals("4"))\r
175                         {\r
176                                 Bank.database[id].LastName = data;\r
177                         }\r
178                         else if(field.equals("5"))\r
179                         {\r
180                                 Bank.database[id].AccountType = data;\r
181                         }\r
182                         else if(field.equals("6"))\r
183                         {\r
184                                 Bank.database[id].Balance = data;\r
185                         }\r
186                         else if(field.equals("7"))\r
187                         {\r
188                                 Bank.database[id].PIN = data;\r
189                         }\r
190                         \r
191                         bas.send("Modify OK");\r
192                         //System.printString("Modify OK");\r
193                 }\r
194                 else\r
195                 {\r
196                         bas.send("Modify Error");\r
197                         //System.printString("Modify Error");\r
198                 }\r
199         }\r
200         //check account info\r
201         else if(message.startsWith("6"))\r
202         {\r
203                 String account = message.subString(1, 10);\r
204                 \r
205                 //find the account\r
206                 int id = -1;\r
207                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
208                 {\r
209                         if(Bank.database[i].AccountNumber.equals(account))\r
210                                 id = i;\r
211                 }\r
212                 \r
213                 if(id != -1)\r
214                 {\r
215                         StringBuffer strBuffer = new StringBuffer(Bank.database[id].AccountNumber);\r
216                         strBuffer.append(Bank.database[id].FirstName);\r
217                         strBuffer.append(Bank.database[id].MiddleName);\r
218                         strBuffer.append(Bank.database[id].LastName);\r
219                         strBuffer.append(Bank.database[id].AccountType);\r
220                         strBuffer.append(Bank.database[id].Balance);\r
221                         strBuffer.append(Bank.database[id].PIN);\r
222                 \r
223                         bas.send(strBuffer.toString());\r
224                         //System.printString(strBuffer.toString());\r
225                 }\r
226                 else\r
227                 {\r
228                         bas.send("Check Account Info Error");\r
229                         //System.printString("Check Account Info Error");\r
230                 }\r
231         \r
232         }\r
233         //deposit\r
234         //more string operations or a Float Object could be useful here \r
235         else if(message.startsWith("7"))\r
236         {\r
237                 String account = message.subString(1, 10);\r
238                 //two digits 00-99\r
239                 //dollar part only\r
240                 String numBytes = message.subString(10, 12);\r
241                 //get dollars\r
242                 String data = message.subString(12, 12 + Integer.parseInt(numBytes));\r
243                         \r
244                 \r
245                 //find the account\r
246                 int id = -1;\r
247                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
248                 {\r
249                         if(Bank.database[i].AccountNumber.equals(account))\r
250                                 id = i;\r
251                 }\r
252                 \r
253                 if(id != -1)\r
254                 {       \r
255                         Integer sum = new Integer(Integer.parseInt(Bank.database[id].Balance) + Integer.parseInt(data));\r
256                         \r
257                         StringBuffer sumBuffer = new StringBuffer(sum.toString());\r
258                         \r
259                         int padding = 10 - sumBuffer.length();\r
260                         \r
261                         for(int i = 0; i < padding; i++)\r
262                         {\r
263                                 sumBuffer.append("@");\r
264                         }\r
265                         \r
266                         //assumes no overflow\r
267                         Bank.database[id].Balance = sumBuffer.toString();\r
268                         \r
269                         bas.send("Deposit OK");\r
270                         //System.printString("Deposit OK");\r
271                 }\r
272                 else\r
273                 {\r
274                         bas.send("Deposit Error");\r
275                         //System.printString("Deposit Error");\r
276                 }\r
277         }\r
278         //withdraw\r
279         else if(message.startsWith("8"))\r
280         {\r
281                 String account = message.subString(1, 10);\r
282                 //two digits 00-99\r
283                 //dollar part only\r
284                 String numBytes = message.subString(10, 12);\r
285                 //get dollars\r
286                 String data = message.subString(12, 12 + Integer.parseInt(numBytes));\r
287                 \r
288                 //find the account\r
289                 int id = -1;\r
290                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
291                 {\r
292                         if(Bank.database[i].AccountNumber.equals(account))\r
293                                 id = i;\r
294                 }\r
295                 \r
296                 if(id != -1)\r
297                 {\r
298                         Integer difference = new Integer(Integer.parseInt(Bank.database[id].Balance) - Integer.parseInt(data));\r
299                         \r
300                         if(difference.intValue() >= 0)\r
301                         {\r
302                                 StringBuffer difBuffer = new StringBuffer(difference.toString());\r
303                         \r
304                                 int padding = 10 - difBuffer.length();\r
305                         \r
306                                 for(int i = 0; i < padding; i++)\r
307                                 {\r
308                                         difBuffer.append("@");\r
309                                 }\r
310                         \r
311                                 //assumes no overflow\r
312                                 Bank.database[id].Balance = difBuffer.toString();\r
313                                 \r
314                                 bas.send("Withdraw OK");\r
315                                 //System.printString("Withdraw OK");\r
316                         }\r
317                         else\r
318                         {\r
319                                 bas.send("Overdraw Error");\r
320                                 //System.printString("Overdraw Error");\r
321                         }\r
322                 }\r
323                 else\r
324                 {\r
325                         bas.send("Withdraw Error");\r
326                         //System.printString("Withdraw Error");\r
327                 }\r
328         }\r
329         //check balance\r
330         else if(message.startsWith("9"))\r
331         {\r
332                 String account = message.subString(1, 10);\r
333                                         \r
334                 int id = -1;\r
335                 for(int i = 0; i < Bank.numOfAccounts; i++)\r
336                 {\r
337                         if(Bank.database[i].AccountNumber.equals(account))\r
338                                 id = i;\r
339                 }\r
340                 \r
341                 if(id != -1)\r
342                 {\r
343                         bas.send(Bank.database[id].Balance);\r
344                         //System.printString(Bank.database[id].Balance);\r
345                 }\r
346                 else\r
347                 {\r
348                         bas.send("Check Balance Error");\r
349                         //System.printString("Check Balance Error");\r
350                 }\r
351         }\r
352         else\r
353         {\r
354                 bas.send("Message Error");\r
355                 //System.printString("Message Error");\r
356         }\r
357 }\r