DHT и PVT у кого нибудь есть такой мод.

krumax

Пользователь
phpfox, похоже это работа этого мода http://torrentpier.com/threads/Пере...2-под-версию-torrentpier_ii_r300_-stable.491/
Я когда-то его ковырял и выводил пиров так:
Снимок-jpg.242
 

phpfox

Пользователь
krumax, Нее`еее это не этот мод мой мод даже если паскей меняется у анонсера какого либо трекера работает, но ты прочитал мысаль мне нужно показать пользователям своих сидеров и парсирующих но я бы предпочел модуль DHT и PVT вывести ну и как у тебя на картинке. Очень был бы рад тому кто бы помог такое осуществить. Или же сделать какой нибудь фиксатор типа крона чтоб цифра фиксировалась до тех пор пока методом нажатия на кнопку скачать стата пиров обновилась и снова фиксировалась до следующего нажатия скачать, а то у меня когда анонсер обновляется сбрасывает пиров.
 

krumax

Пользователь
phpfox, на твоём скрине отображает внешних и внутренних пиров, но для этого должен быть установлен мод мультитрекера для показа внешних.
Так что смотри свой мод мультика)
 

phpfox

Пользователь
krumax, так у меня и так показывает и внешних и внутренних пиров просто внешние пиры при обновлении анонсера сбрасываются. К примеру вот щас я нажал кнопку скачать тем самым запустил функцию обновления пиров со всех трекеров где торрент файл содержит тот же кеш после чего смотрю

Please Login or Register to view hidden text.

[/URL]где вижу всех поднятых пиров но через к примеру 30 минут внешние пиры исчезают после того когда анонсер обновиться.Вот в общем мне надо как то внешних пиров фиксировать до следующего нажатия кнопку скачать.

Please Login or Register to view hidden text.

[/URL]
 

phpfox

Пользователь
kenny, Какого именно? мода.

Вот мой мультитрекер но кое какую функцию я вырезал по причинам право обладания автора мода. Но то что я вырезал не как не помешает дописать DHT и PVT или как я описал выше комментарием.

Код:
function get_peers($tid)
{
global $db, $bb_cfg;
 
if(!$tid) return 'Топик неполучен';
set_time_limit(300);
 
class bencoding
{
public function encode($value)
{
$type = gettype($value);
$out = '';
 
switch($type)
{
case 'integer':
 
$out.= 'i' . $value . 'e';
 
break;
 
case 'string':
 
$out.= strlen($value) . ':' . utf8_encode($value);
 
break;
 
case 'array':
 
if(!$this->is_associative($value))
{
$out.= 'l';
 
foreach($value as $entry)
{
$out.= $this->encode($entry);
}
 
$out.= 'e';
}
else
{
$out.= 'd';
 
foreach($value as $key => $entry)
{
$out.= $this->encode($key) . $this->encode($entry);
}
 
$out.= 'e';
}
 
break;
 
default:
 
throw new bencoding_exception('type must be integer / string or array');
break;
}
 
return $out;
}
public function decode($value)
{
list($v, $r) = $this->rec_decode($value);
 
return $v;
}
 
private function rec_decode($value)
{
switch($value[0])
{
# list
case 'l':
 
$value = substr($value, 1, -1);
$out = array();
 
while(!empty($value))
{
list($v, $r) = $this->rec_decode($value);
 
$value = $r;
 
if(!empty($v))
{
$out[] = $v;
}
}
 
return array($out, false);
 
break;
 
# dictonary
case 'd':
 
$value = substr($value, 1, -1);
$out = array();
 
while(!empty($value))
{
list($k, $r) = $this->rec_decode($value);
 
$value = $r;
 
list($v, $r) = $this->rec_decode($value);
 
$value = $r;
 
if(!empty($k) && !empty($v))
{
$out[$k] = $v;
}
}
 
return array($out, false);
 
break;
 
# integer
case 'i':
 
return $this->decode_int($value);
 
break;
 
# string
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
 
return $this->decode_str($value);
 
break;
 
default:
 
return false;
}
}
 
private function decode_int($value)
{
if(isset($value[0]) && $value[0] == 'i')
{
$i = 1;
$length = '';
 
while($value[$i] != 'e')
{
$length.= $value[$i];
 
$i++;
}
 
$result = intval($length);
$value = substr($value, strlen($length) + 2);
 
return array($result, $value);
}
 
return array(false, false);
}
 
private function decode_str($value)
{
if(is_numeric($value[0]))
{
$i = 0;
$length = '';
 
while($value[$i] != ':')
{
$length.= $value[$i];
 
$i++;
}
 
$length = intval($length);
$result = substr($value, $i + 1, $length);
$value = substr($value, strlen($length) + 1 + $length);
 
return array($result, $value);
}
 
return array(false, false);
}
 
private function is_associative($array)
{
for($i = 0; $i < count($array); $i++)
{
if(!isset($array[$i]))
{
return true;
}
}
 
return false;
}
}
 
if(!$a_data = $db->fetch_row('SELECT attach_id FROM bb_bt_torrents WHERE topic_id = '.$tid)) return 'Данные неполучены';
 
$attach_id = $a_data['attach_id'];
 
$t_data = $db->fetch_row('SELECT topic_id, tor_type, rpad(info_hash,20," ") AS info_hash, size FROM '. BT_TORRENTS_TABLE .' WHERE attach_id = '.$attach_id.' LIMIT 1');
 
$info_hash = $t_data['info_hash'];
$size = ($t_data['size']) ? $t_data['size'] : 2097152000;
$topic_id = $t_data['topic_id'];
$tor_type = $t_data['tor_type'];
 
$get_req_started = 'info_hash='.urlencode($info_hash).'&peer_id=-UT1800-8H%17%94%08%ef%8c%0f%bd%0c%8d%3a&port=32080&uploaded=0&downloaded=0&left='.$size.'&corrupt=0&key=1F64382C&event=started&numwant=200&compact=1&no_peer_id=1';
 
-------------
ВЫРЕЗАН КУСОК КОДА
-------------
 
$node_count = count($announces);
$curl_arr = array();
$master = curl_multi_init();
 
for($i = 0; $i < $node_count; $i++)
{
$url = $announces[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_arr[$i], CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, 'uTorrent/1800(18400)');
curl_multi_add_handle($master, $curl_arr[$i]);
}
do
{
@curl_multi_exec($master, $running);
}
while($running > 0);
$bencode = new bencoding();
$peers = $sql_peers = '';
$complete = $incomplete = 0;
 
for($i = 0; $i < $node_count; $i++)
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
$xall = $bencode->decode($results);
if (!empty($xall['peers']))
{
$peers = get_sql_peer($xall['peers'], $topic_id, $tor_type, $info_hash);
if(!empty($peers)) $sql_peers[] = $peers;
}
curl_multi_remove_handle($master, $curl_arr[$i]);
}
 
curl_multi_close($master);
 
if(!empty($sql_peers))
{
foreach($sql_peers AS $row)
{
foreach($row AS $val=>$key)
{
$new_arr[] = $key;
}
}
 
$master = '';
$curl_arr = array();
$master = curl_multi_init();
$cnt = count($new_arr);
for($i = 0; $i < $cnt; $i++)
{
$url = $new_arr[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_arr[$i], CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, 'uTorrent/1800(18400)');
curl_multi_add_handle($master, $curl_arr[$i]);
}
do
{
curl_multi_exec($master, $running);
}
while($running > 0);
curl_multi_close($master);
return '';
}
}
 
X

xXx-MiraGe

Гость
kenny, Какого именно? мода.

Вот мой мультитрекер но кое какую функцию я вырезал по причинам право обладания автора мода. Но то что я вырезал не как не помешает дописать DHT и PVT или как я описал выше комментарием.

Код:
function get_peers($tid)
{
global $db, $bb_cfg;
 
if(!$tid) return 'Топик неполучен';
set_time_limit(300);
 
class bencoding
{
public function encode($value)
{
$type = gettype($value);
$out = '';
 
switch($type)
{
case 'integer':
 
$out.= 'i' . $value . 'e';
 
break;
 
case 'string':
 
$out.= strlen($value) . ':' . utf8_encode($value);
 
break;
 
case 'array':
 
if(!$this->is_associative($value))
{
$out.= 'l';
 
foreach($value as $entry)
{
$out.= $this->encode($entry);
}
 
$out.= 'e';
}
else
{
$out.= 'd';
 
foreach($value as $key => $entry)
{
$out.= $this->encode($key) . $this->encode($entry);
}
 
$out.= 'e';
}
 
break;
 
default:
 
throw new bencoding_exception('type must be integer / string or array');
break;
}
 
return $out;
}
public function decode($value)
{
list($v, $r) = $this->rec_decode($value);
 
return $v;
}
 
private function rec_decode($value)
{
switch($value[0])
{
# list
case 'l':
 
$value = substr($value, 1, -1);
$out = array();
 
while(!empty($value))
{
list($v, $r) = $this->rec_decode($value);
 
$value = $r;
 
if(!empty($v))
{
$out[] = $v;
}
}
 
return array($out, false);
 
break;
 
# dictonary
case 'd':
 
$value = substr($value, 1, -1);
$out = array();
 
while(!empty($value))
{
list($k, $r) = $this->rec_decode($value);
 
$value = $r;
 
list($v, $r) = $this->rec_decode($value);
 
$value = $r;
 
if(!empty($k) && !empty($v))
{
$out[$k] = $v;
}
}
 
return array($out, false);
 
break;
 
# integer
case 'i':
 
return $this->decode_int($value);
 
break;
 
# string
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
 
return $this->decode_str($value);
 
break;
 
default:
 
return false;
}
}
 
private function decode_int($value)
{
if(isset($value[0]) && $value[0] == 'i')
{
$i = 1;
$length = '';
 
while($value[$i] != 'e')
{
$length.= $value[$i];
 
$i++;
}
 
$result = intval($length);
$value = substr($value, strlen($length) + 2);
 
return array($result, $value);
}
 
return array(false, false);
}
 
private function decode_str($value)
{
if(is_numeric($value[0]))
{
$i = 0;
$length = '';
 
while($value[$i] != ':')
{
$length.= $value[$i];
 
$i++;
}
 
$length = intval($length);
$result = substr($value, $i + 1, $length);
$value = substr($value, strlen($length) + 1 + $length);
 
return array($result, $value);
}
 
return array(false, false);
}
 
private function is_associative($array)
{
for($i = 0; $i < count($array); $i++)
{
if(!isset($array[$i]))
{
return true;
}
}
 
return false;
}
}
 
if(!$a_data = $db->fetch_row('SELECT attach_id FROM bb_bt_torrents WHERE topic_id = '.$tid)) return 'Данные неполучены';
 
$attach_id = $a_data['attach_id'];
 
$t_data = $db->fetch_row('SELECT topic_id, tor_type, rpad(info_hash,20," ") AS info_hash, size FROM '. BT_TORRENTS_TABLE .' WHERE attach_id = '.$attach_id.' LIMIT 1');
 
$info_hash = $t_data['info_hash'];
$size = ($t_data['size']) ? $t_data['size'] : 2097152000;
$topic_id = $t_data['topic_id'];
$tor_type = $t_data['tor_type'];
 
$get_req_started = 'info_hash='.urlencode($info_hash).'&peer_id=-UT1800-8H%17%94%08%ef%8c%0f%bd%0c%8d%3a&port=32080&uploaded=0&downloaded=0&left='.$size.'&corrupt=0&key=1F64382C&event=started&numwant=200&compact=1&no_peer_id=1';
 
-------------
ВЫРЕЗАН КУСОК КОДА
-------------
 
$node_count = count($announces);
$curl_arr = array();
$master = curl_multi_init();
 
for($i = 0; $i < $node_count; $i++)
{
$url = $announces[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_arr[$i], CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, 'uTorrent/1800(18400)');
curl_multi_add_handle($master, $curl_arr[$i]);
}
do
{
@curl_multi_exec($master, $running);
}
while($running > 0);
$bencode = new bencoding();
$peers = $sql_peers = '';
$complete = $incomplete = 0;
 
for($i = 0; $i < $node_count; $i++)
{
$results = curl_multi_getcontent ( $curl_arr[$i] );
$xall = $bencode->decode($results);
if (!empty($xall['peers']))
{
$peers = get_sql_peer($xall['peers'], $topic_id, $tor_type, $info_hash);
if(!empty($peers)) $sql_peers[] = $peers;
}
curl_multi_remove_handle($master, $curl_arr[$i]);
}
 
curl_multi_close($master);
 
if(!empty($sql_peers))
{
foreach($sql_peers AS $row)
{
foreach($row AS $val=>$key)
{
$new_arr[] = $key;
}
}
 
$master = '';
$curl_arr = array();
$master = curl_multi_init();
$cnt = count($new_arr);
for($i = 0; $i < $cnt; $i++)
{
$url = $new_arr[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_arr[$i], CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, 'uTorrent/1800(18400)');
curl_multi_add_handle($master, $curl_arr[$i]);
}
do
{
curl_multi_exec($master, $running);
}
while($running > 0);
curl_multi_close($master);
return '';
}
}
а куда писать всё это ?? function.php??
 
Сверху