/// <summary> /// 退出 /// </summary> /// <param name="reqInfo">请求信息</param> /// <returns>状态</returns> public int quitWork(WorkDataInfo reqInfo) { lock (m_stopPushDatas) { m_stopPushDatas.Add(reqInfo); } return(0); }
/// <summary> /// 工作中 /// </summary> /// <param name="dataInfo">信息</param> /// <returns>状态</returns> public virtual int onWorking(WorkDataInfo dataInfo) { return(0); }
/// <summary> /// 开始工作 /// </summary> /// <param name="dataInfo">信息</param> public virtual void onWorkStart(WorkDataInfo dataInfo) { }
/// <summary> /// 工作退出 /// </summary> /// <param name="dataInfo">信息</param> public virtual void onWorkQuit(WorkDataInfo dataInfo) { }
/// <summary> /// 开始 /// </summary> /// <param name="dataInfo">消息</param> public void startWork(WorkDataInfo dataInfo) { lock (m_messages) { m_messages.Add(dataInfo); } }
/// <summary> /// 处理方法 /// </summary> /// <param name="id">线程编号</param> public void onWork(int id) { //新增消息 lock (m_messages) { int messagesSize = m_messages.Count; if (messagesSize > 0) { for (int i = 0; i < messagesSize; i++) { if (m_startEvent != null) { m_startEvent(m_messages[i]); m_dataInfos[id].Add(m_messages[i]); m_messages.RemoveAt(i); break; } } } } //执行方法 if (m_workEvent != null) { List <WorkDataInfo> dataInfos = m_dataInfos[id]; int dataInfosSize = dataInfos.Count; //检测停止推送 List <WorkDataInfo> stopPushDatas = new List <WorkDataInfo>(); int stopPushDatasSize = m_stopPushDatas.Count; if (stopPushDatasSize > 0) { lock (m_stopPushDatas) { stopPushDatasSize = m_stopPushDatas.Count; for (int i = 0; i < stopPushDatasSize; i++) { stopPushDatas.Add(m_stopPushDatas[i]); } } } for (int i = 0; i < dataInfosSize; i++) { WorkDataInfo pushDataInfo = dataInfos[i]; pushDataInfo.m_threadID = id; int state = 0; if (stopPushDatasSize > 0) { for (int j = 0; j < stopPushDatasSize; j++) { WorkDataInfo reqDataInfo = stopPushDatas[j]; if (reqDataInfo.m_id == pushDataInfo.m_id) { lock (m_stopPushDatas) { int spdSize = m_stopPushDatas.Count; for (int s = 0; s < spdSize; s++) { if (m_stopPushDatas[s].m_id == reqDataInfo.m_id) { m_stopPushDatas.RemoveAt(s); break; } } } state = -1; } } } if (state == 0) { state = m_workEvent(pushDataInfo); } if (state <= 0) { if (m_quitEvent != null) { m_quitEvent(pushDataInfo); } dataInfos.RemoveAt(i); i--; dataInfosSize--; } } } }
/// <summary> /// 工作中 /// </summary> /// <param name="dataInfo">信息</param> /// <returns>状态</returns> public override int onWorking(WorkDataInfo dataInfo) { Console.WriteLine(dataInfo.m_id.ToString()); SecurityDataInfo securityDataInfo = dataInfo as SecurityDataInfo; String url = String.Format(m_listUrl, FCStrEx.ConvertDBCodeToSinaCode(securityDataInfo.m_security.m_code)); Log = String.Format("下载:{0}", securityDataInfo.m_security.m_code); String html = DataCenter.getHttpWebRequest(url, "GB2312"); if (html != null && html.Length > 0) { NewsInfo newsInfo = new NewsInfo("sinanews"); newsInfo.m_code = securityDataInfo.m_security.m_code; String dir = newsInfo.getDirectory(); if (!FCFile.isDirectoryExist(dir)) { FCFile.createDirectory(dir); } String identifier = "<div class=\"datelist\">"; int pos = html.IndexOf(identifier); if (pos != -1) { html = html.Substring(pos + identifier.Length); html = html.Substring(0, html.IndexOf("</ul>")); html = html.Replace("<ul>\r\n\t\t\t", "").Replace(" ", " "); String[] strs = html.Split(new String[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries); int strsSize = strs.Length; for (int i = 0; i < strsSize; i++) { try { newsInfo.m_content = ""; String str = strs[i]; String[] subStrs = str.Split(new String[] { "<a target='_blank' href='" }, StringSplitOptions.RemoveEmptyEntries); if (subStrs.Length >= 2) { newsInfo.m_time = subStrs[0].Trim(); String[] sunStrs = subStrs[1].Split(new String[] { "'>" }, StringSplitOptions.RemoveEmptyEntries); newsInfo.m_url = sunStrs[0]; newsInfo.m_title = sunStrs[1].Replace("</a>", ""); String fileName = newsInfo.getFileName(); if (!FCFile.isFileExist(fileName)) { Log = String.Format("下载:{0}", securityDataInfo.m_security.m_code); String contentHtml = DataCenter.getHttpWebRequest(newsInfo.m_url, "UTF-8"); String sIdentifier = "<!-- 原始正文start -->", eIdentifier = "<!-- 原始正文end -->"; int sPos = contentHtml.IndexOf(sIdentifier); if (sPos != -1) { String content = contentHtml.Substring(sPos + sIdentifier.Length); int ePos = content.IndexOf(eIdentifier); newsInfo.m_content = content.Substring(0, ePos); FCFile.write(fileName, newsInfo.ToString()); } } } } catch (Exception ex) { } } } } return(1); }
/// <summary> /// 开始工作 /// </summary> /// <param name="dataInfo">信息</param> public override void onWorkStart(WorkDataInfo dataInfo) { }
/// <summary> /// 工作退出 /// </summary> /// <param name="dataInfo">信息</param> public override void onWorkQuit(WorkDataInfo dataInfo) { }