From 0bb92ced351b7fbba6e2e7036eae92037d08facf Mon Sep 17 00:00:00 2001 From: Comment Date: Sat, 8 Dec 2012 00:38:32 +0000 Subject: working on game logic --- vfg/src/Asterisk.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'vfg/src/Asterisk.cpp') diff --git a/vfg/src/Asterisk.cpp b/vfg/src/Asterisk.cpp index b78678e..98ffd9d 100755 --- a/vfg/src/Asterisk.cpp +++ b/vfg/src/Asterisk.cpp @@ -62,27 +62,25 @@ void Asterisk::setup(string passcode,int millis){ udpConnection.Bind(5000); udpConnection.SetNonBlocking(true); cmd("ssh 80.93.22.22 'sudo /usr/sbin/asterisk -rx \"database put GAME passcode "+passcode+"\"'"); - state=WAITING; //for acknowledge - isPlaying=false; + state=ASTERISK_WAITING; //for acknowledge statusPollMillis=millis; if (statusPollMillis>0) startThread(true, false); // blocking, verbose } void Asterisk::startGame(){ - if (!isPlaying&&queued) { + if (state==ASTERISK_IDLE&&queued) { cmd("ssh 80.93.22.22 'sudo /usr/sbin/asterisk -rx \"devstate change Custom:GAME NOT_INUSE\"'"); printf("Asterisk: attempting to dequeue\n"); - state=WAITING; + state=ASTERISK_WAITING; } } void Asterisk::endGame(string score){ printf("Asterisk: request hangup %s\n",playerCode.c_str()); - if (isPlaying) { + if (state==ASTERISK_PLAYING) { cmd("ssh 80.93.22.22 'sudo /usr/sbin/asterisk -rx \"database put GAME statuscode "+score+"\"'"); string emsg="ssh 80.93.22.22 'sudo /usr/sbin/asterisk -rx \"hangup request "+playerCode+"\"'"; cmd(emsg); printf("Asterisk: hanging up %s\n",playerCode.c_str()); - state=WAITING; - isPlaying=false; + state=ASTERISK_IDLE; } } void Asterisk::cmd(string s) { @@ -95,7 +93,7 @@ void Asterisk::cmd(string s) { int Asterisk::update(){ //capture stdin response from popen - if (state==WAITING||state==STARTING) { + if (state==ASTERISK_WAITING||state==ASTERISK_STARTING) { char buf[100]; ssize_t r = read(filenum, buf, 1000); //if (r == -1 && errno == EAGAIN) @@ -104,13 +102,12 @@ int Asterisk::update(){ if (r > 0) { pclose(file); string msg=string(buf); - state=IDLE; + state=ASTERISK_IDLE; //received data is always a command ACKNOWLEDGEMENT //can never issue a new one until last one returns? if (msg.compare(0,8,"Changing")==0) { printf("player dequeued\n"); - state==PLAYING; - isPlaying=true; + state=ASTERISK_STARTING; } else { printf("stdin says: %s\n",buf); @@ -127,15 +124,20 @@ int Asterisk::update(){ //printf("Asterisk: %s\n",msg.c_str()); if (msg.length()>3) { //printf("status msg: %s\n",msg.c_str()); - if (msg.substr(0,5)=="Local") { - state=PLAYING; + if (msg.substr(0,6)=="Hangup") { + state=ASTERISK_IDLE; + return ASTERISK_GAMEOVER; + } + if (msg.substr(0,5)=="Local"&&state==ASTERISK_STARTING) { + state=ASTERISK_PLAYING; playerCode=msg.substr(0,msg.length()-1); printf("Asterisk: game started: code %s\n",playerCode.c_str()); - return 1000; + return ASTERISK_GAMESTARTED; } return 0; } else { + //message length of <3 is a key return ofToInt(msg); } } -- cgit v1.2.3