--- /dev/null
+
+Central "dispense" server
+- Accounting Section
+ > Linking to a static libary for the cokebank
+ + int AlterBalance(UID, int Delta)
+ + int GetBalance(UID)
+- Device Control Section
+ > Snack - Controls Vending Machine and accepts logins
+ > Coke - Controls Coke Machine
+ > Misc Server
+ - int Dispense(int ID, int UID)
+- Remote Control
+ > Accepts commands from dispense app.
+ - See `proto.txt`
+
--- /dev/null
+OpenDispense^2
+Client/Server Dispense Protocol
+
+The protocol is ASCII based, similar to the FTP protocol
+All server responses are on one line and are prefixed by a three digit response code.
+
+== Response Codes ==
+100 Information
+200 Command succeeded, no extra information
+201 Command succeeded, array follows (<length> <items> <items> ...)
+202 Command succeeded, per-command format
+400 Unknown Command
+401 Not Authenticated (or Authentication failure)
+402 Balance insufficient
+403 User not allowed to perform this action
+404 Bad other username
+406 Bad Item ID
+500 Unknown Dispense Failure
+
+
+=== User Auth ===
+c USER <username>\n
+s 100 SALT <string 4-8>\n
+c PASS <SHA-512 Hash>\n (Hash of <username><salt><password>)
+s 200 Auth OK\n or 401 Auth Failure\n
+User is now authenticated
+
+=== Commands ===
+--- Get Item list ---
+c ENUM_ITEMS\n
+s 201 Items <count> <item_id> <item_id> ...\n
+--- Get Item Information ---
+c ITEM_INFO <item_id>\n
+s 202 Item <item_id> <price> "<description>"\n
+--- Dispense an item ---
+c DISPENSE <item_id>\n
+s 200 Dispense OK\n or 402 Poor You\n or 500 Dispense Error\n or 406 Bad Item\n
+--- Give to another user ---
+c GIVE <user> <ammount> <reason>\n
+s 200 Give OK\n or 402 Poor You\n or 404 Bad User\n
+--- Update balance ---
+c ADD <user> <ammount> "<reason>"\n
+s 200 Add OK\n or 403 Not Coke\n or 404 Bad User\n
+--- Set Balance ---
+c SET <user> <balance> "<reason>"\n
+s 200 Set OK\n or 403 Not allowed\n or 404 Bad User\n
+--- Get Users Balances ---
+c ENUM_USERS[ <max balance>]\n
+s 201 Users <count> <username> <username> ...\n
+--- Get a User's Balance ---
+c USERINFO\n
+s 202 User <username> <balance>\n