Пример #1
0
 /// <summary>Sessionサイズ測定</summary>
 /// <returns>Sessionサイズ(KB)</returns>
 /// <remarks>シリアル化できないオブジェクトを含む場合は落ちる。</remarks>
 public static long CalculateSessionSizeKB()
 {
     return(PubCmnFunction.CalculateSessionSize() / 1000);
 }
Пример #2
0
        /// <summary>プロパティ文字列からプロパティ名・値の組を取得</summary>
        /// <param name="propString">プロパティ文字列</param>
        /// <returns>プロパティ名・値(ディクショナリ)</returns>
        /// <remarks>
        /// プロパティ文字列のフォーマット
        /// [property=value[;property=value]]
        ///
        /// [ property ]、[ value ]に[ = ]、[ ; ]が混じる場合は、
        /// { }で囲い( {=}、{;} )エスケープできる。
        /// ただし、{ }のエスケープはできない。
        /// ※ 特殊文字は、=、;、{、}
        /// </remarks>
        public static Dictionary <string, string> GetPropsFromPropString(string propString)
        {
            // ディクショナリ
            Dictionary <string, string> ht = new Dictionary <string, string>();

            // ストリング ビルダ
            StringBuilder sb = new StringBuilder();

            // プロパティ名・値
            string propName  = "";
            string propValue = "";

            // ステータス
            bool isFirst = true;

            bool isMidPtHead = false;
            bool isInMidPt   = false;
            bool isMidPtFoot = false;

            bool isInPropName  = false;
            bool isInPropValue = false;

            foreach (char ch in propString)
            {
                if (isFirst)
                {
                    // 先頭

                    // 先頭終わり
                    isFirst = false;

                    // プロパティ開始
                    isInPropName  = true;
                    isInPropValue = false;

                    if (ch == '=' || ch == ';' || ch == '}')
                    {
                        // エラー
                        PubCmnFunction.ThrowPropStringFormatException(
                            PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_START_CHARACTER);
                    }
                    else if (ch == '{')
                    {
                        // 中括弧開始
                        isMidPtHead = true;
                        isInMidPt   = false;
                        isMidPtFoot = false;
                    }
                    else
                    {
                        // 追加
                        sb.Append(ch);
                    }
                }
                else
                {
                    // 先頭後

                    if (isMidPtHead)
                    {
                        if (ch == '=' || ch == ';')
                        {
                            // 中括弧中
                            isMidPtHead = false;
                            isInMidPt   = true;
                            isMidPtFoot = false;

                            // 追加
                            sb.Append(ch);
                        }
                        else
                        {
                            // エラー
                            PubCmnFunction.ThrowPropStringFormatException(String.Format(
                                                                              PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_ESCAPE_CHARACTER, ch));
                        }
                    }
                    else if (isInMidPt)
                    {
                        if (ch == '}')
                        {
                            // 中括弧後
                            isMidPtHead = false;
                            isInMidPt   = false;
                            isMidPtFoot = true;
                        }
                        else
                        {
                            // エラー
                            PubCmnFunction.ThrowPropStringFormatException(
                                PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_CURLY_BRACE + "-1");
                        }
                    }
                    else
                    {
                        // 中括弧外になった
                        if (isMidPtFoot)
                        {
                            // 初期化
                            isMidPtHead = false;
                            isInMidPt   = false;
                            isMidPtFoot = false;
                        }

                        // 中括弧外
                        if (ch == '{')
                        {
                            // 中括弧開始
                            isMidPtHead = true;
                            isInMidPt   = false;
                            isMidPtFoot = false;
                        }
                        if (ch == '}')
                        {
                            // エラー
                            PubCmnFunction.ThrowPropStringFormatException(
                                PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_CURLY_BRACE + "-2");
                        }
                        else if (ch == '=')
                        {
                            // プロパティ名の終わり
                            if (isInPropName)
                            {
                                if (sb.ToString() == "")
                                {
                                    // エラー
                                    PubCmnFunction.ThrowPropStringFormatException(
                                        PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_PROPERTY_NAME_IS_EMPTY);
                                }
                                else
                                {
                                    // プロパティ名が在
                                    propName = sb.ToString();

                                    // ストリング ビルダのクリア
                                    sb = new StringBuilder();

                                    // 状態変更
                                    isInPropName  = false;
                                    isInPropValue = true;
                                }
                            }
                            else
                            {
                                // エラー
                                PubCmnFunction.ThrowPropStringFormatException(
                                    PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_DELIMITER_OF_PROPERTY_VALUE);
                            }
                        }
                        else if (ch == ';')
                        {
                            // プロパティ値の終わり
                            if (isInPropValue)
                            {
                                if (sb.ToString() == "")
                                {
                                    // エラー
                                    PubCmnFunction.ThrowPropStringFormatException(
                                        PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_PROPERTY_VALUE_IS_EMPTY);
                                }
                                else
                                {
                                    // プロパティ値が在
                                    propValue = sb.ToString();

                                    // ストリング ビルダのクリア
                                    sb = new StringBuilder();

                                    // 状態変更
                                    isInPropName  = true;
                                    isInPropValue = false;
                                }
                            }
                            else
                            {
                                // エラー
                                PubCmnFunction.ThrowPropStringFormatException(
                                    PublicExceptionMessage.PROP_STRING_FORMAT_ERROR_DELIMITER_OF_PROPERTY_NAME);
                            }
                        }
                        else
                        {
                            // 追加
                            sb.Append(ch);
                        }

                        // 両方に値が入った
                        if (propName != "" && propValue != "")
                        {
                            // 重複していたら上書きという仕様
                            ht[propName.ToUpper()] = propValue; // #33-この行

                            // 値をクリアする。
                            propName  = "";
                            propValue = "";
                        }
                    }
                }
            }

            // プロパティ値の終わり
            if (isInPropValue)
            {
                if (sb.ToString() == "")
                {
                    // プロパティ値が空
                    // エラー
                }
                else
                {
                    // プロパティ値が在
                    propValue = sb.ToString();

                    // ストリング ビルダのクリア
                    sb = new StringBuilder();

                    // 状態変更
                    isInPropName  = true;
                    isInPropValue = false;
                }
            }
            else
            {
                //// エラー
                //Form1.ThrowPropStringFormatException("6");
                // → 最後が;で終わっている場合が有るので、エラーを上げない。
            }

            // 両方に値が入った
            if (propName != "" && propValue != "")
            {
                // 重複していたら上書きという仕様
                ht[propName.ToUpper()] = propValue; // #33-この行

                // 値をクリアする。
                propName  = "";
                propValue = "";
            }

            return(ht);
        }
Пример #3
0
 public void Initialize()
 {
     //New instance of Pub Cmn Function
     _pubCmnFunction = new PubCmnFunction();
 }