Skip to content

Instantly share code, notes, and snippets.

@ryanbartley
Last active September 3, 2015 19:31
Show Gist options
  • Save ryanbartley/c5498f79d08ecb39e306 to your computer and use it in GitHub Desktop.
Save ryanbartley/c5498f79d08ecb39e306 to your computer and use it in GitHub Desktop.
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