1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Любая версия Сервис для просмотра чата

Тема в разделе 'PW Web', создана пользователем autosnikers, 6 сен 2013.

  1. Афк Пользователи

    Сообщения:
    24
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    на тестовый залил его мего трю скрипт чат читался, но без ников, баны и прочую хурму не проверял
    на чет загрузки, да согласен слишком долго думает, наверное хост типа хостингера
    ну или его сервис жрет кучу ресурсов
    ну и собственно его скрипт
    Код:
    <?php
    
    class Chat {
    
        const KEY = "24BD-7E04-4595-ED20";            # Не изменяйте ключ
        const CHAT_FILE = "/home/logs/world2.chat";    # Путь к файлу чата
    
        public function __construct($action = null)
        {
            header("Content-type: text/html; charset=utf-8");
          
            if($action != null && $_GET["code"] == self::KEY)
            {
                switch ($action) {
              
                    case "getNick":
                        $this->getNick($_GET["id"]);
                    break;
                  
                    case "getNameClan":
                        $this->getNameClan($_GET["id"]);
                    break;
                  
                    case "setBan":
                        $this->setBan($_GET["type"], $_GET["id"], $_GET["sec"], $_GET["reason"]);
                    break;
                  
                    case "sendSystemMessage":
                        $this->sendSystemMessage($_GET["message"]);
                    break;
                  
                    case "getChatFile":
                        $this->getChatFile($_GET["count"]);
                    break;
                  
                    case "getCountString":
                        $this->getCountString();
                    break;
                  
                    default:
                        die("error");
                }
            } else
            {
                die("error");
            }
        }
      
        protected function cuint($data)
        {
            if($data < 64)
                return strrev(pack("C", $data));
            else if($data < 16384)
                return strrev(pack("S", ($data | 0x8000)));
            else if($data < 536870912)
                return strrev(pack("I", ($data | 0xC0000000)));
            return strrev(pack("c", -32) . pack("i", $data));
        }
      
        protected function UnPackString($data, $p)
        {
            $size = (hexdec(bin2hex(substr($data,$p,1))) >= 128) ? 2 : 1;
            $octetlen = (hexdec(bin2hex(substr($data,$p, $size))) >= 128) ? hexdec(bin2hex(substr($data,$p, $size)))-32768 : hexdec(bin2hex(substr($data,$p, $size)));           
            $pp = $p;
            $p += $size + $octetlen;
            return mb_convert_encoding(substr($data,$pp+$size,$octetlen),"UTF-8","UTF-16LE");
        }
      
        protected function PackString($data)
        {
            $data = iconv("UTF-8", "UTF-16LE", $data);
            $LnData = strlen($data);
          
            if ($LnData <= 128)
            {
                $ln = pack("C*", $LnData);
                return $ln.$data;
            } else
            {
                $ln = pack("n*", $LnData+32768);
                return $ln.$data;
            }
        }
      
        protected function length($data)
        {
            $PackLn = strlen($data);
            if($PackLn < 128)
            {
                $PackLn = pack("C*", $PackLn);
                return $PackLn;
            }
            else
            {
                $PackLn = pack("n*", $PackLn + 32768);
                return $PackLn;
            }
        }
      
        protected function getChatFile($count)
        {
            exec("tail -n ".$count." ".self::CHAT_FILE."", $array);
          
            for($i=0;$i<count($array);$i++)
            {
                echo $array[$i]."\n";
            }
        }
      
        protected function getCountString()
        {
            $file = self::CHAT_FILE;
            $e = explode(" ", trim(exec("wc -l $file")));
            echo $e[0];
        }
      
        protected function getNick($id)
        {
                $data = pack("N*",-1, $id);
                $redy = $this->cuint(8003).$this->cuint(strlen($data)).$data;
                $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                socket_connect($sock,"localhost",29400);
                socket_set_block($sock);
                socket_send($sock, $redy, 8192, 0);
                socket_recv($sock, $rb, 8192, 0);
                socket_set_nonblock($sock);
                socket_close($sock);
                echo $this->UnPackString($rb, 17);
        }
      
        protected function getNameClan($id)
        {
                $pack = strrev(pack("S", 32768)).strrev(pack("S", 1)).pack("N", $id);
                $data = $this->cuint(4608).$this->length($pack).$pack;
                $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                socket_connect($sock, "localhost", 29400);
                socket_set_block($sock);
                socket_send($sock, $data, 8192, 0);
                socket_recv($sock, $buf, 8192, 0);
                socket_set_nonblock($sock);
                socket_close($sock);
                if (hexdec(bin2hex(substr($buf,2,1))) >= 128)
                {
                    $name = $this->UnPackString($buf, 16);
                } else
                    {
                        $name = $this->UnPackString($buf, 15);
                    }
                echo $name;
        }
      
        protected function setBan($type, $id, $sec, $reason)
        {
            if($type == 101)
            {
                $pack = pack("N", 1024).pack("N", 1).pack("N", $id).pack("N", $sec).$this->PackString($reason);
                $data = $this->cuint(362).$this->length($pack).$pack;
            } elseif($type == 100)
            {
                $pack = pack("N", 1024).pack("N", 830).pack("N", $id).pack("N", $sec).$this->PackString($reason);
                $data = $this->cuint(360).$this->length($pack).$pack;
            }
              
            $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            socket_connect($sock, "localhost", 29100);
            socket_set_block($sock);
            socket_send($sock, $data, 8192, 0);
            socket_recv($sock, $buf, 8192, 0);
            socket_set_nonblock($sock);
            socket_close($sock);
        }
      
        protected function sendSystemMessage($message)
        {
            $message = iconv("UTF-8", "UTF-16LE", $message);
            $Chanel       = pack("C*", 9);
            $Id           = pack("N*", 0);
            $Emotion      = pack("C*", 0);
            $MessageLengh = strlen($message);
          
            if ($MessageLengh < 128)
            {
                $MessageLengh = pack("C*", $MessageLengh);
            } else {
                $MessageLengh = pack("n*", $MessageLengh + 32768);
            }
            $Packet    = $Chanel . $Emotion . $Id . $MessageLengh . $message . "\x00\x00";
            $PacketLen = pack("C*", strlen($Packet));
            $type      = pack("C", 120);
            $sock      = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            $sock2     = socket_connect($sock, "localhost", "29300");
            socket_set_block($sock);
            $data   = $type . $PacketLen . $Packet;
            $sbytes = socket_send($sock, $data, 8192, 0);
            $rbytes = socket_recv($sock, $buf, 8192, 0);
            socket_set_nonblock($sock);
            socket_close($sock);
        }
      
        public function __destruct()
        {
        }
    
    }
    
    $chat = new Chat($_GET["action"]);
    
    ?>
    
  2. TopicStarter Overlay

    autosnikers Пользователи

    Сообщения:
    26
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Логично, если вы ничего не настроили.
    На 1.2.6, видимо, другие пакеты. Если необходимо, сделаю поддержку.
  3. Афк Пользователи

    Сообщения:
    24
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    если решил позиционировать себя как "сервис" то делай мультиверсию ну и хост по мощней возьми, а то правда долго страницы грузит
  4. Мudreс Аз есмь Мудря Old school Пользователи

    Сообщения:
    81
    Лайки:
    40
    Пол:
    Мужской
    Репутация:
    0
    Альтруизм - это очень хорошо, но он, как правило, до поры до времени.
    Как будет в дальнейшем развиваться монетизация данного сервиса?
  5. Kuльka Guest

    Репутация:
    0
  6. Kuльka Guest

    Репутация:
    0
    ТС, запили смену айпи и путь к файлу/название файла
  7. TopicStarter Overlay

    autosnikers Пользователи

    Сообщения:
    26
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    В настоящее время есть финансирование для хостинга. Продолжаться это будет довольно долго. В дальнейшем, при заполнении сервиса - скорее всего будет символическая плата для оправдания хостинга.
    Доработаю.
    Kuльka нравится это.
  8. Kuльka Guest

    Репутация:
    0
    Вроде все работает, доверять можно))
  9. 10000 Пользователи

    Сообщения:
    84
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    TEST
    Страна:
    Sri Lanka Sri Lanka
    Регистрация приостановлена. Шлак. Тему в мусорку.
  10. Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Как скажешь, царь.
    samcs нравится это.
  11. Merfy Пользователи

    Сообщения:
    367
    Лайки:
    189
    Пол:
    Мужской
    Репутация:
    -1
    Команда:
    mmo-dev.com
    да ты же - победитель по жизни
    [​IMG]
  12. 10000 Пользователи

    Сообщения:
    84
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    TEST
    Страна:
    Sri Lanka Sri Lanka
    Попробуй зарегаться - увидишь, что напишут.
  13. Kuльka Guest

    Репутация:
    0
    Зарегался, все ок
  14. 10000 Пользователи

    Сообщения:
    84
    Лайки:
    6
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    TEST
    Страна:
    Sri Lanka Sri Lanka
    Как?
    пруф:
  15. TopicStarter Overlay

    autosnikers Пользователи

    Сообщения:
    26
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Регистрация скоро снова заработает
  16. Белиса BEILEC Пользователи

    Сообщения:
    33
    Лайки:
    3
    Репутация:
    0
    Команда:
    beilec's
    Сервис — хорошо, удобно.
    Дизайн — фреймворк какой-нибудь, ничего необычного.
  17. TopicStarter Overlay

    autosnikers Пользователи

    Сообщения:
    26
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Скажу больше - Bootstrap v2.3.1
  18. SolomonKane Guest

    Репутация:
    0
    Сделал бы эту фишку гибат, я бы доверил свои данные, но не левому человеку, сорри.
  19. Kuльka Guest

    Репутация:
    0
    Почему вы такие боты? не нужно вписывать в регистрации данные от ssh / mysql / чего либо, просто нужно зарегистрироваться, указать ip адрес сервера, скачать файл и залить его на сервер - вот и все дела.
  20. TopicStarter Overlay

    autosnikers Пользователи

    Сообщения:
    26
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Регистрация включена, так же добавлена смена URL сервера и пути к файлу. Так же, для таких пользователей, как Roymike, могу сделать другой конфигурационный файл, который позволяет переадресовывать запросы на другой сервер. В этом случае скорость одного запроса будет немного отличаться от прямого запроса.
    Kuльka нравится это.
Черновик сохранён Черновик удалён

Поделиться этой страницей