Forum: Italian Ruby user group App. realtime with faye

C26e692d4d3de5881ebb873409085768?d=identicon&s=25 Roberto Sacchetti (ikaiser)
on 2013-07-15 10:18
Ciao a tutti sono nuovo del mondo ruby/rails e sto creando un
applicativo web realtime che mi permetta di generare dei post dinamici
stile social network;

Metodo uno funzionante:
 ho startato faye via client/browser: channel.js:

 $(function() {
        // Create a new client to connect to Faye
        var client = new Faye.Client('http://localhost:9292/faye');

        var user_id = $('#user_id').val();
        var user = getUser(user_id);
        var public_subscription = []

        public_subscription[0] = client.subscribe('/user/' + user_id +
'/posts',  function(data) {
            printPost(data);
        });

        if( user.hashtags.length > 0 ){

            for (var i = 1; i <= user.hashtags.length; i++) {
                var hashtag =  user.hashtags[i - 1];
                public_subscription[i] =
client.subscribe('/posts/hashtag/' + hashtag._id, function(data) {
                    printPost(data);
                    if( data.gr ) addPostGroup(data);
                });

                if( hashtag.post_ids.length > 0 ){
                    for (var j = 1; j <= hashtag.post_ids.length; j++) {
                        var post_id =  hashtag.post_ids[j - 1];

                        public_subscription[i] =
client.subscribe('/post/'+post_id, function(data) {
                            if( data.comment ) addComment(data.post_id,
data._id, data);
                            if( data.like ) addLike(data._id,
data.liker_ids.length);

                        });

                    }

                }
            }
        }

        if( user.posts.length > 0 ){
            for (var i = 1; i <= user.posts.length; i++) {
                var post =  user.posts[i - 1];
                public_subscription[i] =
client.subscribe('/post/'+post._id, function(data) {
                    if( data.comment ) addComment(data.post_id,
data._id, data);
                    if( data.like ) addLike(data._id,
data.liker_ids.length);
                });
            }
        }

});

post.js:

$("#postWallForm").ajaxForm({
        type: 'post',
        success: function(post){

            var hashtags_ids = post.hashtag_ids;
            var group = post.group;
            for (var i = 0; i < hashtags_ids.length; i++) {
                var hashtag_id = hashtags_ids[i];
                publish(post, '/posts/hashtag/' + hashtag_id);

            }

            if( typeof group != 'undefined' ){
                for (var i = 0; i < group.hashtag_ids.length; i++) {
                    var keyword = group.hashtag_ids[i];
                    post['gr'] = 1;
                    publish(post, '/posts/hashtag/' + keyword);
                }
            }
            client.publish('/user/' + post.user_id + '/posts' , post);
            return false;
});

quando viene eseguito il submit del form, lui mi salva i dati e in più
crea tramite faye il sistmea relatime chemi va a postare sul wall;

la mia domanda è questa ogni volta che l'utente passa da una pagina
all'altra lui mi apre e chiude la connessione a faye?? non cè un modo
per far persistere la connessione??

secondo metodo non funzionante:

ApplicationController:

def self.subscription(user_id)
      user = User.find(user_id)
      EM.run {
        client = Faye::Client.new('http://localhost:9292/faye')

        client.subscribe('/user/posts/' + user_id) do |post|
          PostsController.print(post)
        end

        user.hashtags do |hashtag|

          client.subscribe('/posts/' + hashtag.id) do |post|
            PostsController.print(post)
          end

        end

      }

    end

la mia domanda è la chiamata avviene normalmente, ma cè un modo per
interagire col DOM ?? oppure stampare il post a video?? perchè nel
momento che il subscribe viene interogato non so come posso far stampare
il mio post a video.

graziem e scusate se sono stato lungo e imperfetto.
F8990e1991980f60be9ab371a214a21d?d=identicon&s=25 Federico Ravasio (razielgn)
on 2013-07-15 10:42
(Received via mailing list)
On Monday, July 15, 2013 at 10:18 AM, Roberto Sacchetti wrote:
>
>
> var post_id = hashtag.post_ids[j - 1];
> }
> if( data.comment ) addComment(data.post_id,
>
> }
> });
> ApplicationController:
> user.hashtags do |hashtag|
>
> Ml mailing list
> Ml@lists.ruby-it.org (mailto:Ml@lists.ruby-it.org)
> http://lists.ruby-it.org/mailman/listinfo/ml

Non saprei aiutarti in quanto Faye non l'ho mai provato, ma riusciresti
a mettere il codice in una gist? [1]
Faciliti molto la lettura e invogli le persone ad aiutarti ;)

Federico

[1] https://gist.github.com
C26e692d4d3de5881ebb873409085768?d=identicon&s=25 Roberto Sacchetti (ikaiser)
on 2013-07-15 10:55
Ea11f27a9b96fffde96cebc912a3bcc4?d=identicon&s=25 Daniele Palombo (Guest)
on 2013-07-15 11:43
(Received via mailing list)
Non si pu mantenere una connessione persistente sul cambio pagina ,
dovresti semplicemente evitare di cambiarla , in particolare potresti
usare
librerie di frontend come ember o backbone che ti facilitano la vita ,
ovviamente questo richiede una riscrittura completa dell'applicativo.

Qualcuno ha qualche altra soluzione?

Daniele.


2013/7/15 Roberto Sacchetti <info@robertosacchetti.com>
C26e692d4d3de5881ebb873409085768?d=identicon&s=25 Roberto Sacchetti (ikaiser)
on 2013-07-15 11:46
putroppo non posso riscrivere l'app, adesso; sicuramente in futuro mi
baserò o su ember o su bakbone, però purtroppo adesso devo trovare una
soluzione.
grazie.
B01bfda40b8949ae47df8f9f59289797?d=identicon&s=25 riccardo diago (Guest)
on 2013-07-15 11:51
(Received via mailing list)
Ciao, hai gi provato a vedere questo  ?
http://faye.jcoglan.com/browser.html




2013/7/15 Roberto Sacchetti <info@robertosacchetti.com>
3d6e548fa413cb093009599b24ff51d6?d=identicon&s=25 Duilio Ruggiero (sinetris)
on 2013-07-15 11:55
Roberto Sacchetti wrote in post #1115455:
> putroppo non posso riscrivere l'app, adesso; sicuramente in futuro mi
> baserò o su ember o su bakbone, però purtroppo adesso devo trovare una
> soluzione.
> grazie.

Cio Roberto,

Hai provato https://github.com/rails/turbolinks/ ?
Ea11f27a9b96fffde96cebc912a3bcc4?d=identicon&s=25 Daniele Palombo (Guest)
on 2013-07-15 12:06
(Received via mailing list)
Duilio tu hai gi provato turbolinks ?
Io in passato ho avuto problemi con script che facevano la stessa cosa ,
ricordo in particolare problemi con link generati dinamicamente da
javascript , submit post e utilizzando document.href...

Daniele.


2013/7/15 Duilio Ruggiero <duilio.ruggiero@gmail.com>
9daa9b4739a6e95078cbcfb624d7bb8e?d=identicon&s=25 David Welton (Guest)
on 2013-07-15 12:09
(Received via mailing list)
> Hai provato https://github.com/rails/turbolinks/ ?

Io ho usato pjax per un progetto, e mi sono trovato abbastanza bene;
e` molto piu` leggero e quindi comprensibile rispetto a BackBone,
Angular, Ember, ecc...ecc....

--
David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/
C26e692d4d3de5881ebb873409085768?d=identicon&s=25 Roberto Sacchetti (ikaiser)
on 2013-07-15 12:24
Per il momento il mio problema principale e far si che il client
instanzi una volata soltanto faye.
poi passero a vedere come far si a rendere le viste. o interagire col
DOM.
32d80da41830a6e6c1bb3eb977537e3e?d=identicon&s=25 Alessandro R. (alessandro_r)
on 2013-07-21 16:18
(Received via mailing list)
Io uso private_pub per interfacciarmi a faye

Alessandro Rodi


2013/7/15 Roberto Sacchetti <info@robertosacchetti.com>
Fe88efa62f2b20bdeb8689626d375f1e?d=identicon&s=25 Andrea Campolonghi (andreacfm)
on 2013-07-22 10:36
(Received via mailing list)
In un progetto usando socket.io e node.js avevamo risolto tenendo
aggiornato su node un array di utenti connnessi con il loro socket ID,
email o un ID che vuoi.
A chiusura connessione mettevamo in coda una cancellazione dal registro
ritardata in modo da poter rifare il match "nuova connessione"
"utente" nel lasso di tempo stabilito.
Funzionava e funziona tuttora bene.

Ciao

Andrea

On Jul 15, 2013, at 12:24 PM, Roberto Sacchetti
<info@robertosacchetti.com> wrote:

> http://lists.ruby-it.org/mailman/listinfo/ml
Andrea Campolonghi
acampolonghi@gmail.com
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.