<?php
/**
* セッションハンドラを生成するファクトリクラス
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class charcoal_SessionHandlerFactory
{
	/*
	 * セッションハンドラを作成
	 */
	public static function create( $session_handler_name )
	{
		log_info( "system",  "セッションハンドラ[$session_handler_name]をロードします。", __FILE__, __LINE__ );

		// session_handlerConfigをロード
		$config = charcoal_ConfigLoader::loadConfig( $session_handler_name, "session_handler" );

		// クラス名を取得
		$class_name = $config->getString( "class_name" );

		// セッションハンドラのインスタンス生成
		$session_handler = charcoal_ClassUtil::newInstance( $class_name );

		// 生成したインスタンスがIsession_handlerインタフェースを実装しているか確認
		if ( !($session_handler instanceof charcoal_ISessionHandler) ){
			// 実装例外
			throw new charcoal_InterfaceImplementException( $class_name, "charcoal_ISessionHandler" );
		}

		log_info( "system",  "セッションハンドラ[$session_handler_name]を初期化します。", __FILE__, __LINE__ );

		// セッションハンドラを初期化
		$session_handler->init( $config );

		ini_set('session.save_handler', 'user');

		// セッションハンドラのコールバック関数を登録
		session_set_save_handler(
					array( $class_name, 'open' ), 
					array( $class_name, 'close' ), 
					array( $class_name, 'read' ), 
					array( $class_name, 'write' ), 
					array( $class_name, 'destroy' ), 
					array( $class_name, 'gc' )
			);

		log_info( "system",  "セッションハンドラ[$session_handler_name]をロードしました。", __FILE__, __LINE__ );

		// ロードしたセッションハンドラを返却
		return $session_handler;
	}
}
