@Override
 public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
   // Событие вызывается при подключении клиента. Я создаю здесь Worker игрока — объект, который
   // занимается обработкой данных игрока
   // непостредственно.
   // Я передаю ему канал игрока (функция e.getChannel()), чтобы он мог в него посылать пакеты
   worker = workerClass.newInstance();
   worker.setChannel(e.getChannel());
   worker.setClientHandler(this);
   // worker = new InterserverWorker(this, e.getChannel());
   // log.info("channelConnected");
 }
 @Override
 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
   // Функция принимает уже готовые AbstractPacket'ы от игрока, поэтому их можно сразу посылать в
   // worker. За их формирование отвечает другой обработчик.
   // log.info("messageReceived");
   if (e.getChannel().isOpen()) worker.acceptPacket((AbstractPacket) e.getMessage());
 }
 @Override
 public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
   // Событие закрытия канала. Используется в основном, чтобы освободить ресурсы, или выполнить
   // другие действия, которые происходят при
   // отключении пользователя. Если его не обработать, Вы можете и не заметить, что пользователь
   // отключился, если он напрямую не сказал этого
   // серверу, а просто оборвался канал.
   // log.info("channelDisconnected");
   worker.disconnectedFromChannel();
 }