Skeleton server code (compiles, just doesn't do anything)
[tpg/opendispense2.git] / server / src / dispense.c
1 /**
2  */
3 #include "common.h"
4 #include <stdlib.h>
5
6 // === CODE ===
7 int DispenseItem(int User, int Item)
8 {
9          int    ret;
10         tItem   *item;
11         tHandler        *handler;
12         char    *username;
13         
14         if(Item < 0 || Item >= giNumItems)
15                 return -1;
16         
17         item = &gaItems[Item];
18         handler = &gaHandlers[ item->Type ];
19         
20         username = GetUserName(User);
21         
22         ret = handler->CanDispense( User, item->ID );
23         if(!ret)        return ret;
24         
25         ret = AlterBalance( User, -item->Price );
26         // What value should I use for this error?
27         // AlterBalance should return the final user balance
28         if(ret == 0)    return 1;
29         
30         ret = handler->DoDispense( User, item->ID );
31         if(ret) {
32                 Log_Error("Dispense failed after deducting cost (%s dispensing %s - %ic)",
33                         username, item->Name, item->Price);
34                 AlterBalance( User, item->Price );
35                 free( username );
36                 return 1;
37         }
38         
39         Log_Info("Dispensed %s (%i:%i) for %s [cost %i, balance %i cents]",
40                 item->Name, item->Type, item->ID,
41                 username, item->Price, GetBalance(User)
42                 );
43         
44         free( username );
45         return 0;
46 }

UCC git Repository :: git.ucc.asn.au