Я создаю мобильное онлайн-приложение для рисования в ReactNative. Пользователи могут присоединяться к комнатам, в которых может быть до 4 пользователей, где они могут рисовать вместе и видеть нарисованные фигуры друг друга на взаимно видимой доске.
Я бы хотел назначить каждому из 4 пользователей уникальный стиль, например,
// Styles are a mix of color and lineStyle to accommodate color blindness
const style1 = { color: "#fff", lineStyle: "dashed" }
const style2 = { color: "#0f0", lineStyle: "solid" }
Однако я хотел бы назначить эти стили на стороне клиента без необходимости централизованного управления и назначения стилей на сервере.
Стили могут быть предопределены из набора из 4 или более или могут генерироваться динамически. Комната должна обрабатывать пользователей, покидающих и воссоединяющихся (например, вручную или из-за отключений), а также уходящих пользователей и других присоединяющихся других пользователей. В любое время t никаким двум пользователям в данной комнате не должен быть назначен один и тот же стиль, и данный пользователь должен сохранять один и тот же стиль все время, пока он находится в комнате, и в идеале восстанавливать один и тот же стиль, если они покидают / воссоединяются в быстрой последовательности ( например, из-за отключения).
Я буду использовать что-то вроде Ably для передачи данных между клиентами.
Я мог бы использовать серверную часть Redis для поддержки уникальных карт того, у какого пользователя какой стиль, но я бы предпочел сделать это на стороне клиента для простоты разработки.
В идеале количество различных стилей должно быть небольшим - я не хочу связку случайных цветов, которые находятся на небольшом расстоянии друг от друга.
Итак, учитывая, что у меня есть комната R с 4 случайными пользователями user1, ..., user4, как я могу назначить стили каждому пользователю таким образом, который, скорее всего, будет уникальным и без коллизий?