Пакетное получение онлайна на сервере:
350- GMOnlineNum
Структура:
351 - GMOnlineNum_Re
Структура:
352 - GMListOnlineUser
Структура:
353 - GMListOnlineUser_Re
Структура:
GMPlayerInfo
Структура:
350- GMOnlineNum
Структура:
PHP:
unsigned int localsid;
int gmroleid;
Структура:
PHP:
unsigned int localsid;
int gmroleid;
int total_num;
int local_num;
PHP:
$pack = pack('N*', -1, 1);
$send = cuint(350).cuint(strlen($pack)).$pack;
$buf = socketsend($send);
$opcode = upcuint($buf, $p); //351
$size = upcuint($buf, $p);
$resutl = unpack('Nlocalsid/Ngmroleid/Ntotal_num/Nlocal_num', substr($buf, $p, 16)));
352 - GMListOnlineUser
Структура:
PHP:
int gmroleid;
unsigned int localsid;
int handler;
Octets cond;
Структура:
PHP:
int retcode;
int gmroleid;
unsigned int localsid;
int handler;
GMListOnlineUser_Re::GMPlayerInfoVector userlist;
Структура:
PHP:
int userid;
int roleid;
int linkid;
unsigned int localsid;
int gsid;
char status;
Octets name;
PHP:
function onlinelist($id = 0)
{
$pack = pack('N*', 1, 1, $id).PackOctet(1);
$send = cuint(352).cuint(strlen($pack)).$pack;
$buf = socketsend($send);
$p = 0;
$opcode = upcuint($buf, $p);//353
$size = upcuint($buf, $p);
$users = array();
$header = unpack('Nretcode/Ngmroleid/Nlocalid/Nhandle', substr($buf, $p, 16));
$p += 16;
$count = upcuint($buf, $p);
for($i = 0; $i < $count; $i++)
{
$users[$i] = unpack('Nuserid/Nroleid/Nlink/Nlocalsid/Ngs/Cstatus', substr($buf, $p, 21));
$start[$i] = $users[$i]['userid'];
$p += 21;
$users[$i]['name'] = upstring($buf, $p);
}
if($count > 1)
{
$start = max($start)+1;
$users += onlinelist($start);
}
$result = array('header' => $header, 'users' => $users);
return $result;
}