[PW] Веб Часть Получение списка персов онлайн

  • Автор темы Автор темы Andrey
  • Дата начала Дата начала

Andrey

Я админ,смекаешь?
Команда форума
Админ
Зануда
Проверенный
Местный
1.jpg
Выводит следующую инфу:
Ид акка
Ид перса
?
?
Индекс локи на которой стоит перс
Статус хрен знает чего
Имя
Структура пакетов:
GMListOnlineUser
Код:
struct __cppobj GMListOnlineUser : Protocol
{
  int gmroleid;
  unsigned int localsid;
  int handler;
  Octets cond;
};
GMListOnlineUser_Re
Код:
struct __cppobj GMListOnlineUser_Re : Protocol
{
  int retcode;
  int gmroleid;
  unsigned int localsid;
  int handler;
  GMPlayerInfoVector userlist;
};
GMPlayerInfo
Код:
struct __cppobj GMPlayerInfo : Rpc::Data
{
  int userid;
  int roleid;
  int linkid;
  unsigned int localsid;
  int gsid;
  char status;
  Octets name;
};
Скрипт во вложениях
 

Вложения

a question, i tryed this, work in php, but in nodejs it will return a total different response.
вопрос, я попробовал это, работать в php, но в nodejs он будет возвращать совершенно другой ответ.

in both php/nodejs i sent this:
в обоих php / nodejs я отправил это:
10x81 0x60 0x0e 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01 0x01 0x31

but in php what i reicive is 60 byte, in nodejs is 76 byte,
но в php я получаю 60 байт, в nodejs - 76 байт,

example first 14 byte
пример первых 14 байт

php:
81 61 39 00 00 00 00 00 00 00 01 00 00 00

nodejs:
80 84 09 d0 00 00 00 00 00 00 00 00 80 88

do you have any idea why i get different result if i send same data?
у вас есть идея, почему я получаю другой результат, если я отправляю одни и те же данные?
 
somehow for me in nodejs the structure / scheme look like this (GMScheme.js)

Код:
const role_info = [
    [ "count", "CUInt32" ],
    [ "user_id", "UInt32" ],
    [ "role_id", "UInt32" ],
    [ "link_id", "UInt32" ],
    [ "local_sid", "UInt32" ],
    [ "gs_id", "UInt32" ],
    [ "status", "UByte" ],
    [ "name", "String" ]
];      

const onlineListScheme = {
    protocol: [
        [ "op_code", "CUInt32" ],    // 132 - 0xC0
        [ "length", "CUInt32" ],    // 9   - 0x09
        [ "unknown1", "UInt32" ],    // 3489660928 - 0xd0000000
        [ "ret_code", "UInt32" ],    // 0
        [ "unknown2", "UInt32" ],     // 8423425 = 0x808801
        [ "unknown3", "UInt32" ],    // 8479067 = 0x81615B
        [ "unknown4", "UInt32" ],    // 0
    ],
    base: [
        [ "localsid", "UInt32" ],    // 1
        [ "gm_role_id", "UInt32" ],    // gm role_id
        [ "unknown5", "UInt32" ],    // 4294967295 = 0xFFFFFFFF
        [ "online_list", ["Array", role_info] ],
    ]
}
 
somehow for me in nodejs the structure / scheme look like this (GMScheme.js)

Код:
const role_info = [
    [ "count", "CUInt32" ],
    [ "user_id", "UInt32" ],
    [ "role_id", "UInt32" ],
    [ "link_id", "UInt32" ],
    [ "local_sid", "UInt32" ],
    [ "gs_id", "UInt32" ],
    [ "status", "UByte" ],
    [ "name", "String" ]
];     

const onlineListScheme = {
    protocol: [
        [ "op_code", "CUInt32" ],    // 132 - 0xC0
        [ "length", "CUInt32" ],    // 9   - 0x09
        [ "unknown1", "UInt32" ],    // 3489660928 - 0xd0000000
        [ "ret_code", "UInt32" ],    // 0
        [ "unknown2", "UInt32" ],     // 8423425 = 0x808801
        [ "unknown3", "UInt32" ],    // 8479067 = 0x81615B
        [ "unknown4", "UInt32" ],    // 0
    ],
    base: [
        [ "localsid", "UInt32" ],    // 1
        [ "gm_role_id", "UInt32" ],    // gm role_id
        [ "unknown5", "UInt32" ],    // 4294967295 = 0xFFFFFFFF
        [ "online_list", ["Array", role_info] ],
    ]
}
Мне кажется что использовать nodejs очень опасно?
 
ну, может быть, немного более опасно, чем php, потому что под apache2 php не может выполнить или сделать что-либо (владелец / разрешение), но как насчет java или плохо оптимизированного php?

в любом случае, так как nodeJS является бэкэндом, также, если вы делаете API с JSON с JWT / OAuth, я думаю, что достаточно хорошо
 
ну, может быть, немного более опасно, чем php, потому что под apache2 php не может выполнить или сделать что-либо (владелец / разрешение), но как насчет java или плохо оптимизированного php?

в любом случае, так как nodeJS является бэкэндом, также, если вы делаете API с JSON с JWT / OAuth, я думаю, что достаточно хорошо
Ты мне нравишься)
 
do you have any idea why i get different result if i send same data?
у вас есть идея, почему я получаю другой результат, если я отправляю одни и те же данные?

в packet.php в функции send, есть очистка данных от сервера перед отправкой запроса, на nodejs надо или также дождаться прихода первых данных перед отправкой, или читать всё что ответил сервер, у меня за 1 раз приходит 3 пакета приветствия:
132 0х84
136 0х88
137 0х89

и иногда к ним успевает прочитаться, а иногда в отдельном вызове события data нужный пакет 353 0х161

Скрытое содержимое доступно для зарегистрированных пользователей!
 
в packet.php в функции send, есть очистка данных от сервера перед отправкой запроса, на nodejs надо или также дождаться прихода первых данных перед отправкой, или читать всё что ответил сервер, у меня за 1 раз приходит 3 пакета приветствия:
132 0х84
136 0х88
137 0х89

и иногда к ним успевает прочитаться, а иногда в отдельном вызове события data нужный пакет 353 0х161

благодарю вас

так в чем же решение? вырезать данные до 131 вручную? это было новое соединение, и это был 1-й пакет, который я отправил, так что приветственное сообщение было между пакетом, которое было отправлено и имело правильные данные, полученные с 131.

thank you

so what is the solution? cut the data before 131 manually? it was a new connection and this was the 1st packet what i sent, so that greetings message was between packet was sent and beore the correct data arrived with 131.
 
Я читаю пакеты:
connect.on('data',buffer=>{
var reader=new packetReader(buffer),packet;
/*
reader.readPacket=function(){
var id=reader.readCui(),
len=reader.readCui(),
data=reader.readArray(len);
if(id && len==data.length)
return {id,len,new packetReader(data)};
else
return false;
}
*/
while(packet=reader.readPacket()){
// Дальше смотрю какой пакет:
if(0x161==id){
//читаю данные пакета // parse packetData
connect.end(); // Зыкрываю
}
}
})
 
код операции ответа - всегда код операции запроса + 1?

response opcode is allways request opcode+1?
 
П.п 1.7
Обычно да, ответ идёт со следующим номером, но бывают и исключения.
 
Последнее редактирование модератором:
Обычно да, ответ идёт со следующим номером, но бывают и исключения.

благодарю вас. / thank you.

я использую Ubuntu, вы знаете лучшее решение, чем GDB для структур поиска пакетов?
i use ubuntu, do you know better solution than gdb for search packet structures?

i tryed get the mail list for a role but it say:
Я попытался получить список рассылки для роли, но он сказал:

ошибка состояния или политики протокола sid = 64, тип = 4202, размер = 8, принимает размер = 101
protocol state or size policy error sid=64, type=4202, size=8, acceptsize=101

Я использовал порт 29100/29400, протокол: 0x106A (4202) и 2x Int32 ... все выглядит хорошо, все еще у меня есть эта ошибка
i used port 29100/29400, protocol: 0x106A (4202) and 2x Int32... everything look well, still i have that error
 
Назад
Сверху