// ServeHTTP is called whenever there is a new request. // This is quite similar to JavaEE Servlet interface. func (h *MyHandler) ServeHTTP(ctx *fasthttp.RequestCtx) { // In the future we can use requester can detect request spammers! // requester := ctx.RemoteAddr() // Increase request count count := &(h.requests) atomic.AddUint64(count, 1) if ctx.IsGet() { url := ctx.URI() operations, format, err, invalid := ParseURI(url, h.imageSource, h.watermarker) if err != nil { ctx.NotFound() logging.Debug(err) return } if invalid != nil { ctx.Error(invalid.Error(), 400) return } blob, err := h.operator.GetBlob(operations...) if err != nil { ctx.NotFound() logging.Debug(err) } else { ctx.SetContentType("image/" + format) ctx.Write(blob) logging.Debug("Blob returned") } } else if ctx.IsPost() { // POST is currently unused so we can use this for testing h.RetrieveHello(ctx) logging.Debug("Post request received") } }
// NewRequest returns `Request` instance. func NewRequest(c *fasthttp.RequestCtx, l *log.Logger) *Request { return &Request{ RequestCtx: c, url: &URL{URI: c.URI()}, header: &RequestHeader{RequestHeader: &c.Request.Header}, logger: l, } }
func (s *Server) ServeHTTP(c *fasthttp.RequestCtx) { // Request rq := s.pool.request.Get().(*Request) reqHdr := s.pool.requestHeader.Get().(*RequestHeader) reqURL := s.pool.url.Get().(*URL) reqHdr.reset(&c.Request.Header) reqURL.reset(c.URI()) rq.reset(c, reqHdr, reqURL) // Response rs := s.pool.response.Get().(*Response) resHdr := s.pool.responseHeader.Get().(*ResponseHeader) resHdr.reset(&c.Response.Header) rs.reset(c, resHdr) s.handler.ServeHTTP(rq, rs) s.pool.request.Put(rq) s.pool.requestHeader.Put(reqHdr) s.pool.url.Put(reqURL) s.pool.response.Put(rs) s.pool.responseHeader.Put(resHdr) }