Меня интересует алгоритм репликации древовидной структуры объектов.
Сначала я опишу задачу, внизу задам вопросы.
1. Есть деловая компьютерная игра — пошаговый экономический симулятор финансовой деятельности предприятия. Сразу скажу, дабы не вызвать упреков в неэффективности, данных мало. Максимум — 1000 объектов ~ 2 мб.
2. Есть собственноручно написанный многопоточный сервер на основе TCP/IP. Сервер сам по себе умеет все (коннект, дисконект, передача запроса обработчику запросов), кроме того, для чего он создавался — обслуживание игрового процесса. Т.е. есть как бы фреймворк для создания игрового процесса, который еще не спроектирован.
3. По ряду причин
не была выбрана "чистая" архитектура "клиент-сервер", т.е. когда
только сервер хранит данные, а клиенты спрашивают нужную порцию для отображения и изменения. Была выбрана следующая архитектура — клиент и сервер хранят полную информацию, которая переодически реплицируется. Такое решение было принято по той причине, что помимо сетевой игры, нужна еще и дискетная (да, у нас бывают бедные ВУЗы). А там не набегаешься на каждый запрос с дискетой.
4. Структура данных имеет вид (приведу схематично в виде XML, хотя это просто объекты в памяти)
<game>
<firm number = "1">
<month number = "1" ... и еще куча атрибутов>
... кое какие подиченные объекты
</month>
<month number = "2" ... и еще куча атрибутов>
... кое какие подиченные объекты
</month>
</firm>
<firm number = "2">
тоже самое, что и для фирмы 1
</firm>
и так далее - фирм может быть до 10
</game>
5. Обращаю внимание:
а) Каждый клиент (т.е. программа фирмы) меняет только свой кусочек (т.е. свою веточку тэга <firm>.
б) Конфликтов измененений нет. Т.е. ситуация, когда один и тот же объект был изменен на сервере и клиенте недопустим.
в) Удалений объектов нет
г) Создание объектов есть.
6. Типичный сценарий взаимодейтсвия клиента и сервера такой:
а) фирма принимает решения (жмет спец. клавишу). При этом соотв. тег <firm> меняет только фирма, сервер — нет.
б) программа фирмы посылает репликационные данные на сервер.
в) сервер их заносит в свое дерево объектов. После этого фирма менять тег <firm> не может.
г) когда все фирмы заявили о готовности к переходу к след. месяцу сервер производит пересчет модели. При этом меняются теги <firm> для каждой фирмы.
д) фирмы получают порцию репликационных данных. Заносят их у себя в дерево объектов и цикл продолжается.
Что я хочу
1. Я хочу написать обобщенный алгоритм репликации объектной структуры с учетом приведенных выше ограничений. Под обобщенным алгоритмом я понимаю следующее: есть суперкласс, способный быть хозяином объектам этогть же класса, класс имеет методы, которые при указанных выше ограничениях способны провести репликацию.
2. Получить ссылочку на обобщенную теорию репликации. Я порыл разную литературу, ничего найти не смог.