Hi Alexandar,

I'm sorry, I hardly see reasons, so would like others to help here.

but as you might see - it is already not an emscripten problem, but a
problem between  XMLHttpRequest

request from client and your server part. So you might write a simple test
case in javascript to make things work with your php part ( I never
returned anything xml from server though, except for files, so again -I'm
sorry - let anyone else shed some light here, maybe a problem is in
misconfiguration between what you send and what you receive ).

Regards
Sergey

On Sat, Nov 15, 2014 at 12:03 AM, Aleksandar Stančić <[email protected]>
wrote:

> The thing is, even when I comment out my "sync" code that makes the game
> wait, it still doesn't work. Without pausing the main loop and without
> sleep calls, my net_httpGet function returns false immediately, but the
> game still runs, and callback happens a bit later, but it's always status 0
> and message is NULL, so I don't know what's wrong. Under what conditions
> does this happen?
>
> Ok, I searched through Emscripten source, and by modifying it a bit, I
> located where the call happens:
> emscripten_async_wget2_data: function(url, request, param, arg, free,
> onload, onerror, onprogress) {
>   var _url = Pointer_stringify(url);
>   var _request = Pointer_stringify(request);
>   var _param = Pointer_stringify(param);
>
>   var http = new XMLHttpRequest();
>   http.open(_request, _url, true);
>   http.responseType = 'arraybuffer';
>
>   var handle = Browser.getNextWgetRequestHandle();
>
>   // LOAD
>   http.onload = function http_onload(e) {
>     if (http.status == 200 || _url.substr(0,4).toLowerCase() != "http") {
>       var byteArray = new Uint8Array(http.response);
>       var buffer = _malloc(byteArray.length);
>       HEAPU8.set(byteArray, buffer);
>       if (onload) Runtime.dynCall('viiii', onload, [handle, arg, buffer,
> byteArray.length]);
>       if (free) _free(buffer);
>     } else {
>       if (onerror) Runtime.dynCall('viiii', onerror, [handle, arg,
> http.status, http.statusText]);
>     }
>     delete Browser.wgetRequests[handle];
>   };
>
>   // ERROR
>   http.onerror = function http_onerror(e) {
>     if (onerror) {
>       Runtime.dynCall('viiii', onerror, [handle, arg, http.status,
> http.statusText]);  <--- HERE!
>     }
>     delete Browser.wgetRequests[handle];
>   };
>
>   // PROGRESS
>   http.onprogress = function http_onprogress(e) {
>     if (onprogress) Runtime.dynCall('viiii', onprogress, [handle, arg,
> e.loaded, e.lengthComputable || e.lengthComputable === undefined ? e.total
> : 0]);
>   };
>
>   // ABORT
>   http.onabort = function http_onabort(e) {
>     delete Browser.wgetRequests[handle];
>   };
>
>   // Useful because the browser can limit the number of redirection
>   try {
>     if (http.channel instanceof Ci.nsIHttpChannel)
>     http.channel.redirectionLimit = 0;
>   } catch (ex) { /* whatever */ }
>
>   if (_request == "POST") {
>     //Send the proper header information along with the request
>     http.setRequestHeader("Content-type",
> "application/x-www-form-urlencoded");
>     http.setRequestHeader("Content-length", _param.length);
>     http.setRequestHeader("Connection", "close");
>     http.send(_param);
>   } else {
>     http.send(null);
>   }
>
>   Browser.wgetRequests[handle] = http;
>
>   return handle;
> },
>
> So, it's being called as XMLHttpRequest onerror handler, but it gives me
> zero as status and no message. At least I know now that it isn't in the
> onload() call if HTTP status is different than 200 or the URL doesn't start
> with http. But still - why? What makes this XMLHttp request fail in such a
> way?
>
> On Friday, November 14, 2014 9:08:30 PM UTC+1, Sergey Kurdakov wrote:
>>
>> Hi Alexandar,
>>
>> as it was me, who advised - emscripent_wget - if you try to search code
>> is done around async xmlhttprequest , it works just fine if it is used in
>> async way.
>>
>> if you want how to make things, there is an engine
>> https://github.com/floooh/oryol which implements IQ queues such that
>> after you got response it is stored and on next tick you can get if from IO
>> queue
>>
>> it is possible to make things sync, but that requires deeper knowledge of
>> internals so most probably you will fail with that.
>>
>> thus my suggestion - to keep things async as if you used pure
>> xmlhttprequest
>>
>> Regards
>> Sergey
>>
>>
>>
>> On Fri, Nov 14, 2014 at 10:43 PM, Aleksandar Stančić <[email protected]>
>> wrote:
>>
>>> I tried wget2_data now and it still doesn't work. It seems it isn't even
>>> trying to download the file, it's not HTTP related, as with v2 I
>>> immediately get onerror callback and error code is 0, and my error message
>>> is NULL, so I still have no clue what is going on. I am relatively new to
>>> Emscripten, so I might be missing something. Do I need some special
>>> settings for compiler and/or linker to make this work? Anything
>>> browser-related? I tested on latest Firefox and Chrome on Linux, same thing
>>> every time.
>>>
>>> On Thursday, November 13, 2014 11:36:36 AM UTC+1, Sergey Kurdakov wrote:
>>>>
>>>> Hi Alexandar,
>>>>
>>>> >won't emscripten_async_wget serve your needs?
>>>>
>>>> I mean set of functions
>>>>
>>>> emscripten_async_wget
>>>> emscripten_async_wget2
>>>> emscripten_async_wget_data
>>>> emscripten_async_wget2_data
>>>>
>>>> Regards
>>>> Sergey
>>>>
>>>>
>>>> On Thu, Nov 13, 2014 at 1:24 PM, Sergey Kurdakov <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi Alexandar.
>>>>>
>>>>> won't emscripten_async_wget serve your needs? it sends requests to
>>>>> server and params can adjast which type of request is sent.
>>>>>
>>>>> Regards
>>>>> Sergey
>>>>>
>>>>> On Thu, Nov 13, 2014 at 11:58 AM, Aleksandar Stančić <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi! I'm writing a game in C++/OGL (to be published on the web through
>>>>>> Emscripten) that needs some interaction with a server, written in
>>>>>> PHP/MySQL. I already prepared the database and PHP code, and now, the
>>>>>> surprisingly difficult part is connecting the two. Is there a simple way 
>>>>>> of
>>>>>> loading a web page with a few POST strings in C++/Emscripten? 
>>>>>> Two-to-three
>>>>>> strings go in (POST) and I need to read one string or integer on the 
>>>>>> output
>>>>>> (HTTP response). emscripten_wget just hangs on me, and mixing JS + C++
>>>>>> seems to be able to transfer only numbers (ASM). Can someone point me in
>>>>>> the right direction? I feel like I'm missing something obvious, and I
>>>>>> wouldn't really know, since I'm not much of a web developer. Thanks.
>>>>>>
>>>>>> Just to clarify, I have a PHP page like this:
>>>>>>
>>>>>> $a = $_POST['a']  // a and b need to come from C++
>>>>>> $b = $_POST['b']
>>>>>>
>>>>>>
>>>>>>
>>>>>> // do stuff with $a & $b
>>>>>>
>>>>>>
>>>>>> echo($c)  // a string, under 100 regular ASCII chars, nothing special
>>>>>>
>>>>>> So, I need to do a HTTP POST request (I can switch to GET if that'll
>>>>>> make things easier), and read a single line of text back into C++.  What
>>>>>> would be a good way of doing that? I hate to be *that guy**,* but it
>>>>>> is kind urgent (I really wrote myself into a corner with this one, I
>>>>>> expected this to be easy), so any tips are greatly appreciated.
>>>>>>
>>>>>>  --
>>>>>> 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.
>

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