1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- module request;
- import collie.codec.http;
- import collie.codec.http.server;
- import collie.utils.vector;
- import std.exception;
- import std.datetime;
- import std.conv;
- import std.string;
- abstract class BaseHandler : RequestHandler
- {
- alias Buffer = Vector!(ubyte);
- protected:
- final override void onResquest(HTTPMessage headers) nothrow
- {
- _header = headers;
- }
- final override void onBody(const ubyte[] data) nothrow
- {
- collectException(_buffer.put(data));
- }
- final override void onError(HTTPErrorCode code) nothrow {
- _erroCode = code;
- collectException({
- import collie.utils.memory;
- if(_header)gcFree(_header);
- gcFree(this);
- }());
- }
- final override void requestComplete() nothrow
- {
- _erroCode = HTTPErrorCode.REMOTE_CLOSED;
- collectException({
- import collie.utils.memory;
- if(_header)gcFree(_header);
- gcFree(this);
- }());
- }
- final @property bool isVaild(){return _erroCode == HTTPErrorCode.NO_ERROR;}
- pragma(inline,true)
- final string printDate() {
- DateTime date = cast(DateTime)Clock.currTime;
- return format(
- "%.3s, %02d %.3s %d %02d:%02d:%02d GMT", // could be UTC too
- to!string(date.dayOfWeek).capitalize,
- date.day,
- to!string(date.month).capitalize,
- date.year,
- date.hour,
- date.minute,
- date.second);
- }
- protected:
- HTTPMessage _header;
- Buffer _buffer;
- private:
- HTTPErrorCode _erroCode = HTTPErrorCode.NO_ERROR;
- }
|