Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }