// メソッド public void Load(HatomaruManager manager, XmlElement contentElement){ string path = contentElement.GetAttribute(HatomaruReputation.UriAttributeName); Path = new AbsPath(path); Count = contentElement.GetAttributeInt(HatomaruReputation.CountAttributeName); Description = contentElement[HatomaruReputation.DescriptionElementName]; Title = manager.GetResponseTitle(Path); }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo を指定して、HatomaruData のインスタンスを開始します。 /// </summary> protected HatomaruData(HatomaruManager manager, FileInfo f){ myManager = manager; myFile = f; myLastModified = myFile.LastWriteTime; if(Manager.IniData.ExtInfo.ContainsKey(f.Extension.ToLower())){ myExt = Manager.IniData.ExtInfo[f.Extension.ToLower()]; } myBasePath = GetTrueFilePath(); }
/// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruBbs のインスタンスを開始します。 /// </summary> public SpamRule(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ myAsciionlyScore = GetWeight(AsciionlyScoreName); myNewpostScore = GetWeight(NewpostScoreName); myUrlScore = GetWeight(UrlScoreName); myEmailScore = GetWeight(EmailScoreName); foreach(XmlElement e in Document.GetElementsByTagName(WordElementName)){ myNGWords.Add(new NGWord(e)); } }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、Doc のインスタンスを開始します。 /// </summary> public HatomaruDoc(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ int index = 0; foreach(XmlElement e in x.GetElementsByTagName(TopicElement)){ if(string.IsNullOrEmpty(e.GetAttributeValue(HatomaruDoc.PageIdAttribute))){ DocTopic dt = new DocTopic(e, 0); myAnonymousTopics.Add(dt); } else { DocTopic dt = new DocTopic(e, ++index); myTopicsDic.Add(dt.Id, dt); } } myNamedTopics = new DocTopic[myTopicsDic.Values.Count]; myTopicsDic.Values.CopyTo(myNamedTopics, 0); }
// パブリックメソッド public void ProcessRequest(HttpContext context){ if(myManager == null || myManager.IsOld){ string iniFilePath = WebConfigurationManager.AppSettings[IniXmlPath]; if(!File.Exists(iniFilePath)){ throw new Exception("初期設定ファイルが見つかりません :" + iniFilePath); } myManager = new HatomaruManager(iniFilePath); } // robots.txt で 204 を返す if(context.Request.RawUrl.EndsWith("/robots.txt")){ context.Response.StatusCode = 204; return; } // 処理開始 myManager.Log.Clear(); try{ SendResponse(context); } catch(HatomaruXmlException e){ string errorLog = GetError(e, context.Request); try{ ThreadPool.QueueUserWorkItem(new WaitCallback(SaveLog), errorLog); } catch { // ログに保存できない例外はそのままスロー throw e; } SendServiceUnabailableResponse(context, errorLog); } catch(Exception e){ string errorLog = GetError(e, context.Request); try{ ThreadPool.QueueUserWorkItem(new WaitCallback(SaveLog), errorLog); } catch { // ログに保存できない例外はそのままスロー throw e; } SendInternalServerErrorResponse(context, errorLog); } }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruData のインスタンスを開始します。 /// </summary> protected HatomaruXml(HatomaruManager manager, FileInfo f, XmlDocument doc) : base(manager, f){ myDocument = doc; // ロード済み myMetaData = Document.DocumentElement[MetaName]; if(myMetaData == null) return; XmlElement title = myMetaData[TitleName]; if(title != null) myBaseTitle = title.InnerText; XmlElement desc = myMetaData[DescName]; if(desc != null) myDescription = desc.InnerText; XmlElement keywords = myMetaData[KeywordName]; if(keywords != null) myKeywords = keywords.InnerText; XmlElement topicSuffix = myMetaData[TopicSuffixName]; if(topicSuffix != null) myTopicSuffix = topicSuffix.InnerText; XmlNodeList styles = myMetaData.GetElementsByTagName(StyleName); foreach(XmlNode x in styles){ XmlElement e = x as XmlElement; if(x == null) continue; string linkHref = e.GetAttribute("href"); string linkTitle = e.GetAttribute("title"); linkHref = '/' + linkHref.TrimStart('/'); LinkItem s = new LinkItem(linkHref, linkTitle); myStyles.Add(s); } // 親 XML を取得 XmlNodeList indexes = myMetaData.GetElementsByTagName(IndexXmlName); if(indexes.Count > 0){ string indexXmlName = Util.GetAttributeValue(indexes[0], IndexXmlRefAttrName); if(!string.IsNullOrEmpty(indexXmlName)) myParentXml = GetDataByPathString(indexXmlName); } else if(!manager.RootXmlFile.FullName.Equals(f.FullName)){ myParentXml = manager.RootXml; } }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、Redirect のインスタンスを開始します。 /// </summary> public HatomaruRedirect(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ }
/// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruBbs のインスタンスを開始します。 /// </summary> public YearDiary(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ Load(); }
// コンストラクタ public AmazonManager(HatomaruManager manager){ myManager = manager; Aws = new AmazonWebService(manager); }
// コンストラクタ public AmazonWebService(HatomaruManager manager){ myManager = manager; myHelper = new AmazonProductAdvtApi.SignedRequestHelper(manager.IniData.AmazonWsAccessKeyId, manager.IniData.AmazonWsSecretKey, manager.IniData.AmazonServiceHostName); }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、インスタンスを開始します。 /// </summary> public CacheViewer(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){}
/// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruBbs のインスタンスを開始します。 /// </summary> public DiaryIndex(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ }
/// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruAccessCounter のインスタンスを開始します。 /// </summary> public HatomaruAccessCounter(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){}
public ReputationContent(HatomaruManager manager, XmlElement contentElement){ Load(manager, contentElement); }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruHtmlReference のインスタンスを開始します。 /// </summary> public HatomaruHtmlRef(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ InitTables(); Load(); }
private Dictionary<char, List<GlossaryWord>> myReadDic = new Dictionary<char, List<GlossaryWord>>(); // 読みの Dictionary // コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruBbs のインスタンスを開始します。 /// </summary> public HatomaruGlossary(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ myTable = new GlossaryTable(); myReadTable = new GlossaryReadTable(); Load(); }
// コンストラクタ /// <summary> /// HatomaruFile のインスタンスを開始します。 /// </summary> public HatomaruFile(HatomaruManager manager, FileInfo f) : base(manager, f){ }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、インスタンスを開始します。 /// </summary> public AmazonSearch(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ }
// 静的メソッド // XMLデータを読み取り、HatomaruXml を生成します。 public static HatomaruXml GetHatomaruXml(HatomaruManager manager, FileInfo f){ try{ XmlDocument x = new XmlDocument(); x.XmlResolver = null; for(int i=0;;i++){ try{ x.Load(f.FullName); break; } catch(IOException e){ System.Threading.Thread.Sleep(SaveRetryInterval); if(i > SaveRetryTime){ throw new HatomaruXmlException("データのロードに失敗しました。", e); } } } if(x.DocumentElement == null) throw new HatomaruXmlException("XMLファイルが空か、ルート要素がありません。"); string rootName = x.DocumentElement.Name; foreach(Type t in mySubTypes){ string name = GetFieldValue(t, "Name"); if(name.Eq(rootName)){ ConstructorInfo ci = t.GetConstructor(new Type[]{typeof(HatomaruManager), typeof(FileInfo), typeof(XmlDocument)}); if(ci == null) throw new Exception(name + "には適切なコンストラクタがありません。"); Object o = ci.Invoke(new Object[]{manager, f, x}); HatomaruXml result = o as HatomaruXml; return result; } } return new HatomaruDoc(manager, f, x); } catch(System.Data.ConstraintException e){ throw new HatomaruXmlException("データのロードに失敗しました。", e); } catch(System.Xml.XmlException e){ throw new HatomaruXmlException("XMLデータのパースに失敗しました。", e); } }
/// <summary> /// データソースの FileInfo と XmlDocument を指定して、Reputation のインスタンスを開始します。 /// </summary> public HatomaruReputation(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ Table = new ReputationTable(this); }
// コンストラクタ /// <summary> /// 鳩丸データのデータソースの FileInfo と XmlDocument を指定して、HatomaruBbs のインスタンスを開始します。 /// </summary> public HatomaruBbs(HatomaruManager manager, FileInfo f, XmlDocument x) : base(manager, f, x){ myTable = new BbsTable(x); }