summaryrefslogtreecommitdiff
path: root/vfg/src/Asterisk.cpp
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2012-12-08 00:38:32 +0000
committerComment <tim@gray.(none)>2012-12-08 00:38:32 +0000
commit0bb92ced351b7fbba6e2e7036eae92037d08facf (patch)
tree41bda9d879baa35dcecc48c79db4819f42a8d5ca /vfg/src/Asterisk.cpp
parent11322afc79c2d36d5edecd0e6b38186f9f2dd867 (diff)
working on game logic
Diffstat (limited to 'vfg/src/Asterisk.cpp')
-rwxr-xr-xvfg/src/Asterisk.cpp30
1 files changed, 16 insertions, 14 deletions
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);
}
}