diff options
Diffstat (limited to 'ofAsterisk')
| -rwxr-xr-x | ofAsterisk/Makefile | 2 | ||||
| -rw-r--r-- | ofAsterisk/addons.make | 1 | ||||
| -rwxr-xr-x | ofAsterisk/config.make | 56 | ||||
| -rwxr-xr-x | ofAsterisk/ofAsterisk.cbp | 78 | ||||
| -rwxr-xr-x | ofAsterisk/ofAsterisk.workspace | 9 | ||||
| -rwxr-xr-x | ofAsterisk/src/Asterisk.cpp | 86 | ||||
| -rwxr-xr-x | ofAsterisk/src/Asterisk.h | 64 | ||||
| -rwxr-xr-x | ofAsterisk/src/main.cpp | 16 | ||||
| -rwxr-xr-x | ofAsterisk/src/testApp.cpp | 69 | ||||
| -rwxr-xr-x | ofAsterisk/src/testApp.h | 25 |
10 files changed, 406 insertions, 0 deletions
diff --git a/ofAsterisk/Makefile b/ofAsterisk/Makefile new file mode 100755 index 0000000..2d83a77 --- /dev/null +++ b/ofAsterisk/Makefile @@ -0,0 +1,2 @@ +include config.make +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/Makefile.examples diff --git a/ofAsterisk/addons.make b/ofAsterisk/addons.make new file mode 100644 index 0000000..17bb504 --- /dev/null +++ b/ofAsterisk/addons.make @@ -0,0 +1 @@ +ofxNetwork diff --git a/ofAsterisk/config.make b/ofAsterisk/config.make new file mode 100755 index 0000000..307c8ef --- /dev/null +++ b/ofAsterisk/config.make @@ -0,0 +1,56 @@ +# add custom variables to this file + +# OF_ROOT allows to move projects outside apps/* just set this variable to the +# absoulte path to the OF root folder + +OF_ROOT = ../../openFrameworks + + +# USER_CFLAGS allows to pass custom flags to the compiler +# for example search paths like: +# USER_CFLAGS = -I src/objects + +USER_CFLAGS = + + +# USER_LDFLAGS allows to pass custom flags to the linker +# for example libraries like: +# USER_LDFLAGS = libs/libawesomelib.a + +USER_LDFLAGS = + + +EXCLUDE_FROM_SOURCE="bin,.xcodeproj,obj" + +# change this to add different compiler optimizations to your project + +USER_COMPILER_OPTIMIZATION = -march=native -mtune=native -Os + + +# android specific, in case you want to use different optimizations +USER_LIBS_ARM = +USER_LIBS_ARM7 = +USER_LIBS_NEON = + +# android optimizations + +ANDROID_COMPILER_OPTIMIZATION = -Os + +NDK_PLATFORM = android-8 + +# uncomment this for custom application name (if the folder name is different than the application name) +#APPNAME = folderName + +# uncomment this for custom package name, must be the same as the java package that contains OFActivity +#PKGNAME = cc.openframeworks.$(APPNAME) + + + + + +# linux arm flags + +LINUX_ARM7_COMPILER_OPTIMIZATIONS = -march=armv7-a -mtune=cortex-a8 -finline-functions -funroll-all-loops -O3 -funsafe-math-optimizations -mfpu=neon -ftree-vectorize -mfloat-abi=hard -mfpu=vfp + + + diff --git a/ofAsterisk/ofAsterisk.cbp b/ofAsterisk/ofAsterisk.cbp new file mode 100755 index 0000000..fe155a0 --- /dev/null +++ b/ofAsterisk/ofAsterisk.cbp @@ -0,0 +1,78 @@ +<?xml version="1.0"?> +<CodeBlocks_project_file> + <FileVersion major="1" minor="6" /> + <Project> + <Option title="ofAsterisk" /> + <Option makefile_is_custom="1" /> + <Option pch_mode="2" /> + <Option compiler="gcc" /> + <Option virtualFolders="addons/;src/;build config/;" /> + <Build> + <Target title="Debug"> + <Option output="bin/$(PROJECT_NAME)_debug" prefix_auto="1" extension_auto="1" /> + <Option working_dir="bin" /> + <Option object_output="obj/Debug/" /> + <Option external_deps="../../../openFrameworks/libs/openFrameworksCompiled/lib/linux64/libopenFrameworksDebug.a;" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Option projectLinkerOptionsRelation="2" /> + </Target> + <Target title="Release"> + <Option output="bin/$(PROJECT_NAME)" prefix_auto="1" extension_auto="1" /> + <Option working_dir="bin" /> + <Option object_output="obj/Release/" /> + <Option external_deps="../../../openFrameworks/libs/openFrameworksCompiled/lib/linux64/libopenFrameworks.a;" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Option projectLinkerOptionsRelation="2" /> + </Target> + </Build> + <Unit filename="config.make"> + <Option virtualFolder="build config" /> + </Unit> + <Unit filename="src/main.cpp"> + <Option virtualFolder="src/" /> + </Unit> + <Unit filename="src/testApp.cpp"> + <Option virtualFolder="src/" /> + </Unit> + <Unit filename="src/testApp.h"> + <Option virtualFolder="src/" /> + </Unit> + <Extensions> + <code_completion /> + <envvars /> + <debugger /> + </Extensions> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxNetworkUtils.h"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxTCPServer.cpp"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxUDPManager.cpp"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxTCPServer.h"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxTCPManager.h"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxNetwork.h"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxTCPClient.cpp"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxTCPManager.cpp"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxTCPClient.h"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + <Unit filename="../../../openFrameworks/addons/ofxNetwork/src/ofxUDPManager.h"> + <Option virtualFolder="addons/ofxNetwork/src" /> + </Unit> + </Project> +</CodeBlocks_project_file> diff --git a/ofAsterisk/ofAsterisk.workspace b/ofAsterisk/ofAsterisk.workspace new file mode 100755 index 0000000..f55c1f7 --- /dev/null +++ b/ofAsterisk/ofAsterisk.workspace @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<CodeBlocks_workspace_file> + <Workspace title="ofAsterisk"> + <Project filename="ofAsterisk.cbp" active="1"> + <Depends filename="../../../openFrameworks/libs/openFrameworksCompiled/project/linux64/libopenFrameworks.cbp" /> + </Project> + <Project filename="../../../openFrameworks/libs/openFrameworksCompiled/project/linux64/libopenFrameworks.cbp" /> + </Workspace> +</CodeBlocks_workspace_file> diff --git a/ofAsterisk/src/Asterisk.cpp b/ofAsterisk/src/Asterisk.cpp new file mode 100755 index 0000000..ae85269 --- /dev/null +++ b/ofAsterisk/src/Asterisk.cpp @@ -0,0 +1,86 @@ +#include "Asterisk.h"
+
+
+//there is no notification that there is someone in the queue
+//but there is a status message you can check periodically...
+
+Asterisk::Asterisk()
+{
+ udpConnection.Create();
+ udpConnection.Bind(5000);
+ udpConnection.SetNonBlocking(true);
+ cmd("ssh 80.93.22.22 'sudo /usr/sbin/asterisk -rx \"database put GAME passcode 1234\"'");
+ state=WAITING;
+ printf("Asterisk: created socket and connected to server\n");
+}
+
+void Asterisk::startGame(){
+ if (state!=PLAYING) {
+ cmd("ssh 80.93.22.22 'sudo /usr/sbin/asterisk -rx \"devstate change Custom:GAME NOT_INUSE\"'");
+ printf("Asterisk: attempting to dequeue\n");
+ state=STARTING;
+ }
+}
+void Asterisk::endGame(string score){
+ if (state==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+"\"'";
+ printf("%s\n",emsg.c_str());
+ cmd(emsg);
+ printf("Asterisk: hanging up %s\n",playerCode.c_str());
+ state=WAITING;
+ }
+}
+void Asterisk::cmd(string s) {
+ file = popen(s.c_str(), "r");
+ int filenum=fileno(file);
+ //fcntl(filenum, F_SETFL, O_NONBLOCK); //doesn't seem to work, still pauses
+ //pclose(file); //discard the pipe THIS IS BLOCKING
+}
+
+int Asterisk::update(){
+ //how to capture stdin response from popen
+ /*
+ if (state==WAITING||state==STARTING) {
+ char buf[100];
+ ssize_t r = read(filenum, buf, 100);
+ //if (r == -1 && errno == EAGAIN)
+ //no data yet
+ //else
+ if (r > 0)
+ //received data
+ printf("%s\n",buf);
+ pclose(file);
+ state=IDLE;
+ ///else
+ //pipe closed
+ }
+ */
+ //check messages and pipes, returns new keypresses
+ char udpMessage[10000];
+ udpConnection.Receive(udpMessage,10000);
+ string msg=udpMessage;
+ if(msg!=""){
+ 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;
+ playerCode=msg.substr(0,msg.length()-1);
+ printf("Asterisk: game started: code %s\n",playerCode.c_str());
+ return 1000;
+ }
+ return 0;
+ }
+ else {
+ return ofToInt(msg);
+ }
+ }
+ else return 0;
+}
+
+Asterisk::~Asterisk()
+{
+ pclose(file);
+ //dtor
+}
diff --git a/ofAsterisk/src/Asterisk.h b/ofAsterisk/src/Asterisk.h new file mode 100755 index 0000000..c9ce864 --- /dev/null +++ b/ofAsterisk/src/Asterisk.h @@ -0,0 +1,64 @@ +#ifndef ASTERISK_H
+#define ASTERISK_H
+
+#include "ofMain.h"
+#include "ofxNetwork.h"
+
+#define IDLE 0
+#define WAITING 1
+#define STARTING 2
+#define PLAYING 3
+
+// http://stackoverflow.com/questions/1735781/non-blocking-pipe-using-popen
+
+/*
+
+Commands for game to control PBX
+
+Game ready
+
+ssh 10.10.10.1 'sudo /usr/sbin/asterisk -rx "devstate change Custom:GAME NOT_INUSE"'
+
+change daily access 4 digit code
+
+ssh 10.10.10.1 'sudo /usr/sbin/asterisk -rx "database put GAME passcode 1234"'
+
+
+
+Set status code for current game
+
+ssh 10.10.10.1 'sudo /usr/sbin/asterisk -rx "database put GAME statuscode 1234"'
+
+Gameover Hangup Call
+
+ssh 10.10.10.1 'sudo /usr/sbin/asterisk -rx "hangup request Local/9999@default-00000039;2"
+
+Local/9999@default-00000039;2 is a channel identifier and will be send to game when AGI script connects to game controller. The channel ID is unique for each call
+
+
+can we have a message that someone has joined the queue?
+can we have a message if someone hangs up?
+*/
+
+class Asterisk
+{
+ public:
+ Asterisk();
+ virtual ~Asterisk();
+ void startGame();
+ void endGame(string score);
+ int update();
+ void cmd(string s);
+
+ int state;
+
+ protected:
+ private:
+ int startTime;
+ FILE *file;
+ int filenum;
+ ofxUDPManager udpConnection;
+ string playerCode;
+};
+
+#endif // ASTERISK_H
diff --git a/ofAsterisk/src/main.cpp b/ofAsterisk/src/main.cpp new file mode 100755 index 0000000..6042c32 --- /dev/null +++ b/ofAsterisk/src/main.cpp @@ -0,0 +1,16 @@ +#include "ofMain.h" +#include "testApp.h" +#include "ofAppGlutWindow.h" + +//======================================================================== +int main( ){ + + ofAppGlutWindow window; + ofSetupOpenGL(&window, 100,100, OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp( new testApp()); + +} diff --git a/ofAsterisk/src/testApp.cpp b/ofAsterisk/src/testApp.cpp new file mode 100755 index 0000000..a69a084 --- /dev/null +++ b/ofAsterisk/src/testApp.cpp @@ -0,0 +1,69 @@ +#include "testApp.h" + +//-------------------------------------------------------------- +void testApp::setup(){ + +} + +//-------------------------------------------------------------- +void testApp::update(){ + int ret=game.update(); +} + +//-------------------------------------------------------------- +void testApp::draw(){ + +} + +//-------------------------------------------------------------- +void testApp::keyPressed(int key){ + switch (key) { + case 's': + game.startGame(); + break; + case 'e': + game.endGame("GOOD"); + break; + } + +} + +//-------------------------------------------------------------- +void testApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void testApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void testApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void testApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void testApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void testApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void testApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void testApp::dragEvent(ofDragInfo dragInfo){ + +}
\ No newline at end of file diff --git a/ofAsterisk/src/testApp.h b/ofAsterisk/src/testApp.h new file mode 100755 index 0000000..84c984c --- /dev/null +++ b/ofAsterisk/src/testApp.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ofMain.h" +#include "Asterisk.h" + +class testApp : public ofBaseApp{ + + public: + void setup(); + void update(); + void draw(); + + void keyPressed (int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + Asterisk game; + +}; |
