<?php
namespace KIF\Core;

use KIF\Core\Config;
use Exception;

/**
 * 
 * In Process Call的缩写,即 进程内调用
 * 目的:
 *     1、保护上下文环境
 *     2、简化调用代码
 * 使用场景:
 *     支持在任何地方调用基于KIF框架的app。
 * @author husserlgao
 *
 */
class IPC {
	/**
	 * 
	 * 调用
	 * @param string $conf_file 要调用的app类的配置文件
	 * @param callback $callback 回调执行的函数
	 */
	static public function call($callback, $conf_file) {
		# 尝试保存调用前的配置
		try {
			$pre_app_conf_path = Config::getInstance()->get('conf_path');
		} catch (Exception $e) {
			$pre_app_conf_path = false;
		}
		
		Config::load($conf_file);
		$callback();
		
		# 恢复到调用前的应用配置
		if ($pre_app_conf_path) {
			Config::load($pre_app_conf_path);
		}
	}
	
/**
	 * 
	 * 调用!!!这是个临时的方法,只因没有时间去把调call的地方改过来。
	 * @param string $conf_file 要调用的app类的配置文件
	 * @param callback $callback 回调执行的函数
	 */
	static public function call2($callback, $conf_file) {
		# 尝试保存调用前的配置
		try {
			$pre_app_conf_path = Config::getInstance()->get('conf_path');
		} catch (Exception $e) {
			$pre_app_conf_path = false;
		}
		
		Config::load($conf_file);
		$callback();
		
		# 恢复到调用前的应用配置
		if ($pre_app_conf_path) {
			Config::load($pre_app_conf_path);
		}
	}
}