Exemple #1
0
 /**
  * @param QuarkClient $client
  *
  * @return mixed
  */
 public function Client(QuarkClient $client)
 {
     $conn = $client->Connect();
     if (!$conn) {
         Quark::Log('Mail. Unable to connect to mail server. Error: ' . $client->Error(true));
         return false;
     }
     $smtp = $this->_config->SMTP();
     $this->_dto->Header(QuarkDTO::HEADER_CONTENT_TRANSFER_ENCODING, QuarkDTO::TRANSFER_ENCODING_BASE64);
     try {
         $this->_cmd($client, 220);
         $this->_cmd($client, 250, 'HELO Quark');
         $this->_cmd($client, 334, 'AUTH LOGIN');
         $this->_cmd($client, 334, base64_encode($smtp->user));
         $this->_cmd($client, 235, base64_encode($smtp->pass));
         $this->_cmd($client, 250, 'MAIL FROM: <' . $smtp->user . '>');
         foreach ($this->_receivers as $receiver) {
             $this->_cmd($client, 250, 'RCPT TO: <' . $receiver . '>');
         }
         $this->_cmd($client, 354, 'DATA');
         $this->_cmd($client, 250, $this->_dto->SerializeResponseBody() . "\r\n.");
         $this->_cmd($client, 221, 'QUIT');
     } catch (QuarkArchException $e) {
         return false;
     }
     return $client->Close();
 }
 /**
  * @param QuarkClient $client
  * @param string $data
  *
  * @return mixed
  * @throws \Exception
  */
 public function OnData(QuarkClient $client, $data)
 {
     if ($client->Connected()) {
         try {
             $this->_buffer .= $data;
             $out = $this->_processor->Decode($this->_buffer);
             if ($out !== false) {
                 $this->_buffer = '';
                 if ($this->_protocol) {
                     $this->_protocol->OnData($client, $out);
                 }
             }
         } catch (\Exception $e) {
             $this->_buffer = '';
         }
     } else {
         if ($data != "\r\n") {
             $this->_buffer .= $data;
             return;
         }
         $request = new QuarkDTO();
         $request->UnserializeRequest($this->_buffer . "\r\n");
         $this->_buffer = '';
         $response = new QuarkDTO(new QuarkHTMLIOProcessor());
         $response->Status(101, 'Switching Protocols');
         $response->Headers(array(QuarkDTO::HEADER_CONNECTION => QuarkDTO::CONNECTION_UPGRADE, QuarkDTO::HEADER_UPGRADE => QuarkDTO::UPGRADE_WEBSOCKET, QuarkDTO::HEADER_SEC_WEBSOCKET_ACCEPT => base64_encode(sha1($request->Header(QuarkDTO::HEADER_SEC_WEBSOCKET_KEY) . self::GuID, true))));
         if (strlen($this->_subprotocol) != 0) {
             $response->Header(QuarkDTO::HEADER_SEC_WEBSOCKET_PROTOCOL, $this->_subprotocol);
         }
         $client->Send($response->SerializeResponse());
         $client->Connected(true);
         $client->BeforeSend(function ($data) {
             return $this->_processor->Encode($data);
         });
         if ($this->_protocol) {
             $this->_protocol->OnConnect($client);
         }
     }
 }
Exemple #3
0
 /**
  * @param QuarkClient $client
  *
  * @return bool
  */
 public function OnConnect(QuarkClient $client)
 {
     foreach ($this->_devices as $device) {
         $client->Send($this->_msg($device));
     }
     $client->Close();
 }