Thanks Pablo.
Technically you are right hence getContent is another function that is
out of the scope of hook-connect.


The "trick" is to send the next command inside such function when the
result is "false" or "zero".
Well, it works fine for me. Also http gets the content sent by the php
output with not issues. (I am using latest github APED compiled by myself)

    cmd.sendResponse('ERR', {'code': 1001, 'value': 'User does not
    logged in'});


Utan, about "non-defined-variables", try to bind getContent to the hook
function.
I am using mootools on the server. I am copying my code below so you get
an idea.

If this does not help you, then I have not more ideas  ;-)

    var Users = new Class({

        initialize: function() {
            Ape.registerHookCmd('connect', this.on_connect.bind(this));
        },

        on_connect: function(params, cmd) {

            if ( ! params || ! params.session_id) return 0;

            var request = new Http(local_urls.IS_USER_LOGGED +
    params.session_id);

            request.getContent(function(result) { //call the PHP file

                if (result == 0) {
                    *cmd.sendResponse('ERR', {'code': 1001, 'value':
    error_codes._1001});*
                    log('USER_NOT_LOGGED_IN');
                    return 0;
                }

                else {

                    var data_user = JSON.parse(result);

                    //set private properties
                    cmd.user.code = data_user.code;
                    cmd.user.uid = data_user.uid;

                    //send to user its identification code
                    cmd.sendResponse('userCode', {'code': data_user.code});
                    return 1;
                }

            }*.bind(this));*
        }
    });

    var global_users;
    Ape.addEvent('init', function(){
        global_users = new Users();
    });



On 01/23/2012 01:12 PM, Pablo Tejada wrote:
> Erik,
>
> Returning 0 inside the getContent callback does not returns it to the
> parent function which is the hook. The problem is in the Http class
> itself.
>
> I skim through the Http.js file and quickly spotted a fix but I'm
> currently mobile so I don't know if I'll be able do anything. If I'm
> able to do the edits that I think could solve this I will share the
> file with you guys in an attachment.
>
> On Jan 23, 2012 2:02 PM, "Erick Romero" <err...@gmail.com
> <mailto:err...@gmail.com>> wrote:
> >
> > No sure if I understand what you mean.
> > I am understanding that your problem is on the server side.  If you have
> > troubles into the client-side you should add more information.
> >
> > By the way, is the flow-logic entering into the if (result == '')?
> > If it is the case, then the hook is returning zero and the code should
> > stop there (returning zero into the hook-connect server makes
> > client-users to be dropped)
> >
> > If the flow-logic is not entering into the "if" quoted above, in that
> > case make the PHP-file outputs ZERO when there are not match instead of
> > a empty char and change the IF to if (result === 0)
> >
> >
> > On 01/23/2012 12:44 PM, utan wrote:
> > > Hi,
> > >
> > > I 've tried your suggestion too I get this nickname.js:40:TypeError:
> > > user.getProperty("name") is undefined
> > > and the code runs after the else, but when logged in, the
> > > user.properties is undefined.. so somehow it stops the code but the
> > > wrong way..
> > > My brain is about to explode.. ROLF
> > >
> > > On Jan 23, 10:25 am, Erick Romero <err...@gmail.com
> <mailto:err...@gmail.com>> wrote:
> > >> What about this:
> > >>
> > >>     Ape.registerHookCmd("connect", function(params, cmd) {
> > >>
> > >>         if ( ! params || ! params.session_id) return 0;
> > >>
> > >>         var request = new Http("your_php_file");
> > >>         request.getContent(function(result) { //call the PHP file
> > >>
> > >>             if (result == '') { //YOUR PHP is sending an EMPTY when
> > >>     there are not match (as you wrote)
> > >>
> > >>                 cmd.sendResponse('ERR', {'code': 1001, 'value': 'User
> > >>     BANNED'});
> > >>                 return 0;
> > >>
> > >>             } else {
> > >>
> > >>                 cmd.user.setProperty('name', params.name
> <http://params.name>);
> > >>                 cmd.user.setProperty('ip', cmd.ip);
> > >>                 return 1;
> > >>
> > >>             }
> > >>         });
> > >>
> > >>     });
> > >>
> > >> On 01/23/2012 11:34 AM, utan wrote:
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>> Ok, moved the function code to the hook , now I have the code like
> > >>> this:
> > >>> code before to call the php file
> > >>> request.getContent(function (result){
> > >>>    if(result){
> > >>>            return 0;
> > >>>    }
> > >>>    else{
> > >>>            cmd.user.setProperty('name', params.name
> <http://params.name>);
> > >>>            cmd.user.setProperty('ip', cmd.ip);
> > >>>    }
> > >>>    });
> > >>> but still the code runs after the return 0 , then the page opens but
> > >>> with error user.properites are undefined..
> > >>> and server side gets me this: TypeError: user.getProperty("name") is
> > >>> undefined
> > >>> since I am not working with a function when returning the code
> doesnt
> > >>> stop..
> > >>> any thoughts?
> > >>> On Jan 23, 9:08 am, Erick Romero <err...@gmail.com
> <mailto:err...@gmail.com>> wrote:
> > >>>> Try the following:
> > >>>> Remove "return 1" from connect hook. As you said, the code will
> be ran
> > >>>> before you get the php response; so no matter if it is banned
> you are
> > >>>> returning 1 (true).
> > >>>> I would delete is_banned function and move that logic into
> connect hook,
> > >>>> making a IF to return 0 or 1 for the connect hook based on the
> php-response.
> > >>>> Also you may move the logic user-setProperty into the if (the
> side that
> > >>>> returns 1)
> > >>>> On 01/23/2012 10:44 AM, utan wrote:
> > >>>>> Thanks for your help,
> > >>>>> I end up doing all the work at php side, send the ip with http and
> > >>>>> then checking it at php level return either true or false and work
> > >>>>> with it.
> > >>>>> There is a problem , in the moment the http does its job the other
> > >>>>> code had run and even if true it doesn't return because I think
> > >>>>> because  anonymous function  or because it doesn't have a
> response yet
> > >>>>> from php server side..
> > >>>>> which then tests as false and keep running the code.. this is
> what I
> > >>>>> am doing..
> > >>>>> I have a function in name.js,
> > >>>>> function isbanned(ip){
> > >>>>>    var request = new Http('http://anyplace/sql/banned_ips.php'
> <http://anyplace/sql/banned_ips.php%27>);
> > >>>>>    request.set('method', 'POST');
> > >>>>>    request.writeData('password', 'any');
> > >>>>>    request.writeData('ip', ip);
> > >>>>>    request.getContent(function (result){
> > >>>>>            Ape.log(ip);
> > >>>>>       return result;
> > >>>>>    });
> > >>>>> }
> > >>>>> and
> > >>>>> Ape.registerHookCmd("connect", function(params, cmd) {
> > >>>>>    if (!$defined(params) || !$defined(params.name
> <http://params.name>)) return 0;
> > >>>>>    if (userlist.has(params.name.toLowerCase())) return ["007",
> > >>>>> "NICK_USED"];
> > >>>>>    if (params.name.length > 9 ||
> params.name.test('[^a-zA-Z0-9]', 'i'))
> > >>>>> return ["006", "BAD_NICK"];
> > >>>>>    if(isbanned(cmd.ip))return 0;// if true would return 0 and
> the code
> > >>>>> should stop
> > >>>>>    cmd.user.setProperty('name', params.name <http://params.name>);
> > >>>>>    cmd.user.setProperty('ip', cmd.ip);
> > >>>>>    return 1;
> > >>>>> });
> > >>>>> If I put the code directly in Ape.registerHookCmd I have the same
> > >>>>> result, doesnt matter if is true or false the code continued
> to the
> > >>>>> next code , but if I test putting a return 1  before
> > >>>>> request.getContent the code stops and do what I want..
> > >>>>> maybe I still dont know much but why is this? if I do with
> json you
> > >>>>> think I will have better luck?
> > >>>>> On Jan 23, 6:24 am, Erick Romero <err...@gmail.com
> <mailto:err...@gmail.com>> wrote:
> > >>>>>> You should add JSON  to the server.
> > >>>>>> I made it in this way:
> > >>>>>> 1. Download the JSON file from the below link.
> > >>>>>> 2. Add the file inside the server under "framework" directory
> > >>>>>> 3. Modify "main.ape.js" in the server and add the line
> > >>>>>> "include("framework/JSON.js");"
> > >>>>>> 3. That's all.
> > >>>>>> http://www.json.org/js.html
> > >>>>>> github:https://github.com/douglascrockford/JSON-js
> > >>>>>> Now in php you do
> > >>>>>> var data = array('name'=>'naruto', 'age'=>'15' );
> > >>>>>> /echo json_encode(/data);
> > >>>>>> And in the server:
> > >>>>>> /
> > >>>>>> var request = new Http(URL);
> > >>>>>> request.getContent(function(result) { //call the PHP file
> > >>>>>>     if ( ! result) {
> > >>>>>>         cmd.sendResponse('ERR', {'code': 1001, 'value':
> > >>>>>> 'error_codes._1001'});
> > >>>>>>         Ape.log('USER_NOT_LOGGED_IN');
> > >>>>>>         return 0;
> > >>>>>>     }
> > >>>>>>     var data_user = JSON.parse(result)
> > >>>>>>     Ape.log(data_user.name <http://data_user.name>);
> > >>>>>> //    Ape.log(data_user.age
> > >>>>>>     return 1;
> > >>>>>> //}/
> > >>>>>> On 01/22/2012 08:04 PM, utan wrote:
> > >>>>>>> Hi,
> > >>>>>>> Sorry to highjack this tread, I've done the same I get the
> response
> > >>>>>>> from the php db array  json encoded , but when I try to use
> it in the
> > >>>>>>> serverside of Ape and try something like this:
> > >>>>>>> request.getContent(function (result){
> > >>>>>>>            Ape.log(result.ID);
> > >>>>>>>       });
> > >>>>>>> where result has the json from the test.php, if I try to
> access say
> > >>>>>>> result.ID I get JavaScript : undefined , how can I access it
> properly,
> > >>>>>>> tried JSON.decode(); but is not a function and I think core
> doesnt
> > >>>>>>> have loaded..
> > >>>>>>> need to convert it to object so I can use.. can find if Ape
> has json
> > >>>>>>> decode to work with..
> > >>>>>>> thanks for any help.
> > >>>>>>> On Jan 17, 2:19 pm, Erick Romero <err...@gmail.com
> <mailto:err...@gmail.com>> wrote:
> > >>>>>>>> This works for me:
> > >>>>>>>> 1. On APE Server use Http to fetch test.php (included into
> > >>>>>>>> APE_server/framework). Define a call back for that Http
> > >>>>>>>> 2. Test.php handles mysql functions and sends back the data
> (a simple
> > >>>>>>>> echo works). For convenience I send the data JSON encoded
> > >>>>>>>> 3. The http-call-back on APE server handles the raw with
> the data retrieved.
> > >>>>>>>> On 01/17/2012 03:54 PM, Micael Ribeiros wrote:
> > >>>>>>>>> Is there a better way to do this besides this one:
> > >>>>>>>>> 1: On APE Server use mootools Request method to send a
> XMLHttpRequest
> > >>>>>>>>> to a test.php file
> > >>>>>>>>> 2: On the test.php file retrieve the mysql data and send
> it back using
> > >>>>>>>>> file_get_contents or curl to send a Raw to the APE Server
> > >>>>>>>>> 3: On APE Server process the raw with the mysql data
> received from the
> > >>>>>>>>> php script
> > >>>>>>>>> ?
> > >>>>>>>>> Thank you in advance for any response
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "APE Project" group.
> > To post to this group, send email to ape-project@googlegroups.com
> <mailto:ape-project@googlegroups.com>
> > To unsubscribe from this group, send email to
> > ape-project+unsubscr...@googlegroups.com
> <mailto:ape-project%2bunsubscr...@googlegroups.com>
> > For more options, visit this group at
> > http://groups.google.com/group/ape-project?hl=en
> > ---
> > APE Project (Ajax Push Engine)
> > Official website : http://www.ape-project.org/
> > Git Hub : http://github.com/APE-Project/
> -- 
> You received this message because you are subscribed to the Google
> Groups "APE Project" group.
> To post to this group, send email to ape-project@googlegroups.com
> To unsubscribe from this group, send email to
> ape-project+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/ape-project?hl=en
> ---
> APE Project (Ajax Push Engine)
> Official website : http://www.ape-project.org/
> Git Hub : http://github.com/APE-Project/

-- 
You received this message because you are subscribed to the Google
Groups "APE Project" group.
To post to this group, send email to ape-project@googlegroups.com
To unsubscribe from this group, send email to
ape-project+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/ape-project?hl=en
---
APE Project (Ajax Push Engine)
Official website : http://www.ape-project.org/
Git Hub : http://github.com/APE-Project/

Reply via email to