本項目は設計変更(2012/08/07-1)により破棄された

(Win32)設定ファイル(2012/08/02-2)

 設定ファイルはWebSocketサーバーの待機ポートや、プラグインサーバーの挙動を示すための設定を記述するためのファイルとなる。
 ファイル自体はテキスト形式の一般的な設定ファイルとし、設定の読み込みにはGetPrivateProfileIntやGetPrivateProfileStringを使用する。
 設定の読み込みはプログラム起動時に行われ、シングルトンクラスであるCSettingに登録される。
 以下にテストで使用する設定ファイルと設定を読み込むプログラムファイルを示す。
 設定ファイルはプログラムのロードモジュールと同一フォルダに置く必要がある。

SPWSSetting.ini(設定ファイル)
[Outline]
ListenNumber=1

[PortSetting1]
PortNumber=12345
ServerProgram=AnnounceServer.exe
ServerArgument=

PortSetting.h(待機ポート設定読み込み用クラスヘッダ)
#pragma once

class CPortSetting
{
private:
    unsigned short m_usPort;
    wchar_t * m_pszProgram;
    wchar_t * m_pszArgument;

public:
    CPortSetting();
    ~CPortSetting();

    void SetPortNumber( unsigned short usPort );
    unsigned short GetPortNumber();

    void SetProgram( const wchar_t * pcszProgram );
    const wchar_t * GetProgram();

    void SetArgument( const wchar_t * pcszArgument );
    const wchar_t * GetArgument();
};
PortSetting.cpp
#include <string.h>
#include "PortSetting.h"
#include "Tool.h"

//
//    コンストラクタ
//
//        文字列の初期化処理を行う
//

CPortSetting::CPortSetting()
{
    m_pszProgram = NULL;
    m_pszArgument = NULL;
}

//
//    デストラクタ
//
//        文字列のメモリを開放する
//

CPortSetting::~CPortSetting()
{
    CTool::ReleaseString( &m_pszProgram );
    CTool::ReleaseString( &m_pszArgument );
}

//
//    ポート番号のセッタ
//

void CPortSetting::SetPortNumber( unsigned short usPort )
{
    m_usPort = usPort;
}
//
//    ポート番号のゲッタ
//

unsigned short CPortSetting::GetPortNumber()
{
    return m_usPort;
}

//
//    起動プログラムのセッタ
//

void CPortSetting::SetProgram( const wchar_t * pcszProgram )
{
    CTool::SetString( &m_pszProgram, pcszProgram );
}
//
//    起動プログラムのゲッタ
//

const wchar_t * CPortSetting::GetProgram()
{
    return m_pszProgram;
}

//
//    起動プログラム引数のゲッタ
//

void CPortSetting::SetArgument( const wchar_t * pcszArgument )
{
    CTool::SetString( &m_pszArgument, pcszArgument );
}
//
//    起動プログラム引数のセッタ
//

const wchar_t * CPortSetting::GetArgument()
{
    return m_pszArgument;
}


Setting.h(設定ファイルマネージャ)
#pragma once

#include "PortSetting.h"

class CSetting
{
    //シングルトン用にコンストラクタをプライベートに
private:
    CSetting();
    static CSetting ms_instance;

    void LoadSetting();

    int m_iListenNumber;
    CPortSetting *m_pPortSettings;

public:
    //インスタンスの取得用
    static CSetting * Inst();

    int GetListenNumber();
    CPortSetting * GetListenPort( int iIndex );
};
Setting.cpp
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "Setting.h"

CSetting CSetting::ms_instance;

//
//    コンストラクタ
//
CSetting::CSetting()
{
    m_iListenNumber = 0;
    m_pPortSettings = NULL;

    LoadSetting();
}

//
//    インスタンスの取得
//        設定を利用する側はこのインスタンスを介して設定を利用する
//
CSetting * CSetting::Inst()
{
    return &ms_instance;
}

//
//    設定情報のロード
//
void CSetting::LoadSetting()
{
    wchar_t szFileName[1024];

    //プログラムのディレクトリを取得する
    GetModuleFileName(NULL, szFileName, 1024);

    int iLength = (int)wcslen( szFileName );
    for( int i=iLength-1 ; i>=0 ; i-- )
    {
        if( szFileName[i] == L'\\' )
        {
            szFileName[i+1] = L'\0';
            break;
        }
    }

    //設定ファイルのファイル名(フルパス)
    wcscat_s( szFileName, 1024, L"SPWSSSetting.ini" );

    m_iListenNumber = (int)GetPrivateProfileInt( L"Outline", L"ListenNumber", 0, szFileName );
    if( m_pPortSettings )
    {
        delete[] m_pPortSettings;
    }
    if( m_iListenNumber )
    {
        m_pPortSettings = new CPortSetting[ m_iListenNumber ];
    }
    
    //各ポート設定を読み込み
    for( int i=0 ; i<m_iListenNumber ; i++ )
    {
        wchar_t szSection[64];
        swprintf_s( szSection, 64, L"PortSetting%d", i+1 );
        wchar_t szTemp[1024];

        //ポート番号の取得
        m_pPortSettings[i].SetPortNumber( (unsigned short)GetPrivateProfileInt( szSection, L"PortNumber", 0, szFileName ) );

        //サーバープログラムの取得
        GetPrivateProfileString( szSection, L"ServerProgram", L"", szTemp, 1024, szFileName );
        m_pPortSettings[i].SetProgram( szTemp );

        //サーバープログラム引数の取得
        GetPrivateProfileString( szSection, L"ServerArgument", L"", szTemp, 1024, szFileName );
        m_pPortSettings[i].SetArgument( szTemp );


    }
}


//
//    待機ポートの個数
//
int CSetting::GetListenNumber()
{
    return m_iListenNumber;
}

//
//    待機ポートの情報
//
//    引数:
//        iIndex : ポートの情報を取得するデータのインデックス番号
//
//    戻り値:
//        !=NULL : ポート情報が格納されたCPortSettingクラスのインスタンスへのポインタ
//        ==NULL : 該当ポート情報なし
//
CPortSetting * CSetting::GetListenPort( int iIndex )
{
    if( iIndex < m_iListenNumber && iIndex >= 0 )
    {
        return m_pPortSettings + iIndex;
    }
    return NULL;
}