I am working on a small piece of our Volity project, and I see several ways to do it. They'll all work, but I'm not sure which is most in tune with the zen of Jabber.

What I want to do is send a game invitation as part of a <message>. (Could be either IM or group-chat.) This is a set of fields; if one of our Volity clients receives it, the invitation will be displayed with appropriate UI ("Do you want to join this game? [] yes [] no" and so on.) If a generic client receives the message, it should ignore the invitation part and display it as a standard message.

So option 1 would be to define some new protocol, maybe with a JEP (if any other clients want to handle the invitation info), and stick the fields directly into a custom element:

<message to="..." from="..." type="normal">
  <body>Play a game!</body>
  <invitation xmlns="http://volity.org/protocol/invite";>
    <table>...</table>
    <referee>...</referee>
  </invitation>
</message>

(There are more fields than that; I'm simplifying here.)

This is fine, except that we may add or redefine fields as we expand our goals. And I don't want to change the XML schema every time that happens. Okay, Jabber has a way to handle that, which is data forms. So, option 2:

<message to="..." from="..." type="normal">
  <body>Play a game!</body>
  <invitation xmlns="http://volity.org/protocol/invite";>
    <x xmlns="jabber:x:data" type="result">
      <field var="table"><value>...</value></field>
      <field var="referee"><value>...</value></field>
    </x>
  </invitation>
</message>

But then I notice JEP-0068, and I think maybe I can do this without any custom protocol at all. Option 3:

<message to="..." from="..." type="normal">
  <body>Play a game!</body>
  <x xmlns="jabber:x:data" type="result">
    <field var="FORM_TYPE" type="hidden">
      <value>http://volity.org/protocol/form/invite</value>
    </field>
    <field var="table"><value>...</value></field>
    <field var="referee"><value>...</value></field>
  </x>
</message>

So our client watches for a result form of the appropriate FORM_TYPE, and other clients ignore the extraneous (to them) form.

Which of these is most friendly to the Jabber system? We've gotten this far by using existing JEPs, so I have a slight preference to *not* introduce new Jabber protocol. But I'm more interested in figuring out what will work right with existing and future Jabber software.

--Z

--
"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
*
Making a saint out of Reagan is sad. Making an idol out of Nixon ("If the
President does it then it's legal") is contemptible.

Reply via email to