Получение онлайна.

Vieraw

Администратор
Команда форума
Администратор
12 Май 2012
273
145
43
27
Пакетное получение онлайна на сервере:
350- GMOnlineNum
Структура:
PHP:
unsigned int localsid;
int gmroleid;
351 - GMOnlineNum_Re
Структура:
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;
353 - GMListOnlineUser_Re
Структура:
PHP:
int retcode;
	int gmroleid;
	unsigned int localsid;
	int handler;
	GMListOnlineUser_Re::GMPlayerInfoVector userlist;
GMPlayerInfo
Структура:
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;
}
 

Пользователи онлайн

Последние ресурсы

Статистика форума

Темы
3.838
Сообщения
21.199
Пользователи
7.612
Новый пользователь
Dendroid