/// <summary> /// /// </summary> /// <param name="clientHeader"></param> /// <param name="socketWorkerItem"></param> /// <returns></returns> private bool CheckPattern(HTTP.Parsers.Request clientHeader, SocketWorkerItem socketWorkerItem) { switch (socketWorkerItem.SocketWorkerEntryType) { case EntryType.Url: if (!String.IsNullOrEmpty(clientHeader.Get("EntryPoint"))) { var strEntryPoint = clientHeader.Get("EntryPoint"); return(Strings.Contains(strEntryPoint, socketWorkerItem.strEntryPointPattern, socketWorkerItem.SocketWorkerEntryAnalysisType)); } break; case EntryType.Command: if (clientHeader.Query != null) { if (clientHeader.Query.Get(strCommand) != null) { var strTmp = clientHeader.Query.Get(strCommand); return(String.Equals(strTmp, socketWorkerItem.strEntryPointPattern)); } } break; case EntryType.Method: var strMethod = clientHeader.Get("Method"); if (!String.IsNullOrEmpty(strMethod)) { return(Strings.Contains(strMethod, socketWorkerItem.strEntryPointPattern, socketWorkerItem.SocketWorkerEntryAnalysisType)); } break; case EntryType.Header: if (!String.IsNullOrEmpty(clientHeader.Get(socketWorkerItem.strEntryPointPattern))) { return(true); } break; } return(false); }
/// <summary> /// Добавить воркер /// </summary> /// <param name="strWorkerName">Внутреннее имя, просто для удобства</param> /// <param name="strPattern">Паттерн-тригер, это может быть как подстрока, так и wildcard-маска или regex-выражение</param> /// <param name="socketWorkerFunction">Имя воркера</param> /// <param name="socketWorkerEntryType">Способ анализа для проверки условий вызова</param> /// <param name="socketWorkerEntryAnalysisType">Тип анализа - подстрока, так и wildcard-маска или regex-выражение</param> /// <param name="socketWorkerJobType">Что планируется делать, пока что это не сильно важно но, думаю, потом пригодитя для пре или пост работы с потоком соединения или какими-нибудь буфферами. В общем, TODO</param> public void Add(string strWorkerName, string strPattern, SocketWorkerFunction socketWorkerFunction = null, EntryType socketWorkerEntryType = EntryType.Command, Strings.EqualAnalysisType socketWorkerEntryAnalysisType = Strings.EqualAnalysisType.Strong, JobType socketWorkerJobType = JobType.SendText) { if (String.IsNullOrEmpty(strWorkerName) && String.IsNullOrEmpty(strPattern)) { throw new ArgumentNullException(); } var _item = new SocketWorkerItem { strEntryPointPattern = strPattern, SocketWorkerEntryType = socketWorkerEntryType, SocketWorkerEntryAnalysisType = socketWorkerEntryAnalysisType, SocketWorkerJobType = socketWorkerJobType, SocketWorkerFunction = socketWorkerFunction }; if (socketWorkerFunction == null) { LogFile.Debug("Null function for SocketWorker named '" + strWorkerName + "' with pattern '" + strPattern + "'"); _item.SocketWorkerFunction = EmptyWorker; } Items.Add(strWorkerName, _item); }