Minecraft изнутри - статья 2, сеть
Окей, продолжаем, и уже более серьезное.
В этом посте мы разберем, как майнкрафт работает с сетью.
![](/img/icon_plus.gif)
![](http://rom-soft.ru/out/img/mc_tutorial/8.png)
Заведует сетью у нас класс TcpConnection - Б-г всея network-a майнкрафта. При старте он запускает два потока, отвечающих за чтение и прием данных: TcpReaderThread и TcpWriterThread
Этот класс отвечает за получение\отправку пакетов, а так же обработку принятых.
При остановке сетевого обработчика запускается TcpMasterThread, выполняющий нехитрую функцию - получает из TcpConnection оба потока и останавливает их, если они еще не остановились.
TcpReaderThread читает буфер на появление новых пакетов с некоторой переодичностью, помещая их в TcpConnection.readPackets, с последующим дерганьем NetHandler, для клиента - свой, для сервера - свой. Сам же NetHandler сопоставлял пришедший пакет конструкцией вида
if(packet instanceof Packet1Login) {
...
}elseif(...) {
...
}
и вызывает соответствующую функцию.
TcpWriterThread отправляет пакеты, которые мы передаем в TcpConnection функцией addToSendQueue. Они накапливаются в TcpConnection.dataPackets и постепенно захватываются нашим потоком. Тут не происходит ничего особенного
![](/img/smilies/icon_smile.gif)
Так же TcpConnection следит за таймаутами подключений и закрывает соединение, если не дожидается ответа.
В принципе, сеть реализована неплохо, но использование стандартного java.io.* очень сильно снижает производительность.
А еще я реализовывал в одном из своих проектов аналог TcpConnection, исходники есть на GitHubНе сработает для Galaxy, хехе
Ну, это все на сегодня. Завтра я расскажу про пакеты и алгоритмы авторизации, там довольно много интересного.
901 специально для MCGL. При копировании указание копирайта обязательно.