I commented on the example

On Thu, Jul 28, 2016 at 2:14 PM Abhishek Singh <[email protected]>
wrote:

> Please find standalone code simulating your suggestion -
> https://gist.github.com/abhi-bit/d3a2910ec54a47ce8294c2cc0c4bef93 (In the
> comment pasted output in my case). Will appreciate if you could guide using
> this test script.
>
>
> On 28-Jul-2016, at 4:05 PM, Abhishek Singh <[email protected]>
> wrote:
>
> I believe this is the change you wanted me to do:
>
> Local<Object> HTTPBody::WrapHTTPBodyMap() {
>   EscapableHandleScope handle_scope(GetIsolate());
>
>   Local<FunctionTemplate> body_map_template =
> FunctionTemplate::New(GetIsolate());
>   body_map_template->InstanceTemplate()->SetHandler(
>           NamedPropertyHandlerConfiguration(NULL, HTTPBodySet));
>   body_map_template->InstanceTemplate()->SetInternalFieldCount(1);
>   Local<Object> result = body_map_template->GetFunction()->NewInstance();
>
>   Local<External> map_ptr = External::New(GetIsolate(), &http_body);
>
>   result->SetInternalField(0, map_ptr);
>
>   return handle_scope.Escape(result);
> }
>
> This didn’t help. I’ll share a standalone program that simulates problem I
> see, maybe that would help you to see what the problem could be? Would be
> some bit of effort for me, but will do given it will be very useful to have
> nested c++ maps exposed to JS.
>
> On 28-Jul-2016, at 12:54 PM, Jochen Eisinger <[email protected]> wrote:
>
> I guess you should use function templates here.
>
> Local<FunctionTemplate> body_map_template = FunctionTemplate::New(isolate);
> body_map_template->InstanceTemplate()->SetHandler(...)
> body_map_template->InstanceTemplate()->SetInternalFieldCount(1);
> result = body_map_template->GetFunction()->NewInstance();
>
> On Wed, Jul 27, 2016 at 4:27 PM Abhishek Singh <
> [email protected]> wrote:
>
>> Hi Jochen,
>>
>> Full code of relevant file available - 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]> 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]>
>>> 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]> 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]
>>>> 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.
>>>>
>>>
>>> --
>>> --
>>> 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.
>>>
>>>
>>> --
>>> --
>>> 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.
>>>
>>
>> --
>> --
>> 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.
>>
>>
>>
>> --
>> --
>> 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.
>>
>
> --
> --
> 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.
>
>
>
> --
> --
> 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.
>

-- 
-- 
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