Break out sse into a compile unit

Verify similar to beb96b0 Break out websockets

Break out the SSE functions into a separate compile unit.  This allows
the SSE sockets in beast to be compiled separately, which significantly
reduces the overall compile time by a few seconds.  Code is identical
with the exceptions of minor header definitions to convert header-only
to compile unit.

Change-Id: I5aae4f17cbd2badf75b3e0bb644a2309f6300663
Signed-off-by: Ed Tanous <etanous@nvidia.com>
diff --git a/http/routing/sserule.hpp b/http/routing/sserule.hpp
index e32af57..9fb6ba3 100644
--- a/http/routing/sserule.hpp
+++ b/http/routing/sserule.hpp
@@ -5,18 +5,14 @@
 #include "async_resp.hpp"
 #include "baserule.hpp"
 #include "http_request.hpp"
-#include "http_response.hpp"
-#include "logging.hpp"
 #include "server_sent_event.hpp"
 
 #include <boost/asio/ip/tcp.hpp>
 #include <boost/asio/ssl/stream.hpp>
-#include <boost/beast/http/status.hpp>
 
 #include <functional>
 #include <memory>
 #include <string>
-#include <utility>
 #include <vector>
 
 namespace crow
@@ -27,48 +23,21 @@
     using self_t = SseSocketRule;
 
   public:
-    explicit SseSocketRule(const std::string& ruleIn) : BaseRule(ruleIn)
-    {
-        isUpgrade = true;
-        // Clear GET handler
-        methodsBitfield = 0;
-    }
+    explicit SseSocketRule(const std::string& ruleIn);
 
-    void validate() override {}
+    void validate() override;
 
     void handle(const Request& /*req*/,
                 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                const std::vector<std::string>& /*params*/) override
-    {
-        BMCWEB_LOG_ERROR(
-            "Handle called on websocket rule.  This should never happen");
-        asyncResp->res.result(
-            boost::beast::http::status::internal_server_error);
-    }
+                const std::vector<std::string>& /*params*/) override;
 
     void handleUpgrade(const Request& req,
                        const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/,
-                       boost::asio::ip::tcp::socket&& adaptor) override
-    {
-        std::shared_ptr<
-            crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>>
-            myConnection = std::make_shared<
-                crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>>(
-                std::move(adaptor), openHandler, closeHandler);
-        myConnection->start(req);
-    }
+                       boost::asio::ip::tcp::socket&& adaptor) override;
     void handleUpgrade(const Request& req,
                        const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/,
                        boost::asio::ssl::stream<boost::asio::ip::tcp::socket>&&
-                           adaptor) override
-    {
-        std::shared_ptr<crow::sse_socket::ConnectionImpl<
-            boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>>
-            myConnection = std::make_shared<crow::sse_socket::ConnectionImpl<
-                boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>>(
-                std::move(adaptor), openHandler, closeHandler);
-        myConnection->start(req);
-    }
+                           adaptor) override;
 
     template <typename Func>
     self_t& onopen(Func f)