From 9f428b3e4caec5871023f3a667c6d0022eb35d73 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Sun, 4 Mar 2018 16:43:06 +0000 Subject: [PATCH 1/3] Apply fixes from StyleCI --- src/Socket.php | 2 +- src/danog/MadelineProto/Server.php | 7 +++- src/danog/MadelineProto/Server/Handler.php | 48 ++++++++++++++++------ 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/Socket.php b/src/Socket.php index 2e4603cd..cd2c4d05 100644 --- a/src/Socket.php +++ b/src/Socket.php @@ -171,7 +171,7 @@ if (!extension_loaded('pthreads')) { public function accept() { if ($socket = socket_accept($this->sock)) { - return new SocketBase($socket); + return new self($socket); } else { return $socket; } diff --git a/src/danog/MadelineProto/Server.php b/src/danog/MadelineProto/Server.php index 19fd8d0c..92cf296e 100644 --- a/src/danog/MadelineProto/Server.php +++ b/src/danog/MadelineProto/Server.php @@ -38,20 +38,22 @@ class Server $this->sock->bind($this->settings['address'], $this->settings['port']); $this->sock->listen(); $this->sock->setBlocking(true); - + $timeout = 2; $this->sock->setOption(\SOL_SOCKET, \SO_RCVTIMEO, $timeout); $this->sock->setOption(\SOL_SOCKET, \SO_SNDTIMEO, $timeout); while (true) { pcntl_signal_dispatch(); + try { if ($sock = $this->sock->accept()) { $this->handle($sock); - } + } } catch (\danog\MadelineProto\Exception $e) { } } } + private function handle($socket) { $pid = pcntl_fork(); @@ -72,6 +74,7 @@ class Server foreach ($this->pids as $pid) { pcntl_wait($pid); } + return; } \danog\MadelineProto\Logger::log('Shutting fork '.getmypid().' down'); diff --git a/src/danog/MadelineProto/Server/Handler.php b/src/danog/MadelineProto/Server/Handler.php index 9500641a..aed6eb79 100644 --- a/src/danog/MadelineProto/Server/Handler.php +++ b/src/danog/MadelineProto/Server/Handler.php @@ -29,24 +29,32 @@ class Handler extends \danog\MadelineProto\Connection $this->protocol = $protocol; $this->construct_TL(['socket' => __DIR__.'/../TL_socket.tl']); } - public function __destruct() { + + public function __destruct() + { unset($this->sock); $this->destruct_madeline(); exit(); } - public function destruct_madeline() { + + public function destruct_madeline() + { if ($this->madeline !== null) { $this->madeline->settings['logger'] = ['logger' => 0]; $this->madeline->serialize(); unset($this->madeline); + return true; } + return false; } + public function loop() { while (true) { $request_id = 0; + try { $message = $this->read_message(); } catch (\danog\MadelineProto\NothingInTheSocketException $e) { @@ -55,6 +63,7 @@ class Handler extends \danog\MadelineProto\Connection if ($message === null) { continue; } + try { $message = $this->deserialize($message, ['type' => '', 'datacenter' => '']); if ($message['_'] !== 'socketMessageRequest') { @@ -75,10 +84,11 @@ class Handler extends \danog\MadelineProto\Connection $this->send_exception($request_id, $e); continue; } - } } - public function on_request($method, $args) { + + public function on_request($method, $args) + { if (count($method) === 0 || count($method) > 2) { throw new \danog\MadelineProto\Exception('Invalid method called'); } @@ -86,11 +96,12 @@ class Handler extends \danog\MadelineProto\Connection if (count($args) === 1 && is_array($args[0])) { $args[0]['logger'] = ['logger' => 4, 'logger_param' => [$this, 'logger']]; $args[0]['updates']['callback'] = [$this, 'update_handler']; - } else if (count($args) === 2 && is_array($args[1])) { + } elseif (count($args) === 2 && is_array($args[1])) { $args[1]['logger'] = ['logger' => 4, 'logger_param' => [$this, 'logger']]; $args[1]['updates']['callback'] = [$this, 'update_handler']; } $this->madeline = new \danog\MadelineProto\API(...$args); + return true; } if ($method[0] === '__destruct') { @@ -100,12 +111,12 @@ class Handler extends \danog\MadelineProto\Connection throw new \danog\MadelineProto\Exception('__construct was not called'); } foreach ($args as &$arg) { - if (is_array($arg) && isset($arg['_'])){ + if (is_array($arg) && isset($arg['_'])) { if ($arg['_'] === 'callback' && isset($arg['callback']) && !method_exists($this, $arg['callback'])) { $arg = [$this, $arg['callback']]; } if ($arg['_'] === 'stream' && isset($arg['stream_id'])) { - $arg = fopen('madelineSocket://', 'r+b', false, Handler::getContext($this, $arg['stream_id'])); + $arg = fopen('madelineSocket://', 'r+b', false, self::getContext($this, $arg['stream_id'])); } } } @@ -116,23 +127,34 @@ class Handler extends \danog\MadelineProto\Connection return $this->madeline->{$method[0]}->{$method[1]}(...$args); } } - public function send_exception($request_id, $e) { + + public function send_exception($request_id, $e) + { echo $e; //$this->send_message($this->serialize_object(['type' => 'socketMessageException'], ['request_id' => $request_id, 'exception' => $e])); } - public function send_response($request_id, $response) { + + public function send_response($request_id, $response) + { $this->send_message($this->serialize_object(['type' => 'socketMessageResponse'], ['request_id' => $request_id, 'data' => $response])); } - public function send_data($stream_id, $data) { + + public function send_data($stream_id, $data) + { $this->send_message($this->serialize_object(['type' => 'socketMessageRawData'], ['stream_id' => $stream_id, 'data' => $data])); } - public function logger($message, $level) { + public function logger($message, $level) + { } - public function update_handler($update) { + + public function update_handler($update) + { $this->send_message($this->serialize_object(['type' => 'socketMessageUpdate'], ['data' => $update])); } - public function __call($method, $args) { + + public function __call($method, $args) + { $this->send_message($this->serialize_object(['type' => 'socketMessageRequest'], ['request_id' => 0, 'method' => $method, 'args' => $args])); } } From cd0d617dc147762925e008aae966b552dc65fcf5 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Sun, 4 Mar 2018 16:50:21 +0000 Subject: [PATCH 2/3] Fix syntax mistake --- src/danog/MadelineProto/Server/Stream.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/danog/MadelineProto/Server/Stream.php b/src/danog/MadelineProto/Server/Stream.php index a9baca3d..595c5063 100644 --- a/src/danog/MadelineProto/Server/Stream.php +++ b/src/danog/MadelineProto/Server/Stream.php @@ -38,7 +38,7 @@ class Stream $opt = stream_context_get_options($this->context); if (!is_array($opt[self::WRAPPER_NAME]) || !isset($opt[self::WRAPPER_NAME]['handler']) || - !($opt[self::WRAPPER_NAME]['handler'] instanceof Handler) + !($opt[self::WRAPPER_NAME]['handler'] instanceof Handler) || !isset($opt[self::WRAPPER_NAME]['stream_id']) || !is_integer($opt[self::WRAPPER_NAME]['stream_id'])) return false; $this->_handler = $opt[self::WRAPPER_NAME]['handler']; @@ -54,4 +54,4 @@ class Stream public function stream_lock($mode) { } -} \ No newline at end of file +} From 0a63addd0f40f059683a04a9fb7eec0079062556 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Sun, 4 Mar 2018 16:50:54 +0000 Subject: [PATCH 3/3] Apply fixes from StyleCI --- src/danog/MadelineProto/Server/Stream.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/danog/MadelineProto/Server/Stream.php b/src/danog/MadelineProto/Server/Stream.php index 595c5063..34192213 100644 --- a/src/danog/MadelineProto/Server/Stream.php +++ b/src/danog/MadelineProto/Server/Stream.php @@ -13,7 +13,6 @@ If not, see . namespace danog\MadelineProto\Server; - class Stream { const WRAPPER_NAME = 'madelineSocket'; @@ -30,7 +29,8 @@ class Stream stream_wrapper_register(self::WRAPPER_NAME, get_class()); self::$_isRegistered = true; } - return stream_context_create(array(self::WRAPPER_NAME => ['handler' => $handler, $stream_id])); + + return stream_context_create([self::WRAPPER_NAME => ['handler' => $handler, $stream_id]]); } public function stream_open($path, $mode, $options, &$opened_path) @@ -40,9 +40,12 @@ class Stream !isset($opt[self::WRAPPER_NAME]['handler']) || !($opt[self::WRAPPER_NAME]['handler'] instanceof Handler) || !isset($opt[self::WRAPPER_NAME]['stream_id']) || - !is_integer($opt[self::WRAPPER_NAME]['stream_id'])) return false; + !is_int($opt[self::WRAPPER_NAME]['stream_id'])) { + return false; + } $this->_handler = $opt[self::WRAPPER_NAME]['handler']; $this->_stream_id = $opt[self::WRAPPER_NAME]['stream_id']; + return true; } @@ -51,7 +54,7 @@ class Stream $this->handler->send_data($this->_stream_id, $data); } - public function stream_lock($mode) { - + public function stream_lock($mode) + { } -} +}