RTBKit
0.9
Open-source framework to create real-time ad bidding systems.
|
00001 /* chunked_http_endpoint.h -*- C++ -*- 00002 Jeremy Barnes, 26 April 2012 00003 Copyright (c) 2012 Datacratic. All rights reserved. 00004 00005 */ 00006 00007 #pragma once 00008 00009 #include "soa/service/http_endpoint.h" 00010 #include "soa/service/stats_events.h" 00011 00012 namespace Datacratic { 00013 00014 class ChunkedHttpEndpoint; 00015 00016 00017 /*****************************************************************************/ 00018 /* CHUNKED HTTP HANDLER */ 00019 /*****************************************************************************/ 00020 00021 struct ChunkedHttpHandler 00022 : public HttpConnectionHandler, 00023 public std::enable_shared_from_this<ChunkedHttpHandler> { 00024 00025 ChunkedHttpHandler(); 00026 virtual ~ChunkedHttpHandler(); 00027 00029 virtual void onGotTransport(); 00030 00031 ChunkedHttpEndpoint * endpoint; 00032 00034 virtual void handleHttpChunk(const HttpHeader & httpHeader, 00035 const std::string & chunkHeader, 00036 const std::string & chunk); 00037 00039 virtual void handleDisconnect(); 00040 00041 virtual std::string status() const; 00042 00044 virtual void handleError(const std::string & message); 00045 00046 void doEvent(const char * eventName, 00047 EventType type = ET_COUNT, 00048 float value = 1.0, 00049 const char * units = ""); 00050 00051 std::shared_ptr<ChunkedHttpHandler> makeNewHandlerShared(); 00052 00053 static long created; 00054 static long destroyed; 00055 }; 00056 00057 00058 00059 /*****************************************************************************/ 00060 /* CHUNKED HTTP ENDPOINT */ 00061 /*****************************************************************************/ 00062 00063 struct ChunkedHttpEndpoint: public HttpEndpoint { 00064 00066 typedef boost::function<void (const HttpHeader & header, 00067 const std::string & chunkHeader, 00068 const std::string & chunkData)> 00069 OnChunk; 00070 OnChunk onChunk; 00071 00072 ChunkedHttpEndpoint(const std::string & name, OnChunk onChunk); 00073 virtual ~ChunkedHttpEndpoint(); 00074 00081 typedef boost::function<void (std::string, 00082 EventType, 00083 float, 00084 const char *)> OnEvent; 00085 OnEvent onEvent; 00086 00087 protected: 00088 void doEvent(const std::string & eventName, 00089 EventType type = ET_COUNT, 00090 float value = 1.0, 00091 const char * units = "") 00092 { 00093 if (!onEvent) return; 00094 onEvent(eventName, type, value, units); 00095 } 00096 00097 virtual std::shared_ptr<ConnectionHandler> makeNewHandler(); 00098 virtual std::shared_ptr<ChunkedHttpHandler> makeNewHandlerShared(); 00099 00100 private: 00101 friend class ChunkedHttpHandler; 00102 }; 00103 00104 00105 } // namespace Datacratic