2011-10-19 2 views
1

Je développe actuellement une application sur Google App Engine pour l'un de mes projets de cours. J'essaie maintenant de créer un panneau latéral qui se met à jour chaque fois que quelqu'un se connecte à mon application. Le but est de permettre aux autres utilisateurs de voir qui est en ligne, afin qu'ils puissent se défier dans un jeu (oui, j'écris une application de jeu). J'ai réussi à le faire en utilisant l'API Channel, permettant la présence des chaînes et l'implémentation des gestionnaires. Cela fonctionne parfaitement, mais cela ne fonctionne que lorsque je reste sur une page et que quelqu'un se connecte. Lorsque je passe à une autre page, je n'ai aucun moyen de vérifier si cet utilisateur est toujours connecté. La liste est mise à jour uniquement lorsque quelqu'un se connecte à elle, mais n'affiche pas les utilisateurs actuellement connectés.Vérification de la présence du client à l'aide du canal

Y a-t-il un moyen de vérifier quels utilisateurs sont connectés en utilisant le canal de GAE? J'ai remarqué qu'un message d'avertissement est imprimé lorsque mon application tente d'envoyer un ChannelMessage à un clientId qui n'est pas actuellement connecté. Y a-t-il quelque chose dans l'API de la chaîne qui peut me permettre de faire la même chose?

Répondre

2

Il semble que ce que vous demandez est une méthode comme channel.enumerate_connected_clients().

Il n'y a rien de tel. Vous devez utiliser le magasin de données et/ou memcache pour le suivre vous-même. Si vous venez d'utiliser le datastore, vous pouvez faire quelque chose comme ceci:

Définir votre modèle:

class Client(db.Model): 
    name = db.StringProperty() 
    connected = db.BooleanProperty() 

Créer une nouvelle entité cliente lors de la création du canal:

# Create an entity in the database and use its key as the clientid 
    client = Client(name=username, connected=False) 
    client.put() 
    token = channel.create_channel(str(client.key())) 

    # Then pass that token down to your client 

maintenant dans votre connecter ou déconnecter gestionnaire, mettre à jour la propriété 'connecté':

class ConnectHandler(webapp.RequestHandler): 
    def post(self): 
    client = Client.get(Key(self.request.get('from'))) 
    client.connected = True 
    client.put() 

# Have a similar class for DisconnectHandler, 
# or be more clever by inspecting the path. 

Enumerating votre C Le fait de les afficher et de les afficher est un exercice laissé au lecteur. Comme mise à jour dynamique de la liste pour les clients existants.

Questions connexes