Program Listing for File websocket_connection.hpp

Return to documentation for file (/tmp/ws/src/async_web_server_cpp/include/async_web_server_cpp/websocket_connection.hpp)

#ifndef CPP_WEB_SERVER_WEBSOCKET_CONNECTION_HPP
#define CPP_WEB_SERVER_WEBSOCKET_CONNECTION_HPP

#include "async_web_server_cpp/http_connection.hpp"
#include "async_web_server_cpp/websocket_message.hpp"

#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/thread/mutex.hpp>

namespace async_web_server_cpp
{

class WebsocketHttpRequestHandler;

class WebsocketConnection;
typedef boost::shared_ptr<WebsocketConnection> WebsocketConnectionPtr;
typedef boost::weak_ptr<WebsocketConnection> WebsocketConnectionWeakPtr;

class WebsocketConnection
    : public boost::enable_shared_from_this<WebsocketConnection>,
      private boost::noncopyable
{
public:
    explicit WebsocketConnection(HttpConnectionPtr connection);

    typedef boost::function<void(const WebsocketMessage& message)>
        MessageHandler;

    bool sendTextMessage(const std::string& content);
    bool sendPingMessage(const std::string& content = "");

    bool sendMessage(const WebsocketMessage& message);
    bool sendFrame(WebsocketFrame& frame);

private:
    static void static_handle_read(WebsocketConnectionWeakPtr weak_this,
                                   const char* begin, const char* end);
    void handle_read(const char* begin, const char* end);
    HttpConnectionPtr connection_;

    void set_message_handler(MessageHandler& handler);
    MessageHandler handler_;

    WebsocketFrame frame_;
    WebsocketMessage message_;
    WebsocketFrameParser frame_parser_;
    WebsocketFrameBuffer frame_buffer_;

    friend class WebsocketHttpRequestHandler;
};

}  // namespace async_web_server_cpp

#endif