I see, thanks. Yeah, looking into this some more, that does seem like
surprising behavior - I would also expect a pointer there, not the object
itself. Seems surprising we didn't notice it til now, but it appears bullet
and box2d use references in most of their APIs, not pointers.

Moving forward, it's probably not worth changing the current behavior. We
could add a new attribute, "Ptr" perhaps, to parallel "Ref".

On Wed, Feb 14, 2018 at 3:44 PM, Scott Watson <[email protected]> wrote:

> Hi Alon,
>
> StatusInfo looks like this:
>
> [Prefix="Arris::"]
> interface StatusInfo {
>     readonly attribute unsigned long bitrate;
>     readonly attribute unsigned long networkthroughput;
>     readonly attribute unsigned long optimalbitrate;
>
>     readonly attribute unsigned long droppedframes;
>     readonly attribute unsigned long stalls;
>
>     readonly attribute double        decodeFPS;
>     readonly attribute double        renderFPS;
>
>     readonly attribute unsigned long audiosegments;
>     readonly attribute unsigned long videosegments;
>     readonly attribute unsigned long h264frames;
>     readonly attribute unsigned long rgbframes;
>     readonly attribute unsigned long pcmframes;
>
>     readonly attribute double        seconds;
>     readonly attribute double        duration;
>     readonly attribute double        cacheduration;
>
>     readonly attribute PlayerState   playerstate;
>     readonly attribute boolean       frontendrunning;
>     readonly attribute boolean       audiodemuxerrunning;
>     readonly attribute boolean       videodemuxerrunning;
>     readonly attribute boolean       decoderrunning;
>     readonly attribute boolean       audiorendererrunning;
>     readonly attribute boolean       videorendererrunning;
>     readonly attribute PlayerError   lasterror;
> };
>
>
> On Wednesday, February 14, 2018 at 3:34:47 PM UTC-8, Alon Zakai wrote:
>>
>> How did you define StatusInfo in the idl file?
>>
>> On Tue, Feb 13, 2018 at 12:05 PM, Scott Watson <[email protected]> wrote:
>>
>>> Hi folks,
>>>
>>> I'm trying to create a callback mechanism to call into JS from C++.  I
>>> have a pure virtual C++ class that defines the callback interface defined
>>> as:
>>>
>>> class MediaPlayerDelegate {
>>> public:
>>>     virtual void PlayerStateChanged(PlayerState state, void *context)=0;
>>>     virtual void PlayerStatus(StatusInfo *status, void *context)=0;
>>>     virtual void PlayerErrorEncountered(PlayerError error, void *context
>>> )=0;
>>> };
>>>
>>>
>>>
>>> and I've described it in the IDL file as:
>>>
>>> [Prefix="Arris::", NoDelete]
>>> callback interface MediaPlayerDelegate {
>>>     void PlayerStateChanged(PlayerState state, any context);
>>>     void PlayerStatus(StatusInfo status, any context);
>>>     void PlayerErrorEncountered(PlayerError error, any context);
>>> };
>>>
>>>
>>> [JSImplementation="MediaPlayerDelegate"]
>>> interface MediaPlayerJSDelegate {
>>>     void MediaPlayerJSDelegate();
>>>     void PlayerStateChanged(PlayerState state, any context);
>>>     void PlayerStatus(StatusInfo status, any context);
>>>     void PlayerErrorEncountered(PlayerError error, any context);
>>> };
>>>
>>>
>>>
>>> But the generated code for the PlayerStatus method won't compile.  My
>>> glue.cpp file looks like this:
>>>
>>>   void PlayerStatus(Arris::StatusInfo arg0, void* arg1) {
>>>     EM_ASM_INT({
>>>       var self = Module['getCache'](Module['MediaPlayerJSDelegate'])[$0
>>> ];
>>>       if (!self.hasOwnProperty('PlayerStatus')) throw 'a
>>> JSImplementation must implement all functions, you forgot
>>> MediaPlayerJSDelegate::PlayerStatus.';
>>>       self['PlayerStatus']($1,$2);
>>>     }, (int)this, (int)arg0, arg1);
>>>   }
>>>
>>>
>>> Why isn't arg0 a StatusInfo *?
>>>
>>> If I make the change manually it builds but making the callback
>>> generates an exception.  The other two methods work fine.
>>>
>>> Any suggestions?
>>>
>>> -------
>>> Scott
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "emscripten-discuss" 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.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" 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.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" 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