#pragma once #include "NativeSockets.h" #include #include #include #include #include class OscServer { public: struct Callbacks { std::function updateParameter; }; OscServer(); ~OscServer(); bool Start(unsigned short port, const Callbacks& callbacks, std::string& error); void Stop(); unsigned short GetPort() const { return mPort; } private: struct OscMessage { std::string address; std::string valueJson; }; void ServerLoop(); bool DecodeMessage(const char* data, int byteCount, OscMessage& message, std::string& error) const; bool DispatchMessage(const OscMessage& message, std::string& error) const; static bool ReadPaddedString(const char* data, int byteCount, int& offset, std::string& value); static bool ReadInt32(const char* data, int byteCount, int& offset, int& value); static bool ReadFloat32(const char* data, int byteCount, int& offset, double& value); static std::string BuildJsonString(const std::string& value); Callbacks mCallbacks; UniqueSocket mSocket; unsigned short mPort; std::thread mThread; std::atomic mRunning; };