Я создаю небольшой игровой клиент, который в конечном итоге подключится к серверу, чтобы собрать некоторую информацию о доступных играх, в которые они играют, сколько игроков играют и все другие вещи, которые вы можете себе представить.
Мои трудности связаны с поиском эффективного способа обработки последовательности подключения / повторного подключения при первой загрузке.
Я предполагал, что мой клиент будет следовать этому процессу при попытке подключения:
- Выполнено клиентское приложение
- Попробуйте установить соединение
- Если соединение установлено успешно, собрать информацию - Если не удалось, перейдите к шагу 4
- Отображение нового диалогового окна / формы, в которой пользователю предлагается установить соединение
- Цикл до установления соединения
Я подверг сомнению мои методы, пытаясь следовать этой последовательности. Я спрашиваю, является ли это правильным / наиболее эффективным способом подключения, а также почему моя форма, отображаемая на шаге 4, не работает?
try
{
sock.Connect(authenServerEP);
// Once connected show our main client window
this.Show();
// Create the LoginForm once a connection has been established and display
LoginForm loginForm = new LoginForm();
loginForm.ShowDialog();
if (false == loginForm.Visible)
{
loginForm.Dispose();
}
}
catch (SocketException firstConnectException)
{
// Load retrying connection form
EstablishingConnectionForm establishingConnectionForm = new EstablishingConnectionForm();
establishingConnectionForm.Show();
bool connected = false;
// Loop until we are connected
while (!connected)
{
try
{
sock.Connect(authenServerEP);
connected = true;
establishingConnectionForm.Dispose();
}
catch (SocketException retryConnectException)
{
// Pass and retry connection
}
}
} // end catch (SocketException firstConnectException)
Как видите, я ловлю исключение SocketException, возникающее при возникновении проблемы с подключением к серверу (например, если сервер не работает). Затем я продолжаю пытаться непрерывно зацикливаться, пока соединение не будет установлено. Я не знаю, должен ли я делать это таким образом. Есть ли лучшие способы сделать это?
Также, когда я показываю установлениеConnectionForm с помощью Show (), это не похоже на инициализацию всех форм / инструментов (инициализация может вводить в заблуждение). Ярлык, который находится на форме, просто закрашен белым, в отличие от отображения текста. Не только это, но кажется, что я не могу выбрать форму / диалог и фактически переместить его. Он сидит там со значком мыши «Мышление / Работать». Теперь я предполагаю, что это потому, что я зацикливаюсь, пытаясь восстановить соединение и его блокировку из-за этого (я мог ошибаться в блокировке?). Можно ли решить эту проблему с помощью многопоточности? Если да, то мне нужно многопоточность? Есть ли более простой способ показать мою форму / диалоговое окно и иметь возможность взаимодействовать (например, обвести его вокруг и закрыть с помощью «X» в верхнем правом углу), пока я все еще пытаюсь восстановить соединение?
Спасибо большое. Я очень ценю, что вы читаете этот пост, и благодарен за это сообщество. : D