Project Title: Pidgin plugin for PySoy

Student: Mayank Singh

Organization: Python Software Foundation


Introduction
This project aims to refine/extend the User Gaming extension to XMPP (XEP - 0196) and utilize it in a plugin for pidgin to handle game notifications with pysoy games as an example. The plugin will add the ability to launch games directly from the xmpp client as well as other features like listing currently running games and a possible multiplayer lounge using MUC (XEP - 0045). The XEP - 0196 is highly dependent on the Personal Eventing Protocol (XEP - 0163) and will act as a natural extension to that.

Ideas for the XEP-0196:

  • As is clear from the current deferred specification of the XEP - 0196, it is too specifc to Massively Multiplayer Online Games like World of Warcraft.
  • The specification I plan to build aims to contain elements that are common to any type of game.
  • A possible table defining child elements for the <game> element which propagates game notification:
ElementDescriptionExampleDatatypeInclusion
nameThe name of the gamePing pong xs:stringREQUIRED
uriURI to launch the gamehttp://134.56.78.9/gameno123.extxs:anyURIOPTIONAL
descriptionAny other text to be broadcastedThree slots left. Joinxs:stringOPTIONAL
web_resourceSome web link related to the game http://www.randomgame.com xs:anyURIOPTIONAL
  • Transport mechanism could be quite similar to the current one.
  • I will use the wiki (additional link) to describe more ideas regarding this.

The plugin:
The planned implementation for the plugin should work like this:

  • A pysoy client acting as a "game server" starts a game and it connects to the xmpp server to broadcast to all its subscribers that a game is being played in the form of status notifications.
  • People running pidgin clients see this on this person's status message, who launched the pysoy server.
  • They start a conversation with this fellow.
  • If they have the correct plugin activated, they'll be able to find an option for launching the game via an external client that can be determined by the mime type of the resource in the uri.
  • The plugin's menu should have options to list all games being played by a user's friends, launch a multiplayer lounge(MUC) for a particular multiplayer game, etc.


The UI:

The visible changes to the UI of pidgin will be:

Change of status to a proper game notification.

http://dl.dropbox.com/u/24945789/status_notification.png

Addition of game elements to the conversation menu if the plugin is activated:

http://dl.dropbox.com/u/24945789/menu_option.png
Plus other possible changes due to the features listed below.

Game Launch:

The part of the pidgin plugin is only to provide the ability to launch the game being played by a member of a person's roster using possibly a URI provided by the xmpp data transmitted from the player's end. The part of broadcasting the game notification falls under the area of the libsoy's built-in xmpp client.
Games Listing:

The xmpp data being broadcast by the various friends on a person's roster can be collected and represented as submenu items to a menu item "List all games" or in a separate window allowing the user to select and join the game he wishes to play.

Multiplayer Lounge:

Using the same xmpp data, we can create separate multiplayer lounges for players interested in the same game with a listing of currently ongoing games indicating which games are full and cannot be joined and which need more participants and can be joined. Also, I can provide an MUC facility for onlookers who haven't yet joined a game and are waiting for a game to start. The difference between this feature and the above feature is that the above feature lists all games, be it of any type. However, this feature aims to create separate lounges for different games.

Schedule
Start of Program (April 25 - May 24)

  • (April 25 - April 28) - Get to know the mentor and read up some codebase.
  • (April 29 - May 13) - College Exams!!
  • (May 14 - May 20) - Make a rough draft of the refined XEP - 0196.
  • (May 21 - May 24) - Refine XEP - 0196 more.

Till Midterm Evaluation (May 25 - July 12)

  • (May 25 - June 1) - Complete refining XEP -0196 and prepare a draft ready to put up for vote. Document it.
  • (June 2 - June 6) - Plan out detailed functioning of game launch, listing of games and multiplayer lounges and document them.
  • (June 7 - June 15) - Prepare plugin skeleton and add ability to read game notification data.
  • (June 16 - June 23) - Add option to launch game based on game notification data of a person right inside the conversation window.
  • (June 24 - July 4) - Develop examples in pysoy to test out game launch.
  • (June 5 - July 12) - Test out game launch and write unit tests.

Till Final Evaluation (July 13 - Aug 16)

  • (July 13 - July 19) - Implement Game listing feature and test it out.
  • (July 20 - August 5) - Work on the possible multiplayer lounge.
  • (August 6 - August 16) - Write any missing documentation and do final tests.

Progress
Weekly progress will be noted down here.

Who Am I?
I am Mayank Singh from BITS-Pilani, Goa Campus, India. I am currently pursuing B.E.(Hons.) in Computer Science and am currently in the second year of my studies. You can follow the following links for more information regarding my work experience or just about me.

References