Oh, many thanks, that solution sounds smart! :-)

On 10 Feb, 15:11, [email protected] wrote:
> Now that you are working with custom inlinepush command there is little 
> optimization you might want to try out.
>
> Inside the command you should see a line which calls the Ape.config() 
> function. What this function does is fetch a file and get a value out of it. 
> Having this call inside the command means this proccess of fething the file 
> will happen on every inlinepush command call. This could lead to possible 
> memory leaks and extra CPU cycles.
>
> What you could do is call the Ape.config(...) function outside the inlinepush 
> command and store its value in a global variable. Then you could use this 
> global variable inside the inlinepush command instead of Ape.config(...)
>
> Somthing like
>
>     var inlinePass = Ape.config(...);
>     Ape.registerCmd(...,..., function(params, ...){
>     If(params.password == inlinePass){
>        ...
>
> Is not something that you have to do but you should keep it in mind.
>
> Sent via BlackBerry from T-Mobile
>
>
>
>
>
>
>
> -----Original Message-----
> From: Giuseppe Mastrandrea <[email protected]>
>
> Sender: [email protected]
> Date: Fri, 10 Feb 2012 02:12:24
> To: APE Project<[email protected]>
> Reply-To: [email protected]
> Subject: [APE Project] Re: users join event
>
> Ok, after a couple of days full of pain, i think i'm able to post some
> useful code. In this snippets i build an hash for each user connected
> to ape; this hash substantially implements a "dummy" session system.
>
> This hash is formed by an array of arrays, each formed by the user's
> pubid and the room he's logged in. If a user refresh a page, the pubid
> is updated in the proper array entry; if a user connects to another
> room (i remind you that my system is formed by N rooms that you can
> reach from your URLhttp://localhost/chat/1,http://localhost/chat/2,
> ... ,http://localhost/chat/N) a couple pubid/room is added to this
> array. If a user closes a window, the corrensponding pubid/room array
> entry is deleted ("deluser" event is fired). If a user wants to start
> a private session, it simply passes the username to the application
> server (in my case, that's Django), and then the application server
> uses a custom inlinepush to create the session. The ape server, in
> this case, checks for the presence of the username in the global
> hashlist, and sends a signal to the corrensponding pubids. To achieve
> these results, i've customized the xosofox's "nickname.js" to this
> one:
>
> var userlist = new $H;
>
> Ape.registerHookCmd("connect", function(params, cmd) {
>         if (!$defined(params.name)) return 0;
>         cmd.user.setProperty('name', params.name);
>         cmd.user.setProperty('room', params.room);
>         return 1;
> });
>
> function listUserNames()
> {
>         Ape.log("--------Current Userlist-------------------------");
>         userlist.each(function(v,k){
>                 Ape.log(k + ": ");
>                 v.each(function(infoAr, key){
>                         infoAr.each(function(item, index){
>                                 //Ape.log(index + ': ' +item);
>                                 item.each(function(ob, ind){
>                                         Ape.log(ind + ': ' +ob);
>                                         });
>                                 });
>
>                         });
>                 });
>         Ape.log("--------Current Userlist End---------------------");
> }
>
> function getPubIdFromName(nickname){
>         var uis = userlist.get(nickname);
>         if(!$defined(uis)){
>                 return 0;
>         }
>         else return uis;
> }
>
> Ape.addEvent("adduser", function(user) {
>
>         var name =user.getProperty('name');
>         var room = user.getProperty('room');
>         var pubid=user.getProperty('pubid');
>         var logged = false;
>         var uis=userlist.get(name);
>
>         //if no user instance hash, create one
>         if (!$defined(uis))
>         {
>                 var singleInfoAr = new Array(pubid, room);
>                 var infoContainer = new Array(singleInfoAr);
>                 uis= new $H;
>                 uis.set('infoAr', infoContainer);
>                 userlist.set(name, uis);
>
>         }else{
>                 infoAr = uis.get('infoAr');
>                 infoAr.each(function(v, k){
>                         if(v[1]==room){
>                                 v[0] = pubid;
>                                 Ape.log('Updated Pubid!');
>                                 logged=true;
>                         }
>                 });
>                 if(!logged){
>                         var singleInfoAr = new Array(pubid, room);
>                         infoAr.extend(Array(singleInfoAr));
>                         uis.set('infoAr', infoAr);
>                 }
>                 userlist.set(name, uis);
>         }
>         listUserNames();
> });
>
> Ape.addEvent("deluser", function(user) {
>         var name=user.getProperty('name');
>         var pubid=user.getProperty('pubid');
>         Ape.log("Timeout: " + name + ": " + pubid);
>         var uis=userlist.get(name);
>         infoAr=uis.get('infoAr');
>         infoAr.each(function(v, k){
>                 if(v[0]==pubid){
>                         //delete the corrensponding array entry
>                         infoAr.splice(k, 1);
>                 }
>         });
>         uis.set('infoAr', infoAr);
>         if(infoAr.length == 0){
>                 userlist.erase(name);
>         }
>         //if last instance left, erase hash
>         else userlist.set(name, uis);
>         listUserNames();
> });
>
> Please note the "room" parameter in the registerHookCmd function; this
> is the room id coming directly from the URL. I pass it to the server
> this way:
>
> this.core.start({'name':String(nickname), 'room':room});
>
> Hope this can help someone else, i've worked around it for two days,
> and -yeah- i know it's a "raw" solution, but well... it works!
>
> On 8 Feb, 15:20, Giuseppe Mastrandrea <[email protected]>
> wrote:
> > That's an interesting point, Louis!
> > If i store a triple userID/roomID/pubid server-side i could have a
> > more flexible way to manage public AND private messaging.
> > When a user refreshes a page, the server will update the
> > corrensponding tuple with the new pubid.
> > Yeah, it's a bit complicated, but MAYBE this way i'll make it :-)
>
> > On 8 Feb, 14:55, Louis Charette <[email protected]> wrote:
>
> > > I should take a look again at that article, it's been a while!
>
> > > The way I worked around to send private messages to a user (based on his 
> > > CMS/forum user id), is to store this ID in the user object server side. 
> > > When a private message need to be send to him, I call a custom server 
> > > side command, loop thought all the ape clients, and send to the 
> > > corresponding client.
>
> > > Another way to handle private messaging on a chat, based on a CMS userID, 
> > > is to have this user join a channel named after his ID. You the. Sed 
> > > everything down this pipe.
>
> > >   - Louis
>
> > > Envoyé de mon iPhone
>
> > > Le 2012-02-08 à 06:55, Giuseppe Mastrandrea 
> > > <[email protected]> a écrit :
>
> > > > I read this, and i'm working on that very userlist. Maybe i'll be able
> > > > to post something useful in a few hours. Thanks :-)
>
> > > > On 8 Feb, 12:48, Sergei Koba <[email protected]> wrote:
> > > >> Read this please  http://www.xosofox.de/2010/10/ape-user-handling/
> > > >> If someone hasn't posted this link already. It shows the way to store 
> > > >> all
> > > >> pubids for a logged user.
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > > > Groups "APE Project" group.
> > > > To post to this group, send email to [email protected]
> > > > To unsubscribe from this group, send email to
> > > > [email protected]
> > > > 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 [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group 
> athttp://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 [email protected]
To unsubscribe from this group, send email to
[email protected]
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