Last active
September 3, 2015 19:31
-
-
Save ryanbartley/c5498f79d08ecb39e306 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace osc { | |
template<typename ReceiveProtocol> | |
class Server { | |
public: | |
Server( asio::io_server &io = app::App::get()->io_service() ); | |
Server( const Server &server ) = delete; | |
Server& operator=( const Server &server ) = delete; | |
Server( Server &&server ); | |
Server& operator=( Server &&server ); | |
~Server(); | |
// Replaces listener if already exists for this address | |
void setListener( const std::string &address, std::function<void( const osc::Message &message )> function ); | |
void openSocket(); | |
void closeSocket(); | |
//! TODO: do we update the Server or do we attach ourselves to the update signal. | |
void update(); | |
private: | |
ReceiveProtocol mReceiveProtocol; | |
}; | |
} | |
class FooManager { | |
public: | |
void createFoo( const osc::Message &message ) | |
{ | |
auto buffer = message.getBlob( 0 ); | |
auto * foo = reinterpret_cast<Foo*>(buffer.getData()); | |
mFoos.push_back( *foo ); | |
} | |
private: | |
std::vector<Foo> mFoos; | |
}; | |
void receiveMessageFunc1( const osc::Message &message ) | |
{ | |
// do something with this type | |
auto firstInt = message.getInt( 1 ); | |
auto string = message.getString( 2 ); | |
} | |
void receiveMessageFunc2( const osc::Message &message ) | |
{ | |
// do something with this type as well | |
} | |
void receiveMessageGeneral( const osc::Message &message ) | |
{ | |
// receive all other messages | |
} | |
void main() { | |
auto fooManager = FooManager(); | |
auto io_service = asio::io_service; | |
auto server = osc::Server( io_service ); | |
server.addListener( "/osc/address/one", &receiveMessageFunc1 ); | |
server.addListener( "/osc/address/some", &receiveMessageFunc1 ); | |
server.addListener( "/osc/address/some", &receiveMessageFunc2 ); // replaces listener at this address | |
server.addListener( "/osc/address/createFoo", std::bind( &fooManager, &FooManager::createFoo ); | |
server.addListener( "", &receiveMessageGeneral ); | |
server.openSocket(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment