1 #ifndef AL_PARAMETERSERVER_H
2 #define AL_PARAMETERSERVER_H
47 #include "al/protocol/al_OSC.hpp"
48 #include "al/ui/al_Parameter.hpp"
49 #include "al/ui/al_ParameterBundle.hpp"
53 constexpr
int handshakeServerPort = 16987;
54 constexpr
int listenerFirstPort = 14000;
56 class ParameterServer;
61 mCommandHandler.node =
this;
66 void startCommandListener(std::string address =
"0.0.0.0");
77 std::cout <<
"command handler got" << std::endl;
95 virtual void addListener(std::string IPaddress, uint16_t oscPort) {
98 if (newListenerSocket->open(oscPort, IPaddress.c_str())) {
100 mOSCSenders.push_back(newListenerSocket);
101 mListenerLock.unlock();
105 delete newListenerSocket;
106 std::cerr <<
"ERROR: Could not register listener " << IPaddress <<
":"
107 << oscPort << std::endl;
142 mListenerLock.lock();
149 mListenerLock.unlock();
151 void startHandshakeServer(std::string address =
"0.0.0.0");
153 void appendCommandHandler(osc::PacketHandler &handler) {
158 std::mutex mListenerLock;
159 std::vector<osc::Send *> mOSCSenders;
160 std::vector<std::pair<std::string, int>> mConnectedNodes;
171 std::vector<std::pair<std::string, uint16_t>> mNodes;
172 std::mutex mNodeLock;
208 bool autoStart =
true);
222 bool listen(
int oscPort = -1, std::string oscAddress =
"");
245 void print(std::ostream &stream = std::cout);
254 bool serverRunning();
260 std::vector<ParameterString *> stringParameters();
261 std::vector<ParameterVec3 *> vec3Parameters();
262 std::vector<ParameterVec4 *> vec4Parameters();
263 std::vector<ParameterPose *> poseParameters();
266 template <
class ParameterType>
272 template <
class ParameterType>
291 void clearOSCListeners() { mPacketHandlers.clear(); }
294 std::string rootPath =
"");
307 void sendParameterDetails(std::string IPaddress,
int oscPort);
309 void requestAllParameters(std::string IPaddress,
int oscPort);
313 uint16_t serverPort() {
return mServer->port(); }
315 void verbose(
bool verbose =
true) { mVerbose = verbose; }
316 static bool setParameterValueFromMessage(ParameterMeta *param,
320 virtual void runCommand(osc::Message &m)
override;
323 static void changeCallback(
float value,
void *sender,
void *userData,
325 static void changeStringCallback(std::string value,
void *sender,
326 void *userData,
void *blockThis);
327 static void changeVec3Callback(
Vec3f value,
void *sender,
void *userData,
329 static void changeVec4Callback(
Vec4f value,
void *sender,
void *userData,
331 static void changePoseCallback(Pose value,
void *sender,
void *userData,
334 void printParameterInfo(ParameterMeta *p);
336 void printBundleInfo(ParameterBundle *bundle, std::string
id,
int depth = 0);
338 void setValuesForBundleGroup(osc::Message &m,
339 std::vector<ParameterBundle *> bundleGroup,
340 std::string rootAddress);
342 std::vector<std::pair<std::string, uint16_t>>
345 std::vector<osc::PacketHandler *> mPacketHandlers;
346 std::vector<std::pair<osc::MessageConsumer *, std::string>> mMessageConsumers;
348 std::mutex mServerLock;
350 std::vector<ParameterMeta *> mParameters;
351 std::map<std::string, std::vector<ParameterBundle *>> mParameterBundles;
352 std::map<std::string, int> mCurrentActiveBundle;
353 std::mutex mParameterLock;
355 std::string mOscAddress;
358 bool mVerbose{
false};
virtual void onMessage(osc::Message &m) override
Called for each message contained in packet.
void notifyListeners(std::string OSCaddress, float value, ValueSource *src=nullptr)
Notify the listeners of value changes.
virtual void addListener(std::string IPaddress, uint16_t oscPort)
addListener enables notifiying via OSC that a preset has changed
The ParameterServer class creates an OSC server to receive parameter values.
ParameterServer & registerParameterBundle(ParameterBundle &bundle)
ParameterServer & operator<<(ParameterType &newParam)
Register parameter using the streaming operator.
ParameterServer & registerParameter(ParameterMeta ¶m)
void configure(uint16_t port, std::string addr="")
Set cached configuration. These values are used if listen() is called without arguments.
void stopServer()
stopServer stops the OSC server thread. Calling this function is sometimes required when this object ...
std::vector< Parameter * > parameters()
Get the list of registered parameters.
virtual void onMessage(osc::Message &m) override
Called for each message contained in packet.
bool listen(int oscPort=-1, std::string oscAddress="")
void print(std::ostream &stream=std::cout)
print prints information about the server to std::out
void registerOSCListener(osc::PacketHandler *handler)
Append a listener to the osc server.
ParameterServer & operator<<(ParameterBundle &bundle)
Register parameter bundle using the streaming operator.
void sendAllParameters(std::string IPaddress, int oscPort)
send all currently regeistered parameter values
ParameterServer & operator<<(ParameterType *newParam)
Register parameter using the streaming operator.
ParameterServer(std::string oscAddress="", int oscPort=9010, bool autoStart=true)
ParameterServer constructor.
void unregisterParameter(ParameterMeta ¶m)
A local coordinate frame.
void print() const
Pretty-print message information.
Socket for receiving OSC packets.
Recv & appendHandler(PacketHandler &v)
Add a packet handler to list. All handlers get all messages.
Vec< 4, float > Vec4f
float 4-vector
Vec< 3, float > Vec3f
float 3-vector