I want to use XMPP to push data to my client which would translate to a notification for the user, and plan on using their google-id for login to my application. The way I understand XMPP is that its a simple message that goes directly to the adress, but I want the client to get it as instructions and turn it into gamestate information.
It would be very frustrating for a user to get a bunch of command tuples or hex garbage in their google chat! Am I misunderstanding the way this all works?
JIDs (Jabber/XMPP IDs and therefore Google Talk IDs) have several forms.
First is a “bare JID”, e.g.:
user@example.comSecondly is a “full JID”, e.g.:
user@example.com/xyz123, wherexyz123is called the resource.One user can be logged into their XMPP account from multiple clients simultaneously, so long as each client uses a unique resource. With Google Talk, usually the server allocates the resource.
When you talk to someone on XMPP normally you address messages using their bare JID — you don’t care about which client the message gets delivered to; that person’s server directs it to the appropriate client(s) based on their availability etc.
But you can also address a message directly to a full JID. This is what you want to do, so that only
user@example.com/my-game-some-unique-IDreceives your game-specific messages.Whether the Google App Engine API gives you this flexibility, I have no idea 🙂
An alternative — again, if GAE allows this — is to send a different message type.
XMPP is eXtensible, meaning that you don’t have to send a plain old
<message/>stanza to the end user; you can stick a specialised payload inside there like a<game/>child stanza and, because regular IM clients don’t know how to parse your<game/>stanzas, they show nothing to the user. Only your game client will parse and understand this info.