Skip to content

Commit

Permalink
mq, refactor: Support for automatic conversion of string to fileHandl…
Browse files Browse the repository at this point in the history
…er or HttpRepeater.
  • Loading branch information
xicilion committed Oct 20, 2019
1 parent f485ddb commit 9188041
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 11 deletions.
7 changes: 7 additions & 0 deletions fibjs/include/ifs/Handler.h
Expand Up @@ -24,6 +24,7 @@ class Handler_base : public object_base {
static result_t _new(v8::Local<v8::Array> hdlrs, obj_ptr<Handler_base>& retVal, v8::Local<v8::Object> This = v8::Local<v8::Object>());
static result_t _new(v8::Local<v8::Object> map, obj_ptr<Handler_base>& retVal, v8::Local<v8::Object> This = v8::Local<v8::Object>());
static result_t _new(v8::Local<v8::Function> hdlr, obj_ptr<Handler_base>& retVal, v8::Local<v8::Object> This = v8::Local<v8::Object>());
static result_t _new(exlib::string hdlr, obj_ptr<Handler_base>& retVal, v8::Local<v8::Object> This = v8::Local<v8::Object>());
virtual result_t invoke(object_base* v, obj_ptr<Handler_base>& retVal, AsyncEvent* ac) = 0;

public:
Expand Down Expand Up @@ -89,6 +90,12 @@ void Handler_base::__new(const T& args)

hr = _new(v0, vr, args.This());

METHOD_OVER(1, 1);

ARG(exlib::string, 0);

hr = _new(v0, vr, args.This());

CONSTRUCT_RETURN();
}

Expand Down
12 changes: 1 addition & 11 deletions fibjs/src/mq/JSHandler.cpp
Expand Up @@ -119,17 +119,7 @@ result_t JSHandler::invoke(object_base* v, obj_ptr<Handler_base>& retVal,
return CALL_RETURN_NULL;
}

retVal = Handler_base::getInstance(hdlr);
if (retVal)
return 0;

if (hdlr->IsArray())
return Handler_base::_new(v8::Local<v8::Array>::Cast(hdlr), retVal);

if (IsJSObject(hdlr))
return Handler_base::_new(v8::Local<v8::Object>::Cast(hdlr), retVal);

return CHECK_ERROR(CALL_E_BADVARTYPE);
return GetArgumentValue(hdlr, retVal);
}

} /* namespace fibjs */
18 changes: 18 additions & 0 deletions fibjs/src/mq/mq.cpp
Expand Up @@ -8,15 +8,33 @@
#include "object.h"
#include "JSHandler.h"
#include "ifs/mq.h"
#include "ifs/HttpRepeater.h"
#include "NullHandler.h"
#include "HttpHandler.h"
#include "Chain.h"
#include "Routing.h"
#include "HttpFileHandler.h"

namespace fibjs {

DECLARE_MODULE(mq);

result_t Handler_base::_new(exlib::string hdlr, obj_ptr<Handler_base>& retVal,
v8::Local<v8::Object> This)
{
if (!qstrcmp(hdlr.c_str(), "http:", 5) || !qstrcmp(hdlr.c_str(), "https:", 6)) {
obj_ptr<HttpRepeater_base> repeater;
result_t hr = HttpRepeater_base::_new(hdlr, repeater, This);
if (hr < 0)
return hr;

retVal = repeater;
} else
retVal = new HttpFileHandler(hdlr, false);

return 0;
}

result_t Handler_base::_new(v8::Local<v8::Array> hdlrs, obj_ptr<Handler_base>& retVal,
v8::Local<v8::Object> This)
{
Expand Down
5 changes: 5 additions & 0 deletions idl/zh-cn/Handler.idl
Expand Up @@ -16,6 +16,11 @@ interface Handler : object
*/
Handler(Function hdlr);

/*! @brief 构造一个 fileHandler 或者 HttpRepeater
@param hdlr 处理器的地址参数
*/
Handler(String hdlr);

/*! @brief 处理一个消息或对象
@param v 指定处理的消息或对象
@return 返回下一步的处理器
Expand Down

0 comments on commit 9188041

Please sign in to comment.