コード例 #1
0
        static void Main(string[] args)
        {
            QuoteHistory quoteHistory      = new QuoteHistory();
            IRequestData requestMarketData = RequestDataFactory.GetInstance(RequestDataFactory.RequstDataEnum.Yahoo);


            // string[] symbols = {"PLE.L"};
            string[] symbols = { "PLE.L", "RMG.L", "TSCO.L" };

            int limit   = 10;
            int counter = 0;

            while (counter++ < limit)
            {
                requestMarketData.RequestQuote(symbols);
                ICollection <Quote> quotes = requestMarketData.GetQuotes();
                quoteHistory.AddQuotes(quotes);
                Thread.Sleep(1000);
            }

            ICollection <Quote> allQuotes = quoteHistory.Quotes;

            foreach (Quote quote in allQuotes)
            {
                Console.WriteLine("{0} {1}", quote.Symbol, quote.Ask);
            }
            Console.ReadLine();
        }
コード例 #2
0
        /// <summary>
        /// 读操作
        /// </summary>
        /// <param name="owinSocket"></param>
        /// <param name="buffer"></param>
        /// <param name="nread"></param>
        /// <param name="ex"></param>
        /// <param name="state"></param>
        private void OnReadCompleteCallback(OwinSocket owinSocket, byte[] buffer, int nread, Exception ex, object state)
        {
            if (nread < 1 || ex != null || buffer == null)
            {
                owinSocket.Dispose();
                RequestDataFactory.Recover(_requestData);
                _requestData = null;
                return;
            }
            Buffer.BlockCopy(buffer, 0, _requestData, _requestDataOffset, nread);

            _requestDataOffset += nread;
            _requestDataSize   += nread;
            if (_requestDataSize > 15)
            {
                int length = CommonUtil.GetBytesRealLength(_requestData, _requestDataSize, false);
                if (length > 0)
                {
                    AddToProcessThread(length, owinSocket);
                    return;
                }
            }
            if (_requestDataSize > 4000)
            {
                owinSocket.Dispose();
                RequestDataFactory.Recover(_requestData);
                _requestData = null;
                return;
            }
            owinSocket.Read(new Action <OwinSocket, byte[], int, Exception, object>(OnReadCompleteCallback), null);
        }
コード例 #3
0
        public OwinHttpWorker(byte[] array)
        {
            _requestData = RequestDataFactory.Create();

            if (array != null && array.Length > 0)
            {
                Buffer.BlockCopy(array, 0, _requestData, 0, array.Length);
                _requestDataOffset += array.Length;
                _requestDataSize   += array.Length;
            }
        }
コード例 #4
0
 /// <summary>
 /// 执行请求的入口
 /// </summary>
 /// <param name="owinSocket"></param>
 public void Start(OwinSocket owinSocket)
 {
     if (_requestDataSize > 13)
     {
         int handleSize = CommonUtil.GetBytesRealLength(_requestData, _requestDataSize, false);
         if (handleSize > 0)
         {
             AddToProcessThread(handleSize, owinSocket);
             return;
         }
     }
     if (_requestDataSize > 4000)
     {
         owinSocket.Dispose();
         RequestDataFactory.Recover(_requestData);
         _requestData = null;
         return;
     }
     owinSocket.Read(new Action <OwinSocket, byte[], int, Exception, object>(OnReadCompleteCallback), null);
 }
コード例 #5
0
        /// <summary>
        /// 解析报文 到 owin 协议
        /// </summary>
        /// <param name="state"></param>
        private void ProcessRequestData(object state)
        {
            WorkThreadState workThreadState = (WorkThreadState)state;
            int             handleSize      = workThreadState.HandleSize;
            int             offset          = 0;

            //截取 http方法 请求路径 http版本
            byte[] protocol = CommonUtil.GetProtocolBytes(_requestData, 0, handleSize, ref offset);
            if (protocol == null || offset == 0 || CommonUtil.CheckBadRequest(ref protocol) == 0)
            {
                //不存在 http 请求行
                byte[] array2 = ResultFactory.FormartBR400(string.Format("Bad Request: '{0}'", (protocol == null) ? "null" : Encoding.ASCII.GetString(protocol)));
                workThreadState.OwinSocket.Write(array2, new Action <OwinSocket, int, Exception, object>(OnWriteCompleteToClose), null);
                RequestDataFactory.Recover(_requestData);
                _requestData = null;
                return;
            }
            //消息报头
            byte[] headDomainBytes = new byte[handleSize - offset];
            Buffer.BlockCopy(_requestData, offset, headDomainBytes, 0, headDomainBytes.Length);

            byte[] preLoadedBodyBytes = null;
            if (handleSize < _requestDataSize)
            {
                //如果传输
                preLoadedBodyBytes = new byte[_requestDataSize - handleSize];
                Buffer.BlockCopy(_requestData, handleSize, preLoadedBodyBytes, 0, preLoadedBodyBytes.Length);
            }

            IDictionary <string, string[]> dictionary = CommonUtil.ConvertByteToDic(headDomainBytes);

            RequestData requestData = RequestData.New();

            requestData._preLoadedBody = preLoadedBodyBytes;
            requestData.HeadDomainDic  = dictionary;

            string protocolStr = Encoding.ASCII.GetString(protocol);
            int    index       = protocolStr.IndexOf(' ');

            requestData.HttpMethod = protocolStr.Substring(0, index).ToUpper();
            protocolStr            = protocolStr.Substring(index + 1);
            index = protocolStr.LastIndexOf(' ');
            requestData.RequestUrl  = protocolStr.Substring(0, index).Trim();
            requestData.HttpVersion = protocolStr.Substring(index).Trim();
            index = requestData.RequestUrl.IndexOf('?');
            if (index == 0)
            {
                requestData.RequestQueryString = requestData.RequestUrl;
                requestData.RequestUrl         = "/";
            }
            else if (index > 0)
            {
                string text2 = requestData.RequestUrl.Substring(0, index).Trim();
                string b     = requestData.RequestUrl.Substring(index + 1);
                requestData.RequestUrl         = text2;
                requestData.RequestQueryString = b;
                if (!string.IsNullOrEmpty(requestData.RequestQueryString))
                {
                    requestData.RequestQueryString = requestData.RequestQueryString.Trim();
                }
            }
            requestData.SafeRequestUrl = GetSafePath(requestData.RequestUrl);
            string host = (requestData.HeadDomainDic == null || !requestData.HeadDomainDic.ContainsKey("Host")) ? string.Empty : requestData.HeadDomainDic["Host"].FirstOrDefault <string>();

            if (string.IsNullOrEmpty(host))
            {
                host = ((requestData.HeadDomainDic == null || !requestData.HeadDomainDic.ContainsKey("host")) ? string.Empty : requestData.HeadDomainDic["host"].FirstOrDefault <string>());
            }
            if (!string.IsNullOrEmpty(host))
            {
                ParseHost(host, ref requestData.Host, ref requestData.Port);
            }
            else
            {
                requestData.Host = "localhost";
                requestData.Port = 80;
            }
            requestData.Socket = workThreadState.OwinSocket;
            RequestDataFactory.Recover(_requestData);
            _requestData       = null;
            _requestDataOffset = 0;
            _requestDataSize   = 0;

            OwinTask.ExcuteWorkTask(requestData);
        }