Newer
Older
smart-home-server / server / SHServ / Controllers / EventsController.php
<?php

namespace SHServ\Controllers;

use \SHServ\Models\Devices;

class EventsController extends \SHServ\Middleware\Controller {

	/**
	 * Тригерит ивенты от устройств
	 * @param  String $event_name Like a "click"
	 * @param  String $device_id  device_hard_id
	 * @param  String $data  Arguments from device to event handlers
	 */
	public function new_event($event_name, $device_id, $data) {
		$devices_model = new Devices();
		$device = $devices_model -> get_by_device_hard_id($device_id);

		ob_start();
		var_dump([$event_name, $device_id, $data]);
		file_put_contents("/srv/http/smart-home-serv.local/server/SHServ/Logs/dump.log", ob_get_contents());
		ob_end_clean();

		if(!$device) {
			return $this -> utils() -> response_error("unknown_device", ["device_id"]);
		}

		if(!$device -> auth() -> is_active()) {
			return $this -> utils() -> response_error("error_of_device_auth");
		}

		ignore_user_abort(true);
		set_time_limit(2);

		ob_start();
		http_response_code(200);
		header("Content-Type: application/json; charset=utf-8");
		echo json_encode(['status' => 'ok']);

		$size = ob_get_length();
		header("Content-Length: {$size}");
		ob_end_flush();
		flush();

		$result = events() -> app_call(
			"{$device -> device_type}.{$event_name}",
			[
				"device" => $device,
				"data" => $data	
			]
		);

		return $this -> utils() -> response_success([
			"result" => $result
		]);
	}
}