3.1.5.4 Server Disconnects from Chat Session

A server can leave without destroying the chat session. The DirectPlay DXDiag Usage Protocol allows hosting to migrate to another member currently in the game session.<14>

  • The hosting migration begins with the server sending a TRANS_USERDATA_END_OF_STREAM packet to all clients in the game session.

  • Each client responds with four TRANS_COMMAND_SACK packets and a TRANS_USERDATA_END_OF_STREAM packet (in any order).

  • The server sends four TRANS_COMMAND_SACK packets to each client, and disconnects.

  • If other clients are present in the game session, the client that has been in the game session the longest becomes the new server and contacts each client with a TRANS_USERDATA_HOST_MIGRATE user data packet.

  • Each client sends a TRANS_USERDATA_NAMETABLE_VERSION user data packet to the new server.

  • If the name table of any client is older than the name table of the new server, the new server ends the migration sequence for that client with TRANS_USERDATA_HOST_MIGRATE_COMPLETE and TRANS_USERDATA_DESTROY_PLAYER packets, in any order. The TRANS_USERDATA_DESTROY_PLAYER packet identifies the previous host to remove from the client game session list.

  • Otherwise, if the new server determines that there is a client with a newer name table, the new server will request entries from the client with the newer name table that are not contained within the name table of the host, using the TRANS_USERDATA_REQ_NAMETABLE_OP packet.

  • The new server sends a TRANS_USERDATA_RESYNC_VERSION packet to all clients to get every participant in sync.

  • The server sends a TRANS_USERDATA_HOST_MIGRATE_COMPLETE packet to all connected peers.