MLP

← разместить еще код

Расшаренный код:

<?php

$port = 9503;

$http = new swoole_http_server("127.0.0.1", $port);
$http->set([
    'worker_num' => 1,
    'http_compression' => true,
    "buffer_output_size" => 5 * 1024 * 1024
]);

$http->on("start", function ($server) use ($port){
    echo date("d.m.Y H:i:s").": Swoole http server is started at http://127.0.0.1:$port\n";
});




global $MadelineProto;

include 'madeline.php';






$http->on("request", function ($request, $response) use ($port) {

    $MadelineProto = new \danog\MadelineProto\API('/var/www/html/service/sessions/session.madeline');
    $MadelineProto->start();

    if($request->header["host"] != "127.0.0.1:$port"){return $response->end("Not allowed");}
    if($request->post["method"] == "check_started"){return $response->end(json_encode($request));}

    $dt = $request->post;
    $method = $dt["method"];

    $class = isset($dt["class"]) ? $dt["class"] : 0 ;
    $multy_args = isset($dt["multy_args"]) ? 1 : 0 ;

    unset($dt["class"], $dt["method"], $dt["multy_args"]);


    if($class === "debug"){
        return $response->end(json_encode(["result" => "debug", "vars" => [
            print_r($dt,1),
            print_r($class,1),
            print_r($method,1),
            print_r($multy_args,1),
            print_r($request,1),
        ]]));
    }


    try {

        //$data = $MadelineProto->messages->getHistory($dt);

        if($class){//если у нас есть класс с методом

            if($multy_args){//если аргументо метода несколько - вызываем метод класса через функцию что бы передать все параметры
                $data = call_user_func_array([$MadelineProto->{$class}, $method], $dt);
            }else{
                $data = $MadelineProto->{$class}->{$method}($dt);
            }

        }elseif(count($dt) > 0){//если есть просто метод с параметрами

            if(count(array_keys($dt)) == 1){
                $dt = $dt[array_keys($dt)[0]];
            }

            if($multy_args){
                $data = call_user_func_array([$MadelineProto, $method], $dt);
            }else{
                $data = $MadelineProto->{$method}($dt);
            }

        }else{//если есть просто метод без параметрами

            $data = $MadelineProto->{$method}();

        }

    } catch (danog\MadelineProto\RPCErrorException $e) {
        return $response->end(json_encode(["result" => "error", "type" => "RPC", "message" => $e->getMessage()]));
    } catch (danog\MadelineProto\TL\Conversion\Exception $e) {
        return $response->end(json_encode(["result" => "error", "type" => "TL\CNV", "message" => $e->getMessage()]));
    } catch (danog\MadelineProto\TL\Exception $e) {
        return $response->end(json_encode(["result" => "error", "type" => "TL", "message" => $e->getMessage()]));
    } catch (danog\MadelineProto\Exception $e) {
        return $response->end(json_encode(["result" => "error", "type" => "EXC", "message" => $e->getMessage()]));
    }


    unset($MadelineProto);

    $response->end(json_encode($data));

});

$http->start();


?>