Изучаю Multiplayer Tutorial http://unity3d.com/support/resources/tutorials/iphone-multiplayer-tutorial
Там на начальном этапе запускаются два экземпляра Unity на одном компе. На одном создается сервер, второй подключается как клиент к адресу 127.0.0.1. И вроде как все работает. Состояние игры изменяется синхронно в обоих экземплярах.
После этого я решил немножко переделать этот пример, так, чтобы первый запущенный экземпляр становился сервером, а второй подключался к нему как клиент.Чтобы игра могла решить как себя вести: создавать сервер или подключатся к уже запущенному серверу, она должна знать запущен уже сервер или нет. При этом адрес потенциального сервера известен.
К сожалению мне не удалось найти функцию, позволяющую определить, есть по данному адресу сервер или нет.
Вопрос: Такая функция есть? Или есть какой-то способ определения наличия сервера?
После этого я решил попробовать определять наличие сервера вызовом функции Network.Connect и проверкой возвращаемого значения. К сожалению эта функция у меня всегда возвращала NoError, независимо от того удалось подключится или нет.
Более того, тут всплыла вторая проблема, если вызвать функцию Network.Connect к адресу, по которому сервера нет, то через несколько секунд в консоль выдается сообщение об ошибке "The connection request to 127.0.0.1:25000 failed. Are you sure the server can be connected to?" после чего игра зависает.
Второй вопрос: как бороться с этим зависанием?
Ведь получается, даже если я буду использовать более общепринятую схему с мастер-сервером, где вроде как заранее известно, что сервер по эту адресу есть, то все равно, никто не гарантирует, что сервер внезапно не исчезнет. В этом случае клиент зависнет, что крайне не желательно.