コード例 #1
0
        /// <summary>
        /// xmlの内容を全て取得する
        /// </summary>
        /// <returns>RodDBModel</returns>
        private FishDBModel getFishDB(string iRodName)
        {
            string xmlFilename = PATH_FISHDB + @"\" + iRodName + ".xml";

            try
            {
                FishDBModel fishdb = new FishDBModel(iRodName);
                if (File.Exists(xmlFilename))
                {
                    for (int i = 0; i < Constants.FILELOCK_RETRY_COUNT; i++)
                    {
                        try
                        {
                            using (FileStream fs = new FileStream(xmlFilename, FileMode.Open, FileAccess.Read, FileShare.Read))
                            {
                                XmlSerializer serializer = new XmlSerializer(typeof(FishDBModel));
                                fishdb = (FishDBModel)serializer.Deserialize(fs);
                            }
                            break;
                        }
                        catch (IOException)
                        {
                            Thread.Sleep(100);
                            continue;
                        }
                    }
                }
                return(fishdb);
            }
            catch (Exception e)
            {
                logger.Fatal("{0}の取得中にエラーが発生しました。", xmlFilename);
                throw e;
            }
        }
コード例 #2
0
        /// <summary>
        /// 魚リストの取得
        /// </summary>
        /// <param name="iRodName">竿名称</param>
        /// <param name="iZoneName">エリア名称</param>
        /// <param name="iBaitName">エサ名称</param>
        /// <returns></returns>
        public List <FishDBFishModel> SelectFishList(string iRodName, string iZoneName, string iBaitName)
        {
            logger.Trace("RodName={0} ZoneName={1} BaitName={2}", iRodName, iZoneName, iBaitName);
            List <FishDBFishModel> ret    = new List <FishDBFishModel>();
            FishDBModel            fishDB = getFishDB(iRodName);

            foreach (FishDBFishModel fish in fishDB.Fishes)
            {
                bool foundZoneFlg = false;
                if (iZoneName != string.Empty)
                {
                    foundZoneFlg = fish.ZoneNames.Contains(iZoneName);
                }
                else
                {
                    foundZoneFlg = true;
                }
                bool foundBaitFlg = false;
                if (iBaitName != string.Empty)
                {
                    foundBaitFlg = fish.BaitNames.Contains(iBaitName);
                }
                else
                {
                    foundBaitFlg = true;
                }
                if (foundZoneFlg && foundBaitFlg)
                {
                    ret.Add(fish);
                }
            }
            ret.Sort(FishDBFishModel.SortTypeName);
            return(ret);
        }
コード例 #3
0
        /// <summary>
        /// 全竿に登録されている魚名を取得する
        /// </summary>
        /// <returns>魚名称</returns>
        public List <string> SelectAllFishName()
        {
            List <string> ret = new List <string>();

            foreach (string rod in _Rods)
            {
                FishDBModel fishDB = getFishDB(rod);
                foreach (FishDBFishModel fish in fishDB.Fishes)
                {
                    if (!ret.Contains(fish.FishName))
                    {
                        ret.Add(fish.FishName);
                    }
                }
            }
            ret.Sort();
            return(ret);
        }
コード例 #4
0
        /// <summary>
        /// 魚を削除する
        /// </summary>
        /// <param name="iRod">竿</param>
        /// <returns>True:成功</returns>
        public bool DeleteFish(string iRodName, string iFishName)
        {
            logger.Trace("RodName={0} FishName={1}", iRodName, iFishName);
            FishDBModel fishDB = getFishDB(iRodName);

            //xmlに存在すれば削除する
            for (int i = 0; i < fishDB.Fishes.Count; i++)
            {
                if (fishDB.Fishes[i].FishName == iFishName)
                {
                    fishDB.Fishes.RemoveAt(i);
                    break;
                }
            }
            //Rod.xmlへ出力する
            if (!putFishDB(iRodName, fishDB))
            {
                return(false);
            }
            return(true);
        }
コード例 #5
0
        /// <summary>
        /// xmlに登録内容を書き出す
        /// </summary>
        /// <param name="iFishDB">RodDBModel</param>
        /// <returns>True:成功</returns>
        private bool putFishDB(string iRodName, FishDBModel iFishDB)
        {
            string xmlFilename = PATH_FISHDB + @"\" + iRodName + ".xml";

            try
            {
                for (int i = 0; i < Constants.FILELOCK_RETRY_COUNT; i++)
                {
                    try
                    {
                        using (FileStream fs = new FileStream(xmlFilename, FileMode.Create, FileAccess.Write, FileShare.None))//ファイルロック
                        {
                            StreamWriter            sw = new StreamWriter(fs, new UTF8Encoding(false));
                            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                            ns.Add(String.Empty, String.Empty);
                            XmlSerializer serializer = new XmlSerializer(typeof(FishDBModel));
                            serializer.Serialize(sw, iFishDB, ns);
                            //書き込み
                            sw.Flush();
                            sw = null;
                            fs.Close();
                        }
                        break;
                    }
                    catch (IOException)
                    {
                        Thread.Sleep(100);
                        continue;
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                logger.Fatal("{0}の登録中にエラーが発生しました。", xmlFilename);
                throw e;
            }
        }
コード例 #6
0
        /// <summary>
        /// 魚を取得する(ID,Zone)
        /// </summary>
        /// <param name="iRodName">竿名称</param>
        /// <param name="iID1">ID1</param>
        /// <param name="iID2">ID2</param>
        /// <param name="iID3">ID3</param>
        /// <param name="iID4">ID4</param>
        /// <param name="iWithUnknownFish">不明魚も返す場合Trueを指定</param>
        /// <returns></returns>
        public FishDBFishModel SelectFishFromIDZone(string iRodName, int iID1, int iID2, int iID3, int iID4, string iZoneName, bool iWithUnknownFish)
        {
            logger.Trace("RodName={0} ID1={1} ID2={2} ID3={3} ID4={4} ZoneName={5} WithUnknownFish={6}", iRodName, iID1, iID2, iID3, iID4, iZoneName, iWithUnknownFish);
            FishDBModel fishDB = getFishDB(iRodName);

            foreach (FishDBFishModel fish in fishDB.Fishes)
            {
                if (iWithUnknownFish == true ||
                    (iWithUnknownFish == false && fish.FishType != FishDBFishTypeKind.UnknownSmallFish &&
                     fish.FishType != FishDBFishTypeKind.UnknownLargeFish &&
                     fish.FishType != FishDBFishTypeKind.UnknownItem &&
                     fish.FishType != FishDBFishTypeKind.UnknownMonster &&
                     fish.FishType != FishDBFishTypeKind.Unknown))
                {
                    if (fish.IDs.Contains(new FishDBIdModel(iID1, iID2, iID3, iID4)) &&
                        fish.ZoneNames.Contains(iZoneName))
                    {
                        return(fish);
                    }
                }
            }
            return(new FishDBFishModel());
        }
コード例 #7
0
        /// <summary>
        /// xmlファイルをコンバートする(1.0.0→1.0.5)
        /// </summary>
        private void convert1_0_0to1_0_5(string iXmlFileName, string iRodName)
        {
            FishDBModel1_0_0 fishdb1_0_0 = getFishDB1_0_0(iRodName);
            FishDBModel      fishdb1_0_5 = new FishDBModel();

            fishdb1_0_5.Version = "1.0.5";
            fishdb1_0_5.RodName = fishdb1_0_0.RodName;
            foreach (FishDBFishModel1_0_0 fish1_0_0 in fishdb1_0_0.Fishes)
            {
                FishDBFishModel fish1_0_5 = new FishDBFishModel();
                //FishDBFishTypeKind.Monster→FishDBFishTypeKind.UnknownMonster
                if (fish1_0_0.FishType == FishDBFishTypeKind.Monster)
                {
                    fish1_0_0.FishType = FishDBFishTypeKind.UnknownMonster;
                }
                fish1_0_5.FishType = fish1_0_0.FishType;
                //FishName
                if (fish1_0_0.FishType == FishDBFishTypeKind.UnknownSmallFish ||
                    fish1_0_0.FishType == FishDBFishTypeKind.UnknownLargeFish ||
                    fish1_0_0.FishType == FishDBFishTypeKind.UnknownItem ||
                    fish1_0_0.FishType == FishDBFishTypeKind.UnknownMonster ||
                    fish1_0_0.FishType == FishDBFishTypeKind.Unknown)
                {
                    if (fish1_0_0.IDs.Count > 0)
                    {
                        fish1_0_5.FishName = FishDB.GetTmpFishNameFromFishType(fish1_0_0.FishType, fish1_0_0.IDs[0].ID1, fish1_0_0.IDs[0].ID2, fish1_0_0.IDs[0].ID3, fish1_0_0.IDs[0].ID4);
                    }
                    else
                    {
                        fish1_0_5.FishName = fish1_0_0.FishName;
                    }
                }
                else
                {
                    fish1_0_5.FishName = fish1_0_0.FishName;
                }
                //ID
                foreach (FishDBIdModel1_0_0 id1_0_0 in fish1_0_0.IDs)
                {
                    FishDBIdModel id1_0_5 = new FishDBIdModel();
                    id1_0_5.ID1      = id1_0_0.ID1;
                    id1_0_5.ID2      = id1_0_0.ID2;
                    id1_0_5.ID3      = id1_0_0.ID3;
                    id1_0_5.ID4      = id1_0_0.ID4;
                    id1_0_5.Count    = id1_0_0.Count;
                    id1_0_5.Critical = id1_0_0.Critical;
                    id1_0_5.ItemType = FishDBItemTypeKind.Common;
                    fish1_0_5.IDs.Add(id1_0_5);
                }
                //エリア 初期化する
                fish1_0_5.ZoneNames = new List <string>();
                //エサ
                fish1_0_5.BaitNames = fish1_0_0.BaitNames;

                fishdb1_0_5.Fishes.Add(fish1_0_5);
            }

            //バックアップ
            string backupFileName = iXmlFileName + ".bak";

            if (File.Exists(backupFileName))
            {
                File.Delete(backupFileName);
            }
            File.Copy(iXmlFileName, backupFileName);
            //xml書き込み
            putFishDB(iRodName, fishdb1_0_5);
        }
コード例 #8
0
        public bool AddFish(string iRodName, string iFishName, FishDBFishTypeKind iFishType, FishDBIdModel iID, string iZoneName, string iBaitName)
        {
            logger.Trace("RodName={0} Fish={1} Type={2} ID={3} Zone={4} Bait={5}", iRodName, iFishName, iFishType, iID, iZoneName, iBaitName);
            FishDBModel fishDB = getFishDB(iRodName);

            fishDB.Version = VERSION;
            fishDB.RodName = iRodName;

            //不明魚として登録されている場合、削除する
            for (int fishIdx = 0; fishIdx < fishDB.Fishes.Count; fishIdx++)
            {
                if (fishDB.Fishes[fishIdx].IDs.Contains(iID) &&
                    fishDB.Fishes[fishIdx].ZoneNames.Contains(iZoneName) &&
                    (fishDB.Fishes[fishIdx].FishType == FishDBFishTypeKind.UnknownSmallFish ||
                     fishDB.Fishes[fishIdx].FishType == FishDBFishTypeKind.UnknownLargeFish ||
                     fishDB.Fishes[fishIdx].FishType == FishDBFishTypeKind.UnknownItem ||
                     fishDB.Fishes[fishIdx].FishType == FishDBFishTypeKind.UnknownMonster ||
                     fishDB.Fishes[fishIdx].FishType == FishDBFishTypeKind.Unknown))
                {
                    fishDB.Fishes[fishIdx].ZoneNames.Remove(iZoneName);
                    //エリア情報が無くなっった場合、魚情報を削除する
                    if (fishDB.Fishes[fishIdx].ZoneNames.Count == 0)
                    {
                        fishDB.Fishes.RemoveAt(fishIdx);
                    }
                    break;
                }
            }

            //更新処理
            bool foundFlg = false;

            for (int fishIdx = 0; fishIdx < fishDB.Fishes.Count; fishIdx++)
            {
                if (fishDB.Fishes[fishIdx].FishName == iFishName)
                {
                    foundFlg = true;
                    fishDB.Fishes[fishIdx].FishName = iFishName;
                    fishDB.Fishes[fishIdx].FishType = iFishType;
                    if (!fishDB.Fishes[fishIdx].IDs.Contains(iID))
                    {
                        logger.Info("IDの追加 竿={0} 魚={1} ID={2}", iRodName, iFishName, iID);
                        fishDB.Fishes[fishIdx].IDs.Add(iID);
                    }
                    if (!fishDB.Fishes[fishIdx].ZoneNames.Contains(iZoneName))
                    {
                        logger.Info("エリアの追加 竿={0} 魚={1} エリア={2}", iRodName, iFishName, iZoneName);
                        fishDB.Fishes[fishIdx].ZoneNames.Add(iZoneName);
                    }
                    if (!fishDB.Fishes[fishIdx].BaitNames.Contains(iBaitName))
                    {
                        logger.Info("エサの追加 竿={0} 魚={1} エサ={2}", iRodName, iFishName, iBaitName);
                        fishDB.Fishes[fishIdx].BaitNames.Add(iBaitName);
                    }
                }
            }
            //新規追加処理
            if (!foundFlg)
            {
                logger.Info("魚の追加 竿={0} 魚={1} 魚タイプ={2} ID={3} エリア={4} エサ={5}", iRodName, iFishName, iFishType, iID, iZoneName, iBaitName);
                FishDBFishModel fish = new FishDBFishModel();
                fish.FishName = iFishName;
                fish.FishType = iFishType;
                fish.IDs.Add(iID);
                fish.ZoneNames.Add(iZoneName);
                fish.BaitNames.Add(iBaitName);
                fishDB.Fishes.Add(fish);
            }
            //ソート
            fishDB.Fishes.Sort(FishDBFishModel.SortTypeName);
            for (int i = 0; i < fishDB.Fishes.Count; i++)
            {
                fishDB.Fishes[i].IDs.Sort(FishDBIdModel.SortCountCritical);
            }
            //Rod.xmlへ出力する
            if (!putFishDB(iRodName, fishDB))
            {
                return(false);
            }
            return(true);
        }