Забыли пароль?
Запросите новый здесь.

Автор темы: mishqa35
ID темы: 1241
Информация:
Тема содержит 23 сообщения, была просмотрена 16328 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Народное творчество
 Распечатать тему
torrent tracker [beta]
mishqa35
torrent tracker [beta] v -99

Собственно нужна помощь в тестинге. Желательно чтобы как можно больше людей скачали файл, кто то остался на раздаче, а кто то ушел с нее. Так же желательно что бы вы сами добавили пару файлов*, размер не имеет значения.

Демо: http://demo.fusio...etails.php

Чтобы залить файл нужно войти на сайт
Логин: demo / Пароль: demo1

*торрент файл должен быть создан с нужным announce url'ом.
x2 x2
 
Web
Vova
Работает. У есть скрипт полноценного трекера. Сам написал.
 
Web
mishqa35
Оффтопик интересно взглянуть на код вашего анонсе.пхп

 
Web
Rush
и в чем фишка. торрент файл делается на компе, загружается на севрер, скачивается и открывается в программе.
проблема раньше заключалась в том, чтобы посчитать сидеров, личеров и т.д., количество скачавших, скорость и прочую статистику. этого я как бы пока и не увидел
 
Web
Vova
Анонсер:

Загрузить источник  GeSHi: PHP
  1. <?
  2. require_once 'corebt.php';
  3.  
  4. function errorexit($reason) {
  5. exit(bencode(array('failure reason' => $reason)));
  6. }
  7.  
  8. function resolve_ip($host) {
  9. $ip = ip2long($host);
  10. if (($ip === false) || ($ip == -1)) {
  11. $ip = ip2long(gethostbyname($host));
  12. if (($ip === false) || ($ip == -1)) {
  13. return false;
  14. }
  15. }
  16. return $ip;
  17. }
  18.  
  19. header('Content-Type: text/plain');
  20.  
  21. if (empty($_GET['info_hash']) || empty($_GET['port']) || !is_numeric($_GET['port']) || empty($_GET['peer_id']) || !isset($_GET['uploaded']) || !is_numeric($_GET['uploaded']) || !isset($_GET['downloaded']) || !is_numeric($_GET['downloaded']) || !isset($_GET['left']) || !is_numeric($_GET['left']) || (!empty($_GET['event']) && ($_GET['event'] != 'started') && ($_GET['event'] != 'completed') && ($_GET['event'] != 'stopped'))) {
  22. errorexit('invalid request');
  23. }
  24.  
  25. if ($require_announce_protocol == 'no_peer_id') {
  26. if (empty($_GET['compact']) && empty($_GET['no_peer_id'])) {
  27. errorexit('standard announces not allowed; use no_peer_id or compact option');
  28. }
  29. }
  30. else if ($require_announce_protocol == 'compact') {
  31. if (empty($_GET['compact'])) {
  32. errorexit('tracker requires use of compact option');
  33. }
  34. }
  35.  
  36. $ip = resolve_ip(empty($_GET['ip']) ? $_SERVER['REMOTE_ADDR'] : $_GET['ip']);
  37. if ($ip === false) {
  38. errorexit("unable to resolve host name $_GET[ip]");
  39. }
  40.  
  41. @mysql_pconnect($db_server, $db_user, $db_pass) or errorexit('database unavailable');
  42. @mysql_select_db($db_db) or errorexit('database unavailable');
  43.  
  44. $query = @mysql_query("SELECT COUNT(*) FROM `$db_table` WHERE `expire_time` > NOW();") or errorexit('database error');
  45. $num_peers = mysql_result($query, 0);
  46. $query = @mysql_query("SELECT COUNT(*) FROM `$db_table` WHERE `update_time` > NOW() - INTERVAL 1 MINUTE;") or errorexit('database error');
  47. $announce_rate = mysql_result($query, 0);
  48. $announce_interval = max($num_peers * $announce_rate / ($max_announce_rate * $max_announce_rate) * 60, $min_announce_interval);
  49.  
  50. if (!empty($_GET['event']) && ($_GET['event'] == 'stopped')) {
  51. $expire_time = 0;
  52. }
  53. else {
  54. $expire_time = $announce_interval * $expire_factor;
  55. }
  56. if (!empty($_GET['passkey'])) {
  57. $query3 = @mysql_query("SELECT id FROM gamer_torrents_count WHERE ip='".$ip."' AND hash='".strToHex($_GET['info_hash'])."' AND passkey='".$_GET['passkey']."'");
  58. $res = mysql_num_rows($query3);
  59. if ($res) {
  60. $query3 = @mysql_query("SELECT downloaded, uploaded, datestamp FROM gamer_torrents_count WHERE ip='".$ip."' AND hash='".strToHex($_GET['info_hash'])."' AND passkey='".$_GET['passkey']."'");
  61. $data3 = @mysql_fetch_assoc($query3);
  62. $downloaded = (($_GET['downloaded'])-($data3['downloaded']));
  63. $uploaded = (($_GET['uploaded'])-($data3['uploaded']));
  64. $bonus = RAND(1, 100000);
  65. @mysql_query("UPDATE gamer_users SET user_downloaded=user_downloaded+'".$downloaded."', user_uploaded=user_uploaded+'".$uploaded."', user_bonus=user_bonus+'".$bonus."' WHERE user_passkey='".$_GET['passkey']."'");
  66. $speed_up = 0;
  67. $speed_down = 0;
  68. if ($data3['datestamp'] < time()) {
  69. $speed_up = ceil($uploaded / (time() - $data3['datestamp']));
  70. $speed_down = ceil($downloaded / (time() - $data3['datestamp']));
  71. }
  72. @mysql_query("UPDATE gamer_torrents_count SET downloaded='".$_GET['downloaded']."', uploaded='".$_GET['uploaded']."', lefted='".$_GET['left']."', speed_up='".$speed_up."', speed_down='".$speed_down."', datestamp='".time()."' WHERE ip='".$ip."' AND hash='".strToHex($_GET['info_hash'])."' AND passkey='".$_GET['passkey']."'");
  73. } else {
  74. @mysql_query("INSERT INTO gamer_torrents_count (ip, hash, passkey, downloaded, uploaded, lefted, datestamp) VALUES ('".$ip."', '".mysql_escape_string(strToHex($_GET['info_hash']))."', '".$_GET['passkey']."', '".$_GET['downloaded']."', '".$_GET['uploaded']."', '".$_GET['left']."', '".time()."')");
  75. }
  76. }
  77. $columns = '`info_hash`, `ip`, `port`, `peer_id`, `uploaded`, `downloaded`, `left`, `expire_time`';
  78. $values = '\'' . mysql_escape_string($_GET['info_hash']) . '\', ' . $ip . ', ' . $_GET['port'] . ', \'' . mysql_escape_string($_GET['peer_id']). '\', ' . $_GET['uploaded'] . ', ' . $_GET['downloaded'] . ', ' . $_GET['left'] . ", NOW() + INTERVAL $expire_time SECOND";
  79. @mysql_query("REPLACE INTO `$db_table` ($columns) VALUES ($values);") or errorexit('database error');
  80.  
  81. $peers = array();
  82. $numwant = empty($_GET['numwant']) ? 50 : intval($_GET['numwant']);
  83. $query = @mysql_query("SELECT `ip`, `port`, `peer_id` FROM `$db_table` WHERE `info_hash` = '" . mysql_escape_string($_GET['info_hash']) . "' AND `expire_time` > NOW() ORDER BY RAND() LIMIT $numwant;") or errorexit('database error');
  84. if (!empty($_REQUEST['compact'])) {
  85. $peers = '';
  86. while ($array = mysql_fetch_assoc($query)) {
  87. $peers .= pack('Nn', $array['ip'], $array['port']);
  88. }
  89. }
  90. else if (!empty($_REQUEST['no_peer_id'])) {
  91. while ($array = mysql_fetch_assoc($query)) {
  92. $peers[] = array('ip' => long2ip($array['ip']), 'port' => intval($array['port']));
  93. }
  94. }
  95. else {
  96. while ($array = mysql_fetch_assoc($query)) {
  97. $peers[] = array('ip' => long2ip($array['ip']), 'port' => intval($array['port']), 'peer id' => $array['peer_id']);
  98. }
  99. }
  100.  
  101. exit(bencode(array('interval' => intval($announce_interval), 'peers' => $peers)));
  102. ?>
Добавлено за 0.068 секунд, используя GeSHi 1.0.8.10

 
Web
mishqa35
Исходник явно с OpenTracker, и по поводу постоянно открытого соединения с mysql не есть гуд. А в целом thx есть пара строк которые пригодятся, весьма..
 
Web
Vova
Я себе сделал ограничение. Если соиденение больше 4 сек, то оно автоматически закрываеться.
 
Web
Rush
Vova написал:

Я себе сделал ограничение. Если соиденение больше 4 сек, то оно автоматически закрываеться.


стесняюсь спросить, зачем тогда открывать постоянное соединение, если оно не висит больше 4х секунд?
имхо оно должно висеть, пока его не подберет какой-нибудь скрипт, или открывать обычное. или у тебя тайм-аут на простой 4 секуны?
 
Web
Vova
Rush написал:

Vova написал:

Я себе сделал ограничение. Если соиденение больше 4 сек, то оно автоматически закрываеться.


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


Я просто забыл дописать.

mysql_close($db_server);
die();
 
Web
Rush
хД mysql_close() не закроет mysql_pconnect()
 
Web
Vova
Rush написал:

хД mysql_close() не закроет mysql_pconnect()


Я заменил mysql_pconnect() на mysql_connect(). В сообщений забыл написать про это.
 
Web
mishqa35
Появилось пара интересующих вопросов ..
Допустим я качаю торрент и в нем вбит мой анонс, то что он принимает и отдает я знаю, так же задается интервал и отправляется к клиенту, когда совершить новое подключение и обновить данные. Если сделать анонс вида.. открываем mysql соединение > делаем что нам надо > отправляем данные клиенту > закрываем mysql запрос. Клиент же по заданному интервалу заново начнет подключатся и получать данные? И еще один из вопросов по поводу как будет себя вести клиент><сервер, если принудительно закрыть т.клиент пользователем, отдаст ли последний запрос серверу, что он отключился? Или же нужно как то держать постоянную связь..
 
Web
Vova
Когда вирубаеш торрент клиент идет Scrape запрос на стоп.
 
Web
Wally
Кто-нибудь доделал все-таки трекер?
 
Web
Vova
Wally написал:

Кто-нибудь доделал все-таки трекер?


+.

Пример: http://vova1234.c...souls.html

rusfusion.ru/forum/attachments/tracker.png

+ бонус, статистика скачано и отдано.
Vova присоединено следующее:изображение:
tracker.png

 
Web
Wally
Vova написал:

Wally написал:

Кто-нибудь доделал все-таки трекер?


+.

Пример: http://vova1234.c...souls.html

rusfusion.ru/forum/attachments/tracker.png

+ бонус, статистика скачано и отдано.


Он у тебя на фьюжене работает?
 
Web
Vova
Wally написал:

Vova написал:

Wally написал:

Кто-нибудь доделал все-таки трекер?


+.

Пример: http://vova1234.c...souls.html

rusfusion.ru/forum/attachments/tracker.png

+ бонус, статистика скачано и отдано.


Он у тебя на фьюжене работает?

Нет. Но там просто сделать.
 
Web
Wally
Vova, Может поделишься опытом?
 
Web
Vova
Wally написал:

Vova, Может поделишься опытом?

Да. Пиши в скайп. Или в ICQ: 667669961
 
Web
Wally
Сори за оффтоп, а никто не подскажет плагин фильмотеки как здесь: http://demo.fusio...etails.php ???
Господи, перезагрузи этот мир!
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Топ 5 пользователей форума
Alex Alex (1,179)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)