Какое сделать клиент-серверное взаимодействие при PvP в мобильной игре?
Здравствуйте! Делаю игру для смартфонов на Unity, возможно вы читали мои статьи с хабра (Истории о фееричных провалах в геймдеве, часть 1 и 2). Дошёл до PvP части и возник вопрос: какую архитектуру клиент-серверного взаимодействия надо делать?
Как происходит PvP:
1. Игрок авторизуется через vk (пока только через него, т.к. софтланч планирую на Россию и СНГ)
2. У игрока загружается список друзей. Тем, у кого есть игра, можно сразу отправить приглашение в PvP, а тем, у кого нет, можно отправить на стену предложение установить игру
3. Другому игроку приходит приглашение в PvP и он делает свою ставку в игровой валюте на свою победу
4. Игровые сессии происходят асинхронно, игрок взаимодействует только с противниками, вид и частоту появления которых я устанавливаю заранее. Побеждает тот игрок, кто наберёт большее количество очков в таком PvE сражении.
Что я больше всего не понимаю: какую информацию надо считывать с другого игрока, чтобы отправить ему приглашение? Как я понимаю, надо выцепить информацию об игроке 2 из api контакта, чтобы заслать ему инвайт, верно? Что это за информация?
Буду благодарен за любую полезную информацию и ссылки, в том числе о подводных камнях. Я тоже ищу эту инфу, но может от меня может что-то ускользнуть.
Сервер планирую делать на Apache + Mysql + Codeigniter (выбрал этот фреймворк т.к. в нём документация на мне показалось более понятной чем в Yii). До этого ранее серверной разработкой никогда не занимался.
Вы когда подключаете любого игрока к серверу, на сервере отмечайте, что он онлайн. Далее при необходимости ищете в своем списке онлайн-игроков и высылаете ему приглашение.
Упрощенно подключение:
1) Подключить игрока к серверу.
2) Внести его id в список онлайн.
3) Установить ему статус "вне боя"
Упрощенно поиск соперника:
1) Посмотреть в список онлайн, найти первого у кого статус "вне боя"
2) Создать комнату для боя, поместить в нее обоих участников
3) Обоим участникам выставить статус "ожидает боя".
4) Отправить приглашение обоим участникам.
5) После согласия обоих участников - выставить обоим статус "в бою" и начать бой.
Детали реализации и выбор технологий подключения к серверу, хранения сессии, вопросы обновления информации сессии и ее актуальности (до сих пор ли игрок онлайн) - оставляю за рамками этого ответа. Вероятно у vk-api есть какие-либо способы узнать о том, онлайн пользователь или нет. Но скорее всего придется реализовать самому.