2013年3月18日

SuperSocket的研究(10)—— 扩展服务器配置文件

当你用SuperSocket实现自己的socket服务器时,不可避免地要在配置文件中定义一些参数。SuperSocket提供一种简单的方式来存储你配置文件中的参数,然后在AppServer中读取并使用它们。
请看下面的配置文件代码:
<server name="FlashPolicyServer"
        serverType="SuperSocket.Facility.PolicyServer.FlashPolicyServer, SuperSocket.Facility"
        ip="Any" port="843"
        receiveBufferSize="32"
        maxConnectionNumber="100"
        clearIdleSession="true"
        policyFile="Policy\flash.xml">
</server>
在上面的server配置信息中,SuperSocket并没有定义“policyFile”属性,但你仍可以在AppServer类中读取它:
public class YourAppServer : AppServer
{
    private string m_PolicyFile;

    protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
    {  
        m_PolicyFile = config.Options.GetValue("policyFile");

        if (string.IsNullOrEmpty(m_PolicyFile))
        {
            if(Logger.IsErrorEnabled)
                Logger.Error("Configuration option policyFile is required!");
            return false;
        }

        return true;
    }
}
我们不仅可以在server结点添加自定义的属性,还可以添加自定义的子节点,如下:
<server name="SuperWebSocket"
        serverTypeName="SuperWebSocket"
        ip="Any" port="2011" mode="Tcp">
    <subProtocols>
        <!--你的配置信息-->
    </subProtocols>
</server>
如果这样做,还需要一个ConfigurationElement类:
/// <summary>
/// SubProtocol configuration
/// </summary>
public class SubProtocolConfig : ConfigurationElement
{
    //配置属性
}
/// <summary>
/// SubProtocol configuation collection
/// </summary>
[ConfigurationCollection(typeof(SubProtocolConfig))]
public class SubProtocolConfigCollection : ConfigurationElementCollection
{
    //配置属性
}
然后你就可以在你的AppServer中读取这个子节点了:
public class YourAppServer : AppServer
{
    private SubProtocolConfigCollection m_SubProtocols;

    protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
    {  
        m_SubProtocols = config.GetChildConfig<SubProtocolConfigCollection>("subProtocols");

        if (m_SubProtocols == null)
        {
            if(Logger.IsErrorEnabled)
                Logger.Error("The child configuration node 'subProtocols' is required!");
            return false;
        }

        return true;
    }
}

没有评论:

发表评论