Это школьный проект, пожалуйста, не указывайте код, я только ищу подсказки, которые направят меня в правильном направлении.
Напишите и протестируйте игровой сервер, на который подписываются клиенты. После подписки клиент получает список игр (одна и та же игра, просто разные ее «экземпляры»), которые в данный момент находятся в игре. Затем клиент может присоединиться к игре или начать новую. В игре должно быть как минимум два игрока, прежде чем она начнется. Система должна поддерживать несколько клиентов, играющих в одну игру, или несколько клиентов, играющих в несколько игр.
Цель этого проекта — получить опыт работы с Java, TCP и многопоточностью.
В моем текущем дизайне и реализации есть 2 файла: server.java и client.java.
- Файл сервера имеет 3 класса: Сервер, Лобби и Игра.
- Файл клиента имеет 1 класс: Client.
Реализация "игры" тривиальна, меня это устраивает.
В настоящее время класс сервера устанавливает TCP-соединение с классом клиента. Каждый раз, когда создается экземпляр клиента, сокет принимается в классе сервера, и программа продолжается.
Продолжая, класс сервера создает класс лобби.
У меня проблема с классом лобби. По умолчанию я создаю 1 «игровой» объект и передаю clientSocket:
game g = new game(clientSocket, playerID);
g.start();
Класс игры расширяет поток, и я считаю, что это правильный способ сделать это. Каждая «игра» будет, так сказать, отдельным потоком, поэтому игроки A и B могут совместно использовать 1 поток, а игроки C и D могут начать новую игру с другим потоком.
Я новичок в потоках, но это лучшая реализация, которую я мог придумать. Я исключил наличие нескольких потоков для лобби, так как это не имеет особого смысла, и несколько потоков для клиентов тоже бессмысленны, поэтому я думаю, что многопоточность класса игр идеальна.
Прямо сейчас, когда я создаю 2 экземпляра клиента, они оба присоединяются к одному и тому же «потоку» (они оба находятся в одной игре и могут общаться друг с другом).
Как я должен это сделать, чтобы новый игрок мог ввести «новый» или что-то еще в лобби и создать новую «игру», где это новый поток.
Я уверен, что неправильно понял некоторые части о многопоточности или еще о чем-то, но я ценю любую помощь.