예제 #1
0
        private void Main_FormClosing(object sender, FormClosingEventArgs e)
        {
            foreach (DictionaryEntry de in (Hashtable)runtimeService.getAll().Clone())
            {
                RuntimeEntity runtimeEntity = runtimeService.get((String)de.Key);

                if (runtimeEntity.getWaitQueueCnt() > 0 || runtimeEntity.getStartQueueCnt() > 0)
                {
                    if (MessageBox.Show("还有任务没有完成,是否强制关闭程序?", "提醒", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
                    {
                        e.Cancel = true;
                    }
                    break;
                }
            }

            if (MailSendService.sendWaitCnt > 0 && MessageBox.Show("还有邮件正在发送,是否强制关闭程序?", "提醒", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
            {
                e.Cancel = true;
            }

            if (!e.Cancel)
            {
                ThreadPoolEx.destory();
            }
        }
예제 #2
0
        private void btn_refresh_url_Click(object sender, EventArgs e)
        {
            btn_refresh_url.Enabled = false;

            try
            {
                urlDataTable.Clear();

                Int32 allMailCnt = 0, addMailCnt = 0, completeUrlCnt = 0;

                dgv_url.Columns["状态"].Visible = "全部".Equals(cb_parse_run_status.Text);

                foreach (DictionaryEntry de in (Hashtable)runtimeService.getAll().Clone())
                {
                    DataRow row = urlDataTable.NewRow();

                    row["URL"] = de.Key;

                    RuntimeEntity runtime = (RuntimeEntity)de.Value;
                    row["等待处理个数"]   = runtime.getWaitQueueCnt();
                    row["正在处理个数"]   = runtime.getStartQueueCnt();
                    row["处理成功个数"]   = runtime.getSuccessQueueCnt();
                    row["请求网页超时数"]  = runtime.getErrorQueueCnt();
                    row["抓取非重复邮箱数"] = runtime.AddMailCnt;
                    row["状态"]       = runtime.RunStatus;

                    if ("执行中".Equals(cb_parse_run_status.Text))
                    {
                        if (Constant.RunStatus.RUNING.Equals(runtime.RunStatus) || Constant.RunStatus.STOPING.Equals(runtime.RunStatus))
                        {
                            urlDataTable.Rows.Add(row);
                        }
                    }
                    else if ("执行完成".Equals(cb_parse_run_status.Text))
                    {
                        if (Constant.RunStatus.STOP.Equals(runtime.RunStatus))
                        {
                            urlDataTable.Rows.Add(row);
                        }
                    }
                    else
                    {
                        urlDataTable.Rows.Add(row);
                    }

                    allMailCnt     += runtime.AllMailCnt;
                    addMailCnt     += runtime.AddMailCnt;
                    completeUrlCnt += runtime.getSuccessQueueCnt() + runtime.getErrorQueueCnt();
                }

                lb_all_mail_cnt.Text      = "抓取邮箱数:" + Convert.ToString(allMailCnt);
                lb_add_mail_cnt.Text      = "非重复邮箱数:" + Convert.ToString(addMailCnt);
                lb_url_cnt.Text           = "请求链接数:" + Convert.ToString(urlDataTable.Rows.Count);
                lb_complete_url_cnt.Text  = "已分析链接数:" + Convert.ToString(completeUrlCnt);
                lb_parse_cnt_pre_sec.Text = "每秒分析链接数:" + Math.Ceiling(completeUrlCnt / stopwatch.Elapsed.TotalSeconds);
            }
            catch { }

            btn_refresh_url.Enabled = true;
        }
예제 #3
0
        public ParseEntity get(String url)
        {
            RuntimeEntity runtime = runtimeService.get(url);

            ParseEntity result = null;

            if (runtime != null)
            {
                if (runtime.WaitQueue[url] != null)
                {
                    result = (ParseEntity)runtime.WaitQueue[url];
                }
                else if (runtime.StartQueue[url] != null)
                {
                    result = (ParseEntity)runtime.StartQueue[url];
                }
                else if (runtime.SuccessQueue[url] != null)
                {
                    result = (ParseEntity)runtime.SuccessQueue[url];
                }
                else if (runtime.ErrorQueue[url] != null)
                {
                    result = (ParseEntity)runtime.ErrorQueue[url];
                }
            }

            return(result);
        }
예제 #4
0
        /**
         * 守护进程
         */
        private void daemon_timer_Tick(object sender, EventArgs e)
        {
            try
            {
                tssl_mail_send_status.Text = "待发邮件:" + MailSendService.sendWaitCnt + "; 已发邮件:" + MailSendService.sendSuccessCnt + "; 无法发送数:" + MailSendService.sendErrorCnt;

                //如果队列已经结束,则重跑邮箱解析为0的站点
                if (ckb_reparse.Checked && ThreadPoolEx.IsIdle() && runtimeService.getAll().Count > 0)
                {
                    foreach (DictionaryEntry de in (Hashtable)runtimeService.getAll().Clone())
                    {
                        RuntimeEntity runtime = (RuntimeEntity)de.Value;

                        if (runtime.AllMailCnt == 0 && runtime.reparse())
                        {
                            parseService.add((String)de.Key, tb_type.Text.Trim());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message, ex);
            }
        }
예제 #5
0
        private void testRotate()
        {
            RuntimeEntity testEntity       = new RuntimeEntity();
            RuntimeEntity secondTestEntity = new RuntimeEntity();

            string testText = "90";

            long start  = 0;
            long length = (long)testText.Length;

            testEntity.Entity   = "Number";
            testEntity.Location = new List <long?>();
            testEntity.Location.Add(start);
            testEntity.Location.Add(length);

            secondTestEntity.Entity = "Direction";
            secondTestEntity.Value  = "left";

            incomingEntities = new List <RuntimeEntity>();

            incomingEntities.Add(testEntity);
            incomingEntities.Add(secondTestEntity);

            settings.voiceCommands.TiltShrineRotate(incomingEntities, testText, camera);
        }
예제 #6
0
        public void changeStatus(String url, Constant.ParseStatus status)
        {
            RuntimeEntity runtime = runtimeService.get(url);

            if (!Constant.RunStatus.STOP.Equals(runtime.RunStatus))
            {
                if (status.Equals(Constant.ParseStatus.START))
                {
                    Object parse = runtime.WaitQueue[url];
                    runtime.StartQueue.Add(url, parse);
                    runtime.WaitQueue.Remove(url);
                }
                else if (status.Equals(Constant.ParseStatus.SUCCESS))
                {
                    Object parse = runtime.StartQueue[url];
                    runtime.SuccessQueue.Add(url, parse);
                    runtime.StartQueue.Remove(url);
                }
                else if (status.Equals(Constant.ParseStatus.EXCEPTION))
                {
                    Object parse = runtime.StartQueue[url];
                    runtime.ErrorQueue.Add(url, parse);
                    runtime.StartQueue.Remove(url);
                }

                //等待队列与执行队列为空的话,整个站点停止解析
                if (runtime.WaitQueue.Count == 0 && runtime.StartQueue.Count == 0)
                {
                    runtime.stop(true);
                }
            }
        }
예제 #7
0
        private void TestVoiceCommand()
        {
            // RuntimeEntity testEntity = new RuntimeEntity();
            RuntimeEntity secondTestEntity = new RuntimeEntity();

            string testText = "Go to waypoint 1";

            /* For testing number entities
             * long start = 0;
             * long length = 2;
             *
             * string testText = "10";
             *
             * testEntity.Entity = "Number";
             * testEntity.Location = new List<long?>();
             * testEntity.Location.Add(start);
             * testEntity.Location.Add(length);
             */

            secondTestEntity.Entity = "Waypoint";
            secondTestEntity.Value  = "ring toss";

            incomingEntities = new List <RuntimeEntity>();

            //incomingEntities.Add(testEntity);
            incomingEntities.Add(secondTestEntity);

            settings.voiceCommands.Move(incomingEntities, testText);
        }
예제 #8
0
        public RuntimeEntity add(String url)
        {
            url = CommonUtils.getBaseURL(url);

            RuntimeEntity runtime = new RuntimeEntity(url);

            runtimeMap.Add(url, runtime);

            return(runtime);
        }
예제 #9
0
        public static RuntimeEntity CreateRuntimeEntity()
        {
            RuntimeEntity entity = new RuntimeEntity();

            entity.Initialize(new ContentEntitySerializationFormat()
            {
                Data       = new List <ContentEntity.DataInstance>(),
                PrettyName = "",
                UniqueId   = _idGenerator.Next()
            }, new EventNotifier());
            return(entity);
        }
예제 #10
0
        private void tsmi_reparse_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow dr in dgv_url.SelectedRows)
            {
                String url = (String)dr.Cells[0].Value;

                RuntimeEntity runtime = runtimeService.get(url);

                if (runtime.reparse())
                {
                    parseService.add(url, tb_type.Text.Trim());
                }
            }
        }
예제 #11
0
        public void RemovedDataIsNotReturnedInSelectData()
        {
            RuntimeEntity entity = EntityTestHelpers.CreateRuntimeEntity();

            entity.AddData <DataEmpty>();
            entity.DataStateChangeUpdate();
            Assert.Equal(1, entity.SelectData().Count);

            entity.RemoveData <DataEmpty>();
            Assert.Equal(1, entity.SelectData().Count);

            entity.DataStateChangeUpdate();
            Assert.Equal(0, entity.SelectData().Count);
        }
예제 #12
0
        public void add(String url, String type)
        {
            url = url.Replace("\r\n", "").Replace(Environment.NewLine, "").Trim();

            RuntimeEntity runtime = runtimeService.get(url);

            if (runtime == null)
            {
                runtime = runtimeService.add(url);
            }

            if (Constant.RunStatus.RUNING.Equals(runtime.RunStatus))
            {
                try
                {
                    if (get(url) == null)
                    {
                        runtime.WaitQueue.Add(url, new ParseEntity(url, type));

                        Hashtable param = new Hashtable();
                        param.Add("url", url);
                        param.Add("type", type);

                        lock (runtime.WorkItemsGroup)
                        {
                            ThreadPoolEx.add(runtime.WorkItemsGroup, new WorkItemCallback(ParseThread.run), param, runtime.Priority);
                        }
                    }
                }
                catch { }

                //等待解析数超过系统设定,则优先级降低
                if (!WorkItemPriority.Lowest.Equals(runtime.Priority) && (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count) > Convert.ToInt32(ConfigService.get("parse.lowParseCnt")))
                {
                    runtime.Priority = WorkItemPriority.Lowest;
                }

                //已解析数超过系统设定,则停止
                if (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count + runtime.ErrorQueue.Count >= Convert.ToInt32(ConfigService.get("parse.rule.maxParseCnt")))
                {
                    runtime.RunStatus = Constant.RunStatus.STOPING;
                }
            }
        }
예제 #13
0
        private void testTilt()
        {
            RuntimeEntity testEntity       = new RuntimeEntity();
            RuntimeEntity secondTestEntity = new RuntimeEntity();

            string testText = "little";

            testEntity.Entity = "Amount";
            testEntity.Value  = "large";

            secondTestEntity.Entity = "Direction";
            secondTestEntity.Value  = "left";

            incomingEntities = new List <RuntimeEntity>();

            incomingEntities.Add(testEntity);
            incomingEntities.Add(secondTestEntity);

            settings.voiceCommands.TiltShrineTilt(incomingEntities, testText, camera);
        }
예제 #14
0
        /// <summary>
        /// Returns an entity instance for the given entity UniqueId. If an instance for the given
        /// id already exists, then it is returned. Otherwise, either a RuntimeEntity or
        /// ContentEntity is created.
        /// </summary>
        /// <param name="entityId">The id of the entity to get an instance for.</param>
        /// <param name="context">The GameEngineContext, used to determine if we should create a
        /// ContentTemplate or RuntimeTemplate instance.</param>
        public IEntity GetEntityInstance(int entityId, GameEngineContext context)
        {
            if (CreatedEntities.ContainsKey(entityId))
            {
                return(CreatedEntities[entityId]);
            }

            IEntity entity;

            if (context.GameEngine.IsEmpty)
            {
                entity = new ContentEntity();
            }
            else
            {
                entity = new RuntimeEntity();
            }

            CreatedEntities[entityId] = entity;
            return(entity);
        }
예제 #15
0
        private MessageResponse StopIrrigation(dynamic questionContext, MessageRequest messageRequest, RuntimeEntity id)
        {
            MessageResponse result;
            var             approver = this.GetApprover(id.Value);

            messageRequest.Entities = new List <RuntimeEntity>();
            var requestId = SetEntity("sys-number", id.Value);
            var approvers = SetEntity("aprovadores", approver);

            messageRequest.Entities.Add(requestId);
            messageRequest.Entities.Add(approvers);
            messageRequest.Context = questionContext;
            result = conversation.Message(workspaceId, messageRequest);
            return(result);
        }
예제 #16
0
        private MessageResponse StartIrrigation(dynamic questionContext, MessageRequest messageRequest, RuntimeEntity id)
        {
            MeasurementService measurementService = new MeasurementService();
            var last = measurementService.GetLastByNode(13);

            measurementService.Save(new Measurement()
            {
                IdNode       = last.IdNode,
                AirHumidity  = 0,
                SiolHumidity = 1,
                Temperature  = 0,
            });
            MessageResponse result;
            var             status = this.GetStatusResqust(id.Value);

            messageRequest.Entities = new List <RuntimeEntity>();
            //Update no banco
            messageRequest.Context = questionContext;
            result = conversation.Message(workspaceId, messageRequest);
            return(result);
        }