| 46 | | * All communication is done within so-called groups. A group is identified by its name. Hosts can be member of a group. Messages can be sent by a group member to either another member or to the whole group. Such a group-related message looks like this: |
| 47 | | |
| 48 | | {{{ |
| 49 | | <message from="armin@0x539.de" to="phil@0x539.de"> |
| 50 | | <group name="InfDirectory" publisher="armin@0x539.de" scope="ptp"> |
| 51 | | <more-content /> |
| 52 | | </group> |
| 53 | | </message> |
| 54 | | }}} |
| 55 | | |
| 56 | | Scope can be either "ptp" (point-to-point) or "group". If scope is "ptp", the message is only for the recipient (here phil@0x539.de). If scope is "group", the message is for the whole group. In this case, phil@0x539.de has to relay the message to all the group members that do not yet have received the message. For example, in a client/server network, the server should relay the message to all other clients (except the one the message comes from). |
| 57 | | |
| 58 | | When using the jabber network, nothing has to be done because the original sender (armin@0x539.de) already has "direct" connections to the other group members (actually their JID and a connection to the jabber server). Note that this is not yet fully designed, because all group members need to get to know the others JIDs. Some special <group-join> messages are probably required therefore. Note also that this could also be implemented by jabber groupchat to reduce bandwidth. |
| 59 | | |
| 60 | | Each group has a publisher, this is the host that "opens" the group. This way, two groups with the same name opened on different hosts can coexist. Another thing I am not totally sure about is whether it would be a good idea to use IP address and port number for the publisher for direct connections (i.e. when not using the jabber network). However, a host has to be aware of the fact that the same group it opened may be addressed via different publisher strings in different networks. |
| | 36 | All communication is performed within so-called groups. A group is identified by its name and publisher (see below). Hosts can be member of a group. Groups are basically used to abstract away connections between all subscribed users of a session. A group guarantees that it is possible for each member to send a message to all others members, but it depends on the ''Communication method'' on how the message is actually delivered. This can be a simple client/server architecture where the server relays all the client's messages, or it can be some form of peer-to-peer or multi-user chat. See more on communication methods below. |
| | 37 | |
| | 38 | {{{ |
| | 39 | <group name="InfDirectory" publisher="armin@0x539.de" scope="ptp"> |
| | 40 | <more-content /> |
| | 41 | </group> |
| | 42 | }}} |
| | 43 | |
| | 44 | Scope can be either "ptp" (point-to-point) or "group". If scope is "ptp", then message is only for the recipient. If scope is "group", the message is for the whole group. In this case the receiver needs to relay the message to all the group members that do not yet have received the message (which is depending on and performed by the communication method). |
| | 45 | |
| | 46 | Each group has a publisher which is the host that opened the group. For each network that the host is part of, the host needs a unique identification string. For example, a host could be part of both a TCP/IP and a Jabber network. Then, the publisher ID could be its JID on the jabber network and its IP and Port number (in a normalized form) on the TCP/IP network. The term network here refers to the fact that members of a network cannot technically communicate with members of another network. So, if a message contains a given publisher string, all potential recipients can identify the corresponding host. |
| | 47 | |
| | 48 | [wiki:Infinote/Libinfinity Libinfinity], the infinote implementation Gobby uses, corrently simply use host-local UUIDs as publisher strings. However, this might change in future. |
| | 49 | |
| | 50 | === Communication Methods === |
| | 51 | |
| | 52 | TODO |