Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Decrypt packets (https://forum.zone-game.info/showthread.php?t=30735)

Sun 08.08.2013 14:34

Decrypt packets
 
Всем привет! Хроники IT. Ядро самопал. Суть проблемы: не получаеться decrypt packets.
Код:

Exception in thread "Thread-0" java.lang.NegativeArraySizeException
:( Help!!!!

Visor 08.08.2013 14:36

Re: Decrypt packets
 
NegativeArraySizeException - негативный размер массива, ошибка

Sun 08.08.2013 14:56

Re: Decrypt packets
 
А так ;)
Код:

public void read(ByteBuffer buffer) {
                int size =  buffer.getShort();
               
                int position = buffer.position();
               
                decrypt(buffer, position, size);
               
                int id = buffer.get();

                switch(id) {}
}

Код:

public void decrypt(ByteBuffer buffer,int offset,int size) {
                try { //LoginCrypt crypt
                        crypt.decrypt(buffer.array(), offset, size);
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }


n3k0nation 08.08.2013 17:23

Re: Decrypt packets
 
На Ваш вопрос нет однозначного ответа :) Т.к. Вы даже не выложили полную трассировку стека при исключении. Начинайте лучше отлаживать приложение.
Пара советов. Следите за позицией и размером буфера. Так же уделите внимание тому, что в одном байт-буфере может быть несколько пакетов (если используется mmocore), так же у Вас может быть неполный пакет в буфере, а остальная часть может приходить со следующим пакетом :)

Sun 09.08.2013 05:23

Re: Decrypt packets
 
Не получаеться по дружить authserver c gameserver:(

Добавлено через 26 минут
Код:

    private ByteBuffer buffer = ByteBuffer.allocate(65536).order(ByteOrder.LITTLE_ENDIAN);
    private Selector selector;

    public Controller() throws IOException {
        selector = Selector.open();
    }

    public void register(Selection selection) throws IOException {
        selection.setController(this);

        selection.register(this);
    }

    @Override
    public void run() {
        while (true) {
            int num = 0;

            try {
                num = selector.selectNow();
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }

            if (num > 0) {
                Iterator<SelectionKey> keys = selector.selectedKeys().iterator();

                while (keys.hasNext()) {
                    SelectionKey key = keys.next();

                    Selection selection = (Selection) key.attachment();

                    keys.remove();

                    System.out.println((key.isAcceptable()?"OP_ACCEPT ":"") + (key.isConnectable()?"OP_CONNECT ":"") + (key.isReadable()?"OP_READ ":"") + (key.isWritable()?"OP_WRITE ":""));

                    switch (key.readyOps()) {
                        case SelectionKey.OP_ACCEPT: {
                            ((SelectionServer) selection).accept();

                            break;
                        }
                        case SelectionKey.OP_CONNECT: {
                            selection.connect();

                            break;
                        }
                        case SelectionKey.OP_WRITE: {
                            selection.tryWrite(buffer);

                            break;
                        }
                        case SelectionKey.OP_READ | SelectionKey.OP_WRITE: {
                            selection.tryWrite(buffer);

                            selection.tryRead(buffer);

                            break;
                        }   
                        case SelectionKey.OP_READ: {
                            selection.tryRead(buffer);

                            break;
                        }
                    }
                }
            }

            try {
                Thread.sleep(10);//TODO config
            } catch (InterruptedException e) {
            }
        }
    }

Controller :)
Если нужно выложу другие части кода. Не буду засерать форум кодом.


Текущее время: 10:42. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot