/* * Copyright (C) 2009-2011 Carl Hetherington * Copyright (C) 2009-2017 Paul Davis * Copyright (C) 2009 David Robillard * Copyright (C) 2013-2016 Robin Gareus * Copyright (C) 2015 Johannes Mueller * Copyright (C) 2016-2018 Len Ovens * Copyright (C) 2016 Ben Loftis * Copyright (C) 2020 Luciano Iam * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef ardour_websockets_h #define ardour_websockets_h #define ABSTRACT_UI_EXPORTS #include "pbd/abstract_ui.h" #include "ardour/plugin.h" #include "control_protocol/control_protocol.h" #include "component.h" #include "dispatcher.h" #include "feedback.h" #include "globals.h" #include "server.h" #include "strips.h" #define SURFACE_NAME "WebSockets Server (Experimental)" #define SURFACE_ID "uri://ardour.org/surfaces/ardour_websockets:0" namespace ArdourSurface { struct ArdourWebsocketsUIRequest : public BaseUI::BaseRequestObject { public: ArdourWebsocketsUIRequest () {} ~ArdourWebsocketsUIRequest () {} }; class ArdourWebsockets : public ARDOUR::ControlProtocol, public AbstractUI { public: ArdourWebsockets (ARDOUR::Session&); virtual ~ArdourWebsockets (); static void* request_factory (uint32_t); int set_active (bool); ARDOUR::Session& ardour_session () { return *session; } ArdourStrips& strips_component () { return _strips; } ArdourGlobals& globals_component () { return _globals; } WebsocketsServer& server_component () { return _server; } WebsocketsDispatcher& dispatcher_component () { return _dispatcher; } /* ControlProtocol */ void stripable_selection_changed () {} protected: /* BaseUI */ void thread_init (); /* AbstractUI */ void do_request (ArdourWebsocketsUIRequest*); private: ArdourStrips _strips; ArdourGlobals _globals; ArdourFeedback _feedback; WebsocketsServer _server; WebsocketsDispatcher _dispatcher; std::vector _components; int start (); int stop (); }; } // namespace ArdourSurface #endif // ardour_websockets_h