В настоящее время я занят работой над инструментом запрета IP для ранних версий Call of Duty 1. (Очевидно, такая функция не была реализована в этих версиях).
Я закончил однопоточное приложение, но оно не будет работать достаточно хорошо для нескольких серверов, поэтому я пытаюсь реализовать многопоточность.
Прямо сейчас каждый сервер имеет свой собственный поток. У меня есть класс Networking, у которого есть метод; «GetStatus» - этот метод синхронизирован. Этот метод использует DatagramSocket для связи с сервером. Поскольку этот метод является статическим и синхронизированным, я не должен попадать в неприятности и получать целую кучу исключений «Адрес уже используется».
Однако у меня есть второй метод с именем «SendMessage». Этот метод должен отправить сообщение на сервер. Как я могу убедиться, что SendMessage не может быть вызван, если в GetStatus уже есть поток, и наоборот? Если я сделаю оба синхронизированных, у меня все еще будут проблемы, если Поток A открывает сокет на порту 99999 и вызывает «SendMessage», в то время как Поток B открывает сокет на том же порту и вызывает «GetStatus»? (Игровые серверы обычно размещаются на одних и тех же портах)
Полагаю, что на самом деле я ищу способ синхронизировать весь класс, так что один поток может одновременно вызывать и запускать только один метод.
Надеюсь, что то, что я пытаюсь достичь / избежать, разъясняется в этом тексте.
Любая помощь очень ценится.