Я оцениваю OPA для создания совместной электронной таблицы в реальном времени (источник здесь:
https://github.com/omarbenhamid/Cloudsheet/blob/master/cloudsheet.opa)
Я хочу, чтобы люди работали в режиме реального времени с электронными таблицами, я хочу создать Network.cloud для каждой электронной таблицы, чтобы сообщать обновления всем пользователям, просматривающим электронную таблицу.
Каждая ячейка <input type="text" onkeypress={event->keyboard_update(event,sheetname,row,column)}/>
Когда вызывается keyboard_update
, я хочу передать сообщение в облаках электронной таблицы, чтобы другие зрители были обновлены. Но вот моя проблема:
keyboard_update(event,sheetname,row,column) = (
Network.broadcast({/*my update notif message*/}, Network.cloud(sheetname))
)
Это ведет себя так же, как новая сеть создается при каждом вызове, даже если API-документ Network.cloud говорит:
«Когда один или несколько серверов вызывают Network.cloud (k) с одинаковым значением k, фактически создается только одна сеть»
Единственное решение, которое я нашел, - индексировать мои облака в ассоциативном списке, который хранится в глобальной изменяемой таблице:
clouds = Mutable.make([] : list((string,Network.network(message))))
И загрузите мое облако с помощью List.assoc и, в случае необходимости, добавьте его в индекс (см. Функцию getcloud в исходном коде).
Почему мой первый подход к использованию Network.cloud (имя листа) в качестве параметра Network.broadcast неверен?