Exemple #1
0
        /// <summary>
        /// 全屏点赞
        /// </summary>
        public void Praise()
        {
            QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Init);

            if (RunStatus != RunStatus.Sucess && CodeStatus != CodeStatus.NotNeedCode)
            {
                Check();
            }
            else
            {
                try
                {
                    _miniBrowser.DownloadString(IndexPage, Praise);
                }
                catch (Exception ex)
                {
                    RunStatus = RunStatus.Fail;
                    QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail);

                    CodeStatus = CodeStatus.NeedCode;
                    QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);

                    Log4Logger.Error(UserName + " Login失败!\r\n" + ex.Message, ex);
                    MailLogger.LogError(UserName + " Login失败!\r\n" + ex.Message, ex);
                    QqMsgLogger.LogError(UserName + " Login失败!", ex);
                }
            }
        }
Exemple #2
0
        public string ExecutionResult(string code, int exId, string userId, CodeStatus codeStatus)
        {
            var codeId = unitOfWork.CodeRepo.Get(c => c.ExerciseId == exId && c.UserId == userId).First().Id;
            var res    = sandboxManager.Execute(code);

            if (res.Success)
            {
                string result =
                    $"Result: {res.Result};\r\nCompile time: {res.CompileTime.TotalMilliseconds};\r\nExecution Time: {res.ExecutionTime.TotalMilliseconds};";
                if (codeStatus != CodeStatus.Done)
                {
                    AddHistory(codeId, code, DateTime.Now, null, result);
                }
                return(result);
            }

            string errors = res.CompileTimeExceptions.Aggregate("", (current, v) => current + (v + ";\r\n"));

            errors = res.RunTimeExceptions.Aggregate(errors, (current, v) => current + (v + ";\r\n"));
            if (codeStatus != CodeStatus.Done)
            {
                AddHistory(codeId, code, DateTime.Now, errors, null);
            }
            return(errors);
        }
Exemple #3
0
        public string ExecutionResult(string code, int exId, string userId, CodeStatus codeStatus)
        {
            var codeId        = unitOfWork.CodeRepo.Get(c => c.ExerciseId == exId && c.UserId == userId).First().Id;
            var testCasesCode = unitOfWork.ExerciseRepo.GetById(exId).TestCasesCode;
            var finalCode     = string.Concat(testCasesCode, code);
            var res           = sandboxManager.Execute(finalCode);

            if (res.Success)
            {
                string result = res.Result;
                if (codeStatus == CodeStatus.InProgress)
                {
                    AddHistory(codeId, code, DateTime.Now, null, result);
                }
                return(result);
            }

            string errors = res.Result;

            if (codeStatus == CodeStatus.InProgress)
            {
                AddHistory(codeId, code, DateTime.Now, errors, null);
            }
            return(errors);
        }
Exemple #4
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="scrapingBrowser"></param>
        /// <param name="htmlStr"></param>
        private void Login(ScrapingBrowser scrapingBrowser, string htmlStr)
        {
            if (htmlStr.Contains("登录成功"))
            {
                Log4Logger.Info(UserName + "登录成功!\r\n" + htmlStr);
                RunStatus = RunStatus.Sucess;
                QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Sucess);

                CodeStatus = CodeStatus.NotNeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode);
                scrapingBrowser.DownloadString(IndexPage, Praise);
            }
            else
            {
                RunStatus = RunStatus.Fail;
                QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail);

                CodeStatus = CodeStatus.NeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);

                Log4Logger.Error(UserName + " Login失败!\r\n" + htmlStr);
                //MailLogger.LogError(UserName + " Login失败!\r\n" + htmlStr);
                QqMsgLogger.LogError(UserName + " Login失败!" + htmlStr);
            }
        }
Exemple #5
0
        public static BE.Status GenerateStatus(CodeStatus errorStatus)
        {
            BE.Status status = new BE.Status()
            {
                Code = errorStatus.ToString()
            };

            switch (errorStatus)
            {
            case CodeStatus.Successful: status.Message = "OK";
                break;

            case CodeStatus.InvalidParameter: status.Message = "There was a problem with parameter passed";
                break;

            case CodeStatus.Timeout: status.Message = "No response from server, try again later";
                break;

            case CodeStatus.Unknown: status.Message = "What the hell just happened? Check log plz";
                break;

            default: status.Message = "?";
                break;
            }

            return(status);
        }
        public void UpdateStatus(string key, CodeStatus status)
        {
            var code = _codeMapRepository.Find(key);

            code.Status    = status;
            code.UpdatedOn = DateTime.Now;
            if (status == CodeStatus.InActive)
            {
                code.RemovedOn = DateTime.Now;
            }
            _codeMapRepository.Update(code);
        }
        public CodeStatus GetCodeStatus(CodeRequest cr)
        {
            if (cr.Code.Equals("12345"))
            {
                CodeStatus cs = new CodeStatus {
                    status = "winner",
                    prize  = "nothing"
                };
                return(cs);
            }
            CodeStatus losingCs = new CodeStatus {
                status = "loser"
            };

            return(losingCs);
        }
Exemple #8
0
 public Code(string text, CodeStatus status)
 {
     Text   = text;
     Status = status;
 }
Exemple #9
0
        /// <summary>
        /// 点赞
        /// </summary>
        /// <param name="scrapingBrowser"></param>
        /// <param name="htmlStr"></param>
        private void Praise(ScrapingBrowser scrapingBrowser, string htmlStr)
        {
            var cookie = scrapingBrowser.GetCookie(new Uri(IndexPage), "skey");

            if (cookie == null)
            {
                RunStatus = RunStatus.Fail;
                QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail);

                CodeStatus = CodeStatus.NeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);

                Log4Logger.Error(UserName + ":skey为空了");
                QqMsgLogger.LogError(UserName + ":skey为空了");
                return;
            }
            var gtk = Gtk.GetGtk(cookie.Value);

            PraiseUrl = string.Format(PraiseUrl, gtk);

            var document = new HtmlDocument();

            document.LoadHtml(htmlStr);

            var list = document.DocumentNode.CssSelect("li.f-single");

            if (!list.Any())
            {
                QqMsgLogger.LogInfo(UserName + " :li.f-single 找不到点赞的模块");
                Log4Logger.Info(UserName + " :li.f-single 找不到点赞的模块.\r\n" + htmlStr);
                if (document.DocumentNode.CssSelect("i.ico_login").Any())
                {
                    RunStatus = RunStatus.Fail;
                    QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail);

                    CodeStatus = CodeStatus.NeedCode;
                    QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);
                }
                return;
            }
            else
            {
                var isContinue = htmlStr.Contains("g_ic_fpfeedsType='friend',");
                if (!isContinue)
                {
                    //其它角色对用户进行点赞评论后会跳转到与我相关页面,这时候再请求一次
                    //QqMsgLogger.LogInfo(UserName + " 有人关注,需要重新定位到主页.");
                    //_miniBrowser.DownloadString(IndexPage, Praise);
                    return;
                }
            }
            foreach (var htmlNode in list)
            {
                if (htmlNode == null || string.IsNullOrWhiteSpace(htmlNode.InnerHtml))
                {
                    continue;
                }
                try
                {
                    var nameNode   = htmlNode.CssSelect("a.f-name");
                    var praiseNode = htmlNode.CssSelect("a.qz_like_btn_v3").FirstOrDefault();
                    if (praiseNode != null && praiseNode.Attributes["data-clicklog"] != null &&
                        praiseNode.Attributes["data-clicklog"].Value == "like")
                    {
                        Thread.Sleep(1000);
                        Log4Logger.Info(UserName + "为《" + nameNode.First().InnerHtml + "》点赞!");
                        var unikey   = praiseNode.Attributes["data-unikey"].Value;
                        var curkey   = praiseNode.Attributes["data-curkey"].Value;
                        var postForm = new NameValueCollection();
                        postForm["qzreferrer"] = IndexPage;
                        postForm["opuin"]      = UserName;
                        postForm["unikey"]     = unikey;
                        postForm["curkey"]     = curkey;
                        postForm["from"]       = "1";
                        postForm["appid"]      = "311";
                        postForm["typeid"]     = "0";
                        postForm["abstime"]    = "1423372434";
                        postForm["fid"]        = "3611d32392f0d654e5a20900";
                        postForm["active"]     = "0";
                        postForm["fupdate"]    = "1";
                        scrapingBrowser.NavigateTo(PraiseUrl, postForm, Success, HttpVerb.Post);
                    }
                    else if (praiseNode == null)
                    {
                        QqMsgLogger.LogInfo(UserName + " :a.qz_like_btn_v3 没有找到点赞的按钮");
                        //Log4Logger.Info(UserName + " :a.qz_like_btn_v3 没有找到点赞的按钮.\r\n" + htmlStr);
                    }
                    else if (praiseNode.Attributes["data-clicklog"] == null)
                    {
                        QqMsgLogger.LogInfo(UserName + " :data-clicklog 没有找到点赞的按钮");
                        Log4Logger.Info(UserName + " :data-clicklog 没有找到点赞的按钮.\r\n" + htmlStr);
                    }
                }
                catch (Exception ex)
                {
                    Log4Logger.Error(UserName + " 点赞失败!\r\n" + htmlStr, ex);
                    QqMsgLogger.LogError(UserName + " 点赞失败!" + ex.Message, ex);
                }
            }
            RunStatus = RunStatus.Sucess;
            QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Sucess);
        }
Exemple #10
0
        /// <summary>
        ///获取验证信息
        //验证信息格式为:ptui_checkVC('0','!MIW','\x00\x00\x00\x00\x9a\x65\x0f\xd7')
        //其中分为三部分,第一个值0或1判断是否需要图片验证码
        //                第二个值是默认验证码,若不需要图片验证码,就用此验证码来提交
        //                第三部分是所使用的QQ号码的16进制形式
        /// </summary>
        /// <param name="scrapingBrowser"></param>
        /// <param name="htmlStr"></param>
        private void Check(ScrapingBrowser scrapingBrowser, string htmlStr)
        {
            cap_cd = string.Empty;

            //将验证码信息的三部分存入数组
            int checkCodePosition = htmlStr.IndexOf("(", System.StringComparison.Ordinal) + 1;
            var checkCode         = htmlStr.Substring(checkCodePosition, htmlStr.LastIndexOf(")", System.StringComparison.Ordinal) - checkCodePosition);
            var checkArray        = checkCode.Replace("'", "").Split(','); //验证码数组

            if (checkArray[0] == "0")
            {
                CodeStatus = CodeStatus.NotNeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode);
                Log4Logger.Info(UserName + " 获取验证信息成功! " + htmlStr);

                Login(checkArray[1]);
            }
            else if (checkArray[0] == "1")
            {
                cap_cd = checkArray[1];
                var ruokuaiUser    = ConfigurationManager.AppSettings["ruokuaiUser"] ?? "";
                var ruokuaiPwd     = ConfigurationManager.AppSettings["ruokuaiPwd"] ?? "";
                var ruokuaiTypeid  = ConfigurationManager.AppSettings["ruokuaiTypeid"] ?? "";
                var ruokuaiSoftid  = ConfigurationManager.AppSettings["ruokuaiSoftid"] ?? "";
                var ruokuaiSoftkey = ConfigurationManager.AppSettings["ruokuaiSoftkey"] ?? "";
                var param          = new Dictionary <object, object>
                {
                    { "username", ruokuaiUser },
                    { "password", ruokuaiPwd },
                    { "typeid", ruokuaiTypeid },
                    { "timeout", "90" },
                    { "softid", ruokuaiSoftid },
                    { "softkey", ruokuaiSoftkey }
                };
                var url = string.Format(CodeImage, AppId, UserName, cap_cd);
                var wr  = scrapingBrowser.DownloadWebResource(new Uri(url));
                try
                {
                    string httpResult = RuoKuaiHttp.Post("http://api.ruokuai.com/create.xml", param, wr.Content.ToArray());
                    var    xmlDoc     = new XmlDocument();
                    xmlDoc.LoadXml(httpResult);

                    XmlNode idNode     = xmlDoc.SelectSingleNode("Root/Id");
                    XmlNode resultNode = xmlDoc.SelectSingleNode("Root/Result");
                    //XmlNode errorNode = xmlDoc.SelectSingleNode("Root/Error");
                    if (resultNode != null && idNode != null)
                    {
                        //var topidid = idNode.InnerText;
                        var result = resultNode.InnerText;

                        CodeStatus = CodeStatus.NotNeedCode;
                        QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode);
                        Log4Logger.Info(UserName + " 获取验证信息成功! " + htmlStr);
                        QqMsgLogger.LogInfo(UserName + " 若快识别成功! ");
                        //停顿下,否则qq会认为是在攻击它
                        Thread.Sleep(2000);
                        Login(result);
                    }
                    else
                    {
                        CodeStatus = CodeStatus.NeedCode;
                        QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);
                        Log4Logger.Info(UserName + " 需要验证码,请尽快输入验证码!");
                    }
                }
                catch (Exception ex)
                {
                    Log4Logger.Error(ex.Message, ex);

                    CodeStatus = CodeStatus.NeedCode;
                    QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);

                    Log4Logger.Info(UserName + " 需要验证码,请尽快输入验证码!");
                    QqMsgLogger.LogInfo(UserName + " 若快识别失败! " + ex.Message, ex);
                }
            }
            else
            {
                CodeStatus = CodeStatus.NeedCode;
                QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode);
                Log4Logger.Error("Check失败!\r\n" + UserName + "\r\n" + htmlStr);
                QqMsgLogger.LogError("Check失败!" + UserName + ":" + htmlStr);
            }
        }