X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fhandler_coke.c;h=8c82a0709aaae82e603db39b910bc9088beb7c24;hb=c0baa7cdec5263d46f5d4eca02a6e517c5193872;hp=867ac6a13e4e7daf7fa7f745c3fda30ffc7bd429;hpb=43d8a3ef5d51f1a1505fb2d1809a87a141f157fd;p=tpg%2Fopendispense2.git diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c index 867ac6a..8c82a07 100644 --- a/src/server/handler_coke.c +++ b/src/server/handler_coke.c @@ -53,6 +53,7 @@ char *gsCoke_SerialPort = "/dev/ttyS0"; regex_t gCoke_StatusRegex; int gaCoke_CachedStatus[7]; pthread_mutex_t gCoke_Mutex = PTHREAD_MUTEX_INITIALIZER; +time_t gtCoke_LastDispenseTime; // == CODE === int Coke_InitHandler() @@ -199,6 +200,12 @@ int Coke_DoDispense(int UNUSED(User), int Item) // Can't dispense if the machine is not connected if( giCoke_SerialFD == -1 ) return -2; + + // Make sure there are not two dispenses within n seconds + if( time(NULL) - gtCoke_LastDispenseTime < 10 ) + { + sleep( 10 - time(NULL) - gtCoke_LastDispenseTime ); + } // LOCK pthread_mutex_lock(&gCoke_Mutex); @@ -266,6 +273,8 @@ int Coke_DoDispense(int UNUSED(User), int Item) char buf[512]; read(giCoke_SerialFD, buf, 512); // Flush } + + gtCoke_LastDispenseTime = time(NULL); // Release and return pthread_mutex_unlock(&gCoke_Mutex);