/**
 * Copyright (c) 2021 Paul-Louis Ageneau
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */

#ifndef RTC_WEBSOCKETSERVER_H
#define RTC_WEBSOCKETSERVER_H

#if RTC_ENABLE_WEBSOCKET

#include "common.hpp"
#include "configuration.hpp"
#include "websocket.hpp"

namespace rtc {

namespace impl {

struct WebSocketServer;

}

class RTC_CPP_EXPORT WebSocketServer final : private CheshireCat<impl::WebSocketServer> {
public:
	using Configuration = WebSocketServerConfiguration;

	WebSocketServer();
	WebSocketServer(Configuration config);
	~WebSocketServer();

	void stop();

	uint16_t port() const;

	void onClient(std::function<void(shared_ptr<WebSocket>)> callback);

private:
	using CheshireCat<impl::WebSocketServer>::impl;
};

} // namespace rtc

#endif

#endif // RTC_WEBSOCKET_H