Hi Jochen,

Full code of relevant file available - http://pastebin.com/fZJENvSi 
<http://pastebin.com/fZJENvSi>

Snippet of relevant portions for WrapHTTPBodyMap:

Local<ObjectTemplate> HTTPBody::MakeHTTPBodyMapTemplate(
    Isolate* isolate) {
  EscapableHandleScope handle_scope(isolate);

  Local<ObjectTemplate> result = ObjectTemplate::New(isolate);
  result->SetInternalFieldCount(1);
  result->SetHandler(NamedPropertyHandlerConfiguration(NULL,
                                                       HTTPBodySet));

  return handle_scope.Escape(result);
}

Local<Object> HTTPBody::WrapHTTPBodyMap() {
  EscapableHandleScope handle_scope(GetIsolate());

  if (http_body_map_template_.IsEmpty()) {
    Local<ObjectTemplate> raw_template = MakeHTTPBodyMapTemplate(GetIsolate());
    http_body_map_template_.Reset(GetIsolate(), raw_template);
  }
  Local<ObjectTemplate> templ =
      Local<ObjectTemplate>::New(GetIsolate(), http_body_map_template_);

  Local<Object> result =
      templ->NewInstance(GetIsolate()->GetCurrentContext()).ToLocalChecked();

  Local<External> map_ptr = External::New(GetIsolate(), &http_body);

  result->SetInternalField(0, map_ptr);

  return handle_scope.Escape(result);
}


> On 27-Jul-2016, at 7:47 PM, Jochen Eisinger <[email protected]> wrote:
> 
> Can you provide a complete example? I suspect that WrapHTTPBodyMap doesn't do 
> what you expect it does
> 
> On Tue, Jul 26, 2016 at 1:04 PM Abhishek Singh <[email protected] 
> <mailto:[email protected]>> wrote:
> Would you mind guiding me a bit here? For now just trying to expose nested 
> “body” map i.e. to allow something like “response.body.result = dbQueryResult"
> 
> First is the Set interceptor for “response” (C++ object) and here I’m setting 
> up “body” (C++ object for “body”) & setting return value to “body” object. 
> Second one is Set interceptor for “body”
> 
> void HTTPResponse::HTTPResponseSet(Local<Name> name, Local<Value> value_obj,
>                                    const PropertyCallbackInfo<Value>& info) {
>   if (name->IsSymbol()) return;
> 
>   V8Handle* w = UnwrapV8HandleInstance(info.Holder());
>   HTTPBody* body = new HTTPBody(w);
> 
>   Local<Object> body_map = body->WrapHTTPBodyMap();
>   info.GetReturnValue().Set(body_map);
> }
> 
> 
> void HTTPBody::HTTPBodySet(Local<Name> name, Local<Value> value_obj,
>                            const PropertyCallbackInfo<Value>& info) {
>   if (name->IsSymbol()) return;
> 
>   string key = ObjectToString(Local<String>::Cast(name));
>   string value = ToString(info.GetIsolate(), value_obj);
> 
>   map<string, string>* body = UnwrapMap(info.Holder());
>   (*body)[key] = value;
> 
>   cout << "body field " << value << endl;
> }
> 
> 
> Currently I’m not hitting Set interceptor of “body” object, I suppose I’m 
> doing something wrong here.
> 
> 
>> On 25-Jul-2016, at 10:00 PM, Jochen Eisinger <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
> 
>> To create dynamic nested maps from C++, the outter object (response) would 
>> have to return another intercepted object (e.g. body) that then returns the 
>> actual values on access.
>> 
>> On Fri, Jul 22, 2016 at 8:12 AM Abhishek Singh <[email protected] 
>> <mailto:[email protected]>> wrote:
>> Hi,
>> 
>> I’m wondering if there is a way to expose map<string, map<string, string> > 
>> into JS world from C++? Exposing map<string, string> looks straightforward 
>> and I’m doing for some C++ objects using NamedPropertyConfigurationHandler. 
>> I’ll just show sample JS code that I would like to have and where C++ 
>> map<string, map<string, string> > will come into picture:
>> 
>> function OnHTTPGet(request, response) {
>> 
>>         var city = “BLR”;
>>         var limit = “10”;
>> 
>>         var queryResult = dbCal(“select * from users where city=${city} 
>> limit ${limit}”);
>> 
>>         // This works for me presently
>>         /* response.data = queryResult;
>>         response.status_code = 200; */
>> 
>>         // What I would like to have
>>         response.body.data = queryResult;
>>         response.header.status_code = 200;
>> }
>> 
>> “request” - native HTTP request JSON passed from C++ V8 binding as args to 
>> JS function
>> “response” - C++ based HTTP object exposed with Setter callback set using 
>> NamedPropertyConfigHandler and this what I write back to user who made the 
>> “request"
>> 
>> I basically want to set HTTP response body and header transparently, which 
>> would require me to expose C++ HTTP object probably as a map<string, 
>> map<string, string> >. Hope my question is clear, please let me know if 
>> there a way to do this?
>> 
>> Thanks,
>> Abhishek
>> 
>> --
>> --
>> v8-users mailing list
>> [email protected] <mailto:[email protected]>
>> http://groups.google.com/group/v8-users 
>> <http://groups.google.com/group/v8-users>
>> ---
>> You received this message because you are subscribed to the Google Groups 
>> "v8-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:v8-users%[email protected]>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
>> 
>> -- 
>> -- 
>> v8-users mailing list
>> [email protected] <mailto:[email protected]>
>> http://groups.google.com/group/v8-users 
>> <http://groups.google.com/group/v8-users>
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "v8-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:[email protected]>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> -- 
> v8-users mailing list
> [email protected] <mailto:[email protected]>
> http://groups.google.com/group/v8-users 
> <http://groups.google.com/group/v8-users>
> --- 
> You received this message because you are subscribed to the Google Groups 
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> -- 
> -- 
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users 
> <http://groups.google.com/group/v8-users>
> --- 
> You received this message because you are subscribed to the Google Groups 
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to