Честно говоря не знаю этот вопрос лучше в игры или сюда, ну да ладно — поближе к делу...
Пишем игру: крестики-нолики, в которых надо поставить 5 оных в ряд для победы... всё б хорошо, но нужно сделать сетевой мультиплэйер! Хотелось бы использовать RPC, но возникает вопрос: кто из 2х игроков клиент, а кто сервер? они ведь равноправны по сути... неужели нужно сделать обоих игроков клиентами, и ои все посылают данные о своём ходе серверу, а сервер обрабатывая всё, посылает данные клиентам... ОП! но если сервер посылает данные клиентам, т.е. используя РПС, он вызывает некую функцию клиента, то он клиент, а клиент на самом деле сервер... и ничего не понятно как что делать...
можете ли помочь с нерахберихой?
советы типа: "поспал бы ты, сынок", "иди домой" или "пить надо меньше" — принимаются (чую без них не обойдётся)...
Все просто. Игра пытается сначала получить запрос на бродкастовый пакет на предмет наличия в сети сервера. Если его нет — сама становится сервером и ждет 1 коннекта. Все. После коннекта естественно отвечать на бродкаст игре не надо.
Re[2]: RPC для игры
От:
Аноним
Дата:
15.12.03 07:13
Оценка:
Здравствуйте, SpecialForSupport, Вы писали:
SFS>Все просто. Игра пытается сначала получить запрос на бродкастовый пакет на предмет наличия в сети сервера. Если его нет — сама становится сервером и ждет 1 коннекта. Все. После коннекта естественно отвечать на бродкаст игре не надо.
Но смотри, если я правильно понял, всё интересное начинается сейчас:
Игрок1 сделал ход, поставив крест в точке (х,у). Об этом нужно сообщить Игроку2. Если Игрок2 сервер, то удалённо (через RPC) вызываем функцию: MakeMove(x,y); Всё хорошо, Игрок2 получит информацию...
Но! теперь ход за Игроком2. он поставил нолик на (p,q) об этом надо сообщить Игроку1.
Варианты:
* Этот ход происходит пока ещё функция MakeMove(x,y); не вернула какое-либо значение клиенту, и как раз этим возврашаемым значением и будет ход сервера (p,q); И так далее: клиент ходит, сервер принимает ход и отвечает, клиент принимает ход сервера и опять ходит...
* Оба игрока серверы, и каждый из них вызывает удалённые процедуры у другого (MakeMove(int,int)). Такое возможно?
Re: RPC для игры
От:
Аноним
Дата:
15.12.03 15:44
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуй, сетевой All!
А>Честно говоря не знаю этот вопрос лучше в игры или сюда, ну да ладно — поближе к делу... А>Пишем игру: крестики-нолики, в которых надо поставить 5 оных в ряд для победы... всё б хорошо, но нужно сделать сетевой мультиплэйер! Хотелось бы использовать RPC, но
а разве так получиться? т.е. если одна прога может быть и клиентом и сервером, то как вызывать RPC функции?
я точно такое делал сокетами неблокирующими.
Re[2]: RPC для игры
От:
Аноним
Дата:
16.12.03 11:26
Оценка:
Здравствуйте, Аноним, Вы писали:
А>а разве так получиться? т.е. если одна прога может быть и клиентом и сервером, то как вызывать RPC функции?
In this example, we will write a talk program that allow two users to send messages to each other.
... поскипано [примечание анонима]
Design of the interface
... поскипано [примечание анонима]
Our talk system will be just one program named talk2. One user starts talk2 first, and another user executes the same program to communicate with the first user, knowing he/she is there waiting. Talk2 must be both a server and a client of the same RPC interface, when sending message to the peer, it is a client, when receiving message, the role is reversed, and it becomes the server.
Здравствуйте, <Аноним>, Вы писали: А>* Этот ход происходит пока ещё функция MakeMove(x,y); не вернула какое-либо значение клиенту, и как раз этим возврашаемым значением и будет ход сервера (p,q); И так далее: клиент ходит, сервер принимает ход и отвечает, клиент принимает ход сервера и опять ходит...
Вполне себе хорошая идея. Даже RPC не надо по хорошему — вполне хватит TCP.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.