Я действительно понял, как это будет работать. В моем примере сервер сохраняет пространство состояний для клиента A и клиента B. В случае, когда сервер сначала получает сообщение клиента A, сервер получает сообщение с вектором состояния (0, 0), вставляет F, а затем обновляет свои векторы состояния быть (1, 0) и (0, 1) для A и B соответственно (где первое число - это количество сообщений от клиента, которые были обработаны, а второе - количество сообщений от сервера, которые были обработаны). обработанный). Затем сервер отправляет «вставить F в позиции 0» с вектором состояния (0, 0) (поскольку это было состояние сервера в пространстве состояний B, когда сообщение было получено сервером) и получает «вставить G в позиции 0» из B отправлено с состоянием (0, 0). Поскольку сервер находится в состоянии (0, 1) в пространстве состояний B, он сначала преобразует сообщение (и, аналогично, поскольку B находится в (1, 0), когда он получает сообщение сервера, он также преобразует сообщение, полученное от сервер). Поскольку преобразования должны быть настроены так, что если xform (c, s) = (c ', s'), то c ', примененный к s, равен s', примененному к c, B, и сервер окажется в том же состоянии. То же самое происходит с сообщением, которое сервер получил от B, а затем отправляет его A.