Exemple #1
0
        private void btn_submit_Click(object sender, EventArgs e)
        {
            ConsultRequest consultRequest = new ConsultRequest();

            consultRequest.ConvertFromSuggests(list);
            string         reslut   = RemoteWorker.postCommit(consultRequest);
            CommonResponse response = TranslationWorker.ConvertStringToEntity <CommonResponse>(reslut);

            if (response != null)
            {
                if (response.status != null)
                {
                    if (response.status.ToString() == "200")
                    {
                        if (MessageBox.Show("提交征询意见成功") == DialogResult.OK)
                        {
                            this.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("提交征询意见失败。原因:" + response.errmsg);
                    }
                }
                else
                {
                    MessageBox.Show("提交征询意见失败。原因:" + response.errmsg);
                }
            }
        }
Exemple #2
0
 private void btn_login_Click(object sender, EventArgs e)
 {
     if (cbb_user.Text.Trim() == string.Empty || txt_password.Text.Trim() == string.Empty)
     {
         MessageBox.Show("用户名密码不能为空");
         return;
     }
     if (getToken(cbb_user.Text.Trim(), txt_password.Text.Trim()) == false)
     {
         return;
     }
     if (login(cbb_user.Text.Trim(), txt_password.Text.Trim()))
     {
         Global.user.Name     = cbb_user.Text.Trim();
         Global.user.Password = txt_password.Text.Trim();
         if (Global.online)//如果登陆成功且联网状态,获取用户信息、检查用户是否首次登陆(首次登陆要预下载法规)、远程法规列表、设置列表
         {
             RemoteWorker.getUserInfo();
             RemoteWorker.getSetResponse();
             RemoteWorker.getLawResponse();
             checkUserPreload();
         }
         if (cb_remindPwd.Checked)
         {
             string userId   = cbb_user.Text.Trim();
             string password = txt_password.Text.Trim();
             ConfigWorker.SetConfigValue(userId, password);
         }
         db.saveUser(Global.user);
         LibraryList listForm = new LibraryList();
         listForm.Show();
         this.Hide();
     }
 }
Exemple #3
0
        public void RemoteWorker_Validate_With_MultipleTask()
        {
            var identifier = Guid.NewGuid().ToString();

            using (new ExclusiveBlock(identifier))
            {
                using (var localProcess = new LocalProcessHost(new TcpListenerPortProvider(), identifier))
                {
                    using (IWorker runnerHost = new RemoteWorker(localProcess))
                    {
                        string[] domains = { "https://google.fr/", "https://google.ca/", "https://google.com/" };

                        for (int index = 0; index < domains.Length; index++)
                        {
                            var domain = domains[index];

                            var remoteTask = new RemoteTask()
                            {
                                BrowserSize = new Size(1366, 768),
                                Url         = domain,
                                Timeout     = TimeSpan.FromSeconds(30)
                            };

                            remoteTask.SetTrigger(new WindowLoadTrigger(TimeSpan.FromSeconds(0)));
                            remoteTask.SetCaptureZone(new VisibleScreen());

                            var taskResult = runnerHost.PerformTask(remoteTask);

                            Assert.IsNotNull(taskResult.PayLoad);
                        }
                    }
                }
            }
        }
Exemple #4
0
        public void RemoteWorker_Validate_With_SimpleHttps()
        {
            var identifier = Guid.NewGuid().ToString();

            using (new ExclusiveBlock(identifier))
            {
                using (var localProcess = new LocalProcessHost(new TcpListenerPortProvider(), identifier))
                {
                    using (IWorker runnerHost = new RemoteWorker(localProcess))
                    {
                        var remoteTask = new RemoteTask()
                        {
                            BrowserSize = new Size(1366, 768),
                            Url         = "https://msdn.microsoft.com/fr-fr",
                            Timeout     = TimeSpan.FromSeconds(30)
                        };

                        remoteTask.SetTrigger(new WindowLoadTrigger(TimeSpan.FromSeconds(0)));
                        remoteTask.SetCaptureZone(new VisibleScreen());

                        var taskResult = runnerHost.PerformTask(remoteTask);

                        Assert.IsNotNull(taskResult.PayLoad);
                    }
                }
            }
        }
Exemple #5
0
        private void checkUserPreload()
        {
            User user = db.getUserById(Global.user.Id);

            if (user != null)
            {
                if (user.Preload != "1")
                {
                    List <string> lawIds = RemoteWorker.getPreloadLaw();//获取预下载的法规id列表
                    lawIds = new List <string>()
                    {
                    };                              //todo 预下载接口还未完成,可用后删除此行代码
                    foreach (string lawId in lawIds)
                    {
                        List <Node> nodes = RemoteWorker.getBookContent(lawId);//依次下载法规及内容,下载完成后,更新法规的下载状态
                        if (RemoteWorker.getNodeDetail(nodes.Select(n => n.Id).ToList(), downloadImage:true))
                        {
                            Law law = db.getLawById(lawId);
                            law.isLocal           = "1";
                            law.downloadPercent   = 100;
                            law.downloadDate      = DateTime.Now.ToString("yyyy-MM-dd");
                            law.downloadNodeCount = nodes.Count;
                            db.saveLaw(law);
                        }
                    }
                    Global.user.Preload = "1";
                }
            }
        }
        private void downloadWork()
        {
            List <Node> nodes      = RemoteWorker.getBookContent(law.lawId);
            int         startIndex = law.downloadNodeCount.HasValue ? (int)law.downloadNodeCount + 1 : 1;

            for (int i = startIndex; i <= nodes.Count; i++)
            {
                if (bgw.CancellationPending)
                {
                    //暂停时记录已下载的章节数量,用于下次登录程序后继续下载;记录下载进度,用于下次登录后显示进度
                    law.downloadNodeCount = i - 1;
                    law.downloadPercent   = (int)(Math.Round(((float)law.downloadNodeCount / (float)nodes.Count), 2) * 100);
                    db.saveLaw(law);
                    return;
                }
                else
                {
                    bgw.ReportProgress(i);
                    downLoadValue = (int)(Math.Round(((float)i / (float)nodes.Count), 2) * 100);
                    RemoteWorker.getNodeDetail(nodes[i - 1].Id);
                }
            }
            bgw.ReportProgress(100);
            //下载完成后,改变law的islocal状态为1,并将下载进度设置为100
            law.downloadPercent   = 100;
            law.downloadNodeCount = nodes.Count;
            law.isLocal           = "1";
            db.saveLaw(law);
            //下载完成后,法规列表、阅读历史列表显示为“从本地库移除”
            ((LibraryList)parentForm).setLawStateText(typeof(LawListItem), law, "移除");
            ((LibraryList)parentForm).setLawStateText(typeof(ViewHistoryListItem), law, "移除");
        }
        private void btn_submit_Click(object sender, EventArgs e)
        {
            Comment newComment = new Comment();

            newComment.lawId           = lawId;
            newComment.nodeId          = nodeId;
            newComment.comment_content = rtb_content.Text.Trim();
            newComment.comment_date    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            newComment.userId          = Global.user.Id;

            OpinionCommitRequest opinionRequest = new OpinionCommitRequest();

            opinionRequest.ConvertFromComment(newComment);
            //RemoteWorker
            CommonResponse response = TranslationWorker.ConvertStringToEntity <CommonResponse>(RemoteWorker.postOpinion(opinionRequest));

            if (response != null)
            {
                if (response.status.ToString() == "200")
                {
                    //如果提交成功,在法规正文界面刷新评论
                    RemoteWorker.getOpinionList(lawView.law.lawId);
                    if (Global.online)// && string.IsNullOrEmpty(law.isLocal))
                    {
                        ((LawView)lawView).loadComment(reload: true);
                    }
                    if (MessageBox.Show("提交评论成功") == DialogResult.OK)
                    {
                        this.Close();
                    }
                }
            }
        }
Exemple #8
0
 public bool login(string username, string password)
 {
     if (Global.online)
     {
         return(RemoteWorker.getloginResponse(username, password));
     }
     else
     {
         return(db.login(username, password));
     }
 }
Exemple #9
0
 public bool getToken(string username, string password)
 {
     if (Global.online)
     {
         return(RemoteWorker.getTokenResponse(username, password));
     }
     else
     {
         return(true);
     }
 }
Exemple #10
0
 private void LawView_Load(object sender, EventArgs e)
 {
     //mh = new Utity.MouseHook();
     //mh.SetHook();
     //mh.MouseMoveEvent += Mh_MouseMoveEvent;
     //this.Text += "-"+law.title + " " + law.version;
     lbl_title.Text    = law.title + " " + law.version;
     lbl_welcome.Text += Global.user.Xm;
     if (law != null)
     {
         //如果在线,且未下载到本地,则从远程获取章节信息,并入库
         if (Global.online && "0" == law.isLocal)
         {
             List <Node> nodes = RemoteWorker.getBookContent(law.lawId);   //获取法规整体章节结构
             RemoteWorker.getNodeDetail(nodes.Select(n => n.Id).ToList()); //再获取每个章节的内容
         }
         nodes = db.getNodeByLawId(law.lawId);
         //绑定关系
         tags = NodeWorker.buildRelationFromNode(nodes);
         bindTagsToDGW();
         //绑定树结构
         string content = NodeWorker.buildFromNodeContext(NodeTree, nodes);
         //绑定法规内容
         wb.DocumentText = content;
         SetAutoWrap(true);
         if (Global.online)// && string.IsNullOrEmpty(law.isLocal))
         {
             //远程获取评论
             RemoteWorker.getOpinionList(law.lawId);
             //加载评论
             loadComment();
         }
         //加载文档信息
         lawInfo1.law        = law;
         lawInfo1.parentForm = this.parentForm;
         lawInfo1.fillLawVersion(laws);
         lawInfo1.fillLawInfo();
         lawInfo1.bindState = true;
         //写入阅读历史
         ViewHistory history = new ViewHistory()
         {
             Id       = law.lawId,
             LawID    = law.lawId,
             UserID   = Global.user.Id,
             ViewDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
         };
         if (db.saveHistory(history))
         {
             ((LibraryList)parentForm).addHistory(history);
         }
     }
 }
Exemple #11
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Global.user = new Entity.User();

            //验证网络是否可用
            RemoteWorker.checkInternet();
            //启动网络状态监测
            NetStateChecker ns = new Utity.NetStateChecker();

            Application.Run(new Login());
        }
Exemple #12
0
        public static string HttpGet(string Url, string postDataStr)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
                request.Timeout          = 1000 * 30;
                request.ReadWriteTimeout = 1000 * 30;
                request.Method           = "GET";
                request.ContentType      = "text/html;charset=UTF-8";
                //request.Headers.Add("X-Appid", Global.Appid);
                //request.Headers.Add("X-CurTime", UTC.ConvertDateTimeInt(DateTime.Now).ToString());
                //request.Headers.Add("X-CheckSum", GetMD5String(Global.Appkey + UTC.ConvertDateTimeInt(DateTime.Now).ToString()));
                if (Global.token != null)
                {
                    if ((DateTime.Now - Global.token.tokenTime).Minutes > 120)
                    {
                        if (RemoteWorker.getTokenResponse(Global.user.Name, Global.user.Password))
                        {
                        }
                        else
                        {
                            MessageBox.Show("Token已超时,重新获取Token失败,系统切换至离线状态");
                            Global.online = false;
                            return("error");
                        }
                    }
                    request.Headers.Add("API_TOKEN", Global.token.access_token);
                }

                HttpWebResponse response         = (HttpWebResponse)request.GetResponse();
                Stream          myResponseStream = response.GetResponseStream();
                StreamReader    myStreamReader   = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string          retString        = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();

                return(retString);
            }
            catch (WebException we)
            {
                MessageBox.Show("获取数据超时:" + we.Message);
                Global.online = false;
                return("error");
            }
            catch (Exception ex)
            {
                MessageBox.Show("获取数据失败:" + ex.Message);
                Global.online = false;
                return("error");
            }
        }
Exemple #13
0
        public Core.GeoRoute GetGeoRoute(Core.RoutePackage task)
        {
            RemoteWorker worker = new RemoteWorker();

            ORS.MatrixResponse matrixResponse = ORS.ORS.GetMatrix(task).Result;
            task.matrix = new Core.AdjacencyMatrix(matrixResponse.ToFloat());
            Core.Route route = worker.GetRouteSubgraph(task);

            ORS.DirectionResponse directionResponse = ORS.ORS.GetGeometry(route).Result;

            Core.GeoRoute geoRoute = new Core.GeoRoute(route, directionResponse.features[0].geometry.ToFloat());

            return(geoRoute);
        }
Exemple #14
0
        private void btn_refresh_Click(object sender, EventArgs e)
        {
            if (Global.online == false)
            {
                MessageBox.Show("离线状态无法手动更新");
                return;
            }
            int autoUpdateCount = RemoteWorker.getLawResponse();

            if (autoUpdateCount > 0)//如果手动刷新更新的法规数量大于0,则重新加载法规列表,将新版本添加到版本下拉中
            {
                ((LibraryList)parentForm).loadLocalLawList();
            }
            ((LibraryList)parentForm).loadUpdateHistoryList();
        }
Exemple #15
0
        public static string PostJson(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);

            request.Method      = "POST";
            request.ContentType = "text/html;charset=utf-8";
            //request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
            //request.Headers.Add("X-Appid", Global.Appid);
            //request.Headers.Add("X-CurTime", UTC.ConvertDateTimeInt(DateTime.Now).ToString());
            //request.Headers.Add("X-CheckSum", GetMD5String(Global.Appkey+ UTC.ConvertDateTimeInt(DateTime.Now).ToString()));

            if (Global.token != null)
            {
                if ((DateTime.Now - Global.token.tokenTime).Minutes > 120)
                {
                    if (RemoteWorker.getTokenResponse(Global.user.Name, Global.user.Password))
                    {
                    }
                    else
                    {
                        MessageBox.Show("Token已超时,重新获取Token失败,系统切换至离线状态");
                        Global.online = false;
                        return("error");
                    }
                }
                request.Headers.Add("API_TOKEN", Global.token.access_token);
            }

            Stream       myRequestStream = request.GetRequestStream();
            StreamWriter myStreamWriter  = new StreamWriter(myRequestStream, Encoding.GetEncoding("utf-8"));

            myStreamWriter.Write(postDataStr);
            myStreamWriter.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            Stream       myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader   = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string       retString        = myStreamReader.ReadToEnd();

            myStreamReader.Close();
            myResponseStream.Close();

            return(retString);
        }
        private static void checkNetState(object state)
        {
            bool oldState = Global.online;

            RemoteWorker.checkInternet();
            bool newState = Global.online;

            if (oldState != newState)
            {
                if (newState)
                {
                    MessageBox.Show("检测到网络已连接,切换至联网状态", "网络状态发生变化");
                }
                else
                {
                    MessageBox.Show("检测到网络已断开,切换至离线状态", "网络状态发生变化");
                }
            }
        }
Exemple #17
0
        //[TestMethod]
        public void TestRenderOnFreezerJsEventWithSingleWebPageHard()
        {
            var rootDirectoryPath = FreezerTestPathSolver.GetDirectory("WebPages");

            var hostname = "127.0.0.1";
            int port     = 25345; // This port is hardcoded. Can be changed if busy

            using (new ExclusiveBlock("TestRenderOnFreezerJsEventWithSingleWebPageHard"))
            {
                RunnerCore.SetupHostAsync(hostname, port, null, "TestRenderOnFreezerJsEventWithSingleWebPageHard");

                using (var httpListener = new StaticHttpServer(rootDirectoryPath))
                {
                    var url = $"{_httpServer.BoundURL}/Global/verylongpage.html";
                    //var url = "http://dragonball.wikia.com/wiki/Frieza";

                    var hostableLocalProcess = new CaptureHostMock()
                    {
                        Hostname = hostname,
                        Port     = port
                    };

                    var trigger = new WindowLoadTrigger(); // new FreezerJsEventTrigger();
                    var zone    = CaptureZone.FullPage;

                    using (IWorker runnerHost = new RemoteWorker(hostableLocalProcess))
                    {
                        var remoteTask = new RemoteTask()
                        {
                            BrowserSize = new Size(800, 600),
                            Url         = url,
                        };

                        remoteTask.SetTrigger(trigger);
                        remoteTask.SetCaptureZone(zone);

                        var taskResult = runnerHost.PerformTask(remoteTask);

                        File.WriteAllBytes($@"BmpResults/out-{nameof(TestRenderOnFreezerJsEventWithSingleWebPageHard)}.png", taskResult.PayLoad);
                    }
                }
            }
        }
Exemple #18
0
 private void btn_search_Click(object sender, EventArgs e)
 {
     if (txt_keyword.Text.Trim() != string.Empty)
     {
         if (Global.online)
         {
             List <string> lawIdList = RemoteWorker.getSearch(txt_keyword.Text.Trim());
             ((LibraryList)parentForm).LoadSearchResultLaw(lawIdList);
         }
         else
         {
             List <string> lawIdList = db.offLineSearch(queryParam, txt_keyword.Text.Trim());
             ((LibraryList)parentForm).LoadSearchResultLaw(lawIdList);
         }
     }
     else
     {
         ((LibraryList)parentForm).loadLocalLawList();//如果搜索内容为空,则显示全部法规
     }
 }
        public void RemoteWorkerIsAbleToPerformNonBlockingMap()
        {
            var uri = new Uri("file:///ala.txt");
            var mapFunc = new Uri("file:///makota.cs");
            var mapLock = new object();
            var uriProviderMock = GetSimpleUriProvider();
            var storageMock = new Mock<IStorage>(MockBehavior.Strict);
            storageMock.Setup(s => s.GetFileName(It.IsAny<Uri>())).Returns(string.Empty);
            storageMock.Setup(s => s.Read(It.IsAny<Uri>())).Returns(string.Empty);
            var remoteWorkerServiceMock = new Mock<IRemoteWorkerService>(MockBehavior.Strict);
            remoteWorkerServiceMock.Setup(s => s.Init(It.IsAny<int>()));
            remoteWorkerServiceMock.Setup(s => s.Map(It.IsAny<Uri>(), It.IsAny<Uri>())).Callback(() =>
                {
                    lock (mapLock)
                    {
                        Monitor.Wait(mapLock);
                    }
                });

            remoteWorkerServiceMock.Setup(s => s.PushFile(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<string>()))
                .Returns(new Uri("file:///a.txt"));
            MockerForRemoteWorkerService.Mock = remoteWorkerServiceMock.Object;
            RemoteWorker<MockerForRemoteWorkerService>.NonBlockingMapAndReduce = true;
            var worker = new RemoteWorker<MockerForRemoteWorkerService>()
            {
                Storage=storageMock.Object
            };
            worker.Init();

            worker.Map(uri, mapFunc);
            Thread.Sleep(10);
            lock (mapLock)
            {
                Monitor.Pulse(mapLock);
            }

            remoteWorkerServiceMock.VerifyAll();
        }
        public void RemoteWorkerWaitsForJoinInRemoteNode()
        {
            var joinLock = new object();
            var uriProviderMock = GetSimpleUriProvider();
            var remoteServiceMock = new Mock<IRemoteWorkerService>(MockBehavior.Strict);
            remoteServiceMock.Setup(s => s.Init(It.IsAny<int>()));
            remoteServiceMock.Setup(s => s.TryJoin(It.IsAny<int>(), It.IsAny<Uri>())).Returns(() =>
                {
                    lock (joinLock)
                    {
                        Monitor.Wait(joinLock);
                    }

                    return new string[] { "a" };
                });

            MockerForRemoteWorkerService.Mock = remoteServiceMock.Object;
            var worker = new RemoteWorker<MockerForRemoteWorkerService>();
            worker.Init();

            var joinThread = new Thread(() =>
            {
                worker.Join();
            });

            joinThread.Start();
            Thread.Sleep(10);

            joinThread.ThreadState.ShouldBe(ThreadState.WaitSleepJoin);
            lock (joinLock)
            {
                Monitor.Pulse(joinLock);
            }

            joinThread.Join();
            remoteServiceMock.VerifyAll();
        }
Exemple #21
0
        public void Start()
        {
            try
            {
                var localIp = "127.0.0.1";

                localEndPoint = new IPEndPoint(IPAddress.Parse(localIp), 11194);
                listener      = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(localEndPoint);
                connected = true;
            }
            catch
            {
                Console.WriteLine("NetworkService: init network service failed");
                return;
            }

            Task.Factory.StartNew(() =>
            {
                while (connected)
                {
                    if (listener != null)
                    {
                        listener.Listen(5);

                        var socket = listener.Accept();

                        //Console.WriteLine("Worker connected");

                        var worker = new RemoteWorker(socket);

                        Engine.ExecutorService.AddWorker(worker);
                    }
                }
            });
        }
Exemple #22
0
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            XiudingLiShi xdls        = new CAAC_LawLibrary.XiudingLiShi();
            string       xiudingling = string.Empty;

            //QueryParam param = new QueryParam() { lastVersion = law.lastversion};
            //var effectiveDateList = db.getLaws(param).Select(l=>l.effectiveDate);
            //for (int i = 0; i < effectiveDateList.Count(); i++)
            //{
            //    if (i == 0)
            //    {
            //        xiudingling = DateTime.Parse(effectiveDateList.ElementAt(i)).ToString("yyyy年MM月dd日") + "发布";
            //    }
            //    else
            //    {
            //        xiudingling += DateTime.Parse(effectiveDateList.ElementAt(i)).ToString("yyyy年MM月dd日") + "第" + Global.NumberToChinese(i.ToString()) + "次修订";
            //    }
            //    xiudingling += Environment.NewLine;
            //}
            xiudingling = RemoteWorker.getHistory(law.lawId);
            xdls.setRtbText(xiudingling);
            //xdls.setRtbText(law.xiudingling);
            xdls.Show(this);
        }
        public void RemoteMapWorks()
        {
            var fileName = new Uri(string.Format("file:///{0}", Base64.Encode("file1.txt")));
            var fileContent = "whatever am i i";
            var mapperCodeFileName = new Uri("file:///SampleMapper.cs");
            this.storage.Store(fileName, fileContent);
            TestHelpers.LoadToStorage(@"..\..\..\NetReduce.Core.Tests\SampleMapper.cs", mapperCodeFileName, this.storage);
            IUriProvider uriProvider = new UriProvider();
            uriProvider.Uris.Add(new Uri("http://*****:*****@"c:\temp\netreduce\0", false);
            var fileNo = workerStorage.ListFiles().Count();
            fileNo.ShouldBe(6);
        }
Exemple #24
0
        /// <summary>
        ///     Gets class entity from selected class.
        /// </summary>
        /// <exception cref="Exception">
        ///     Thrown when an exception error condition occurs.
        /// </exception>
        /// <param name="TargetProject">
        ///     Target project.
        /// </param>
        /// <param name="NameOfSourceCommand">
        ///     Name of the source command.
        /// </param>
        /// <returns>
        ///     The class entity from selected class.
        /// </returns>
        public ClassEntity GetClassEntityFromSelectedClass(Project TargetProject, string NameOfSourceCommand)
        {
            // Karl Shifflett in original vb code:
            //
            // 'TODO karl you left off here.  must ensure that the SL verions is added
            // 'Dim strSilverlightVersion As String = String.Empty
            // 'If bolIsSilverlight Then
            // '    strSilverlightVersion = Me.Application.ActiveDocument.ProjectItem.ContainingProject.Properties.Item("TargetFrameworkMoniker").Value.ToString.Replace("Silverlight,Version=v", String.Empty)
            // 'End If
            //
            // Yes, this portion of code was not implemented.

            string assemblyPath = GetAssemblyInformation(TargetProject);

            if (assemblyPath.IsNullOrEmpty())
            {
                // This should never execute since, the menu option would be disabled.
                // If it does run, there is a programming error.
                throw new Exception("The project associated with the selected file is either not vb, cs or is blacklisted.");
            }

            RemoteWorker remoteWorker = null;
            RemoteResponse <AssembliesNamespacesClasses> remoteResponse = null;

            try
            {
                var appSetup = new AppDomainSetup()
                {
                    ApplicationBase = Path.GetDirectoryName(assemblyPath),
                    DisallowApplicationBaseProbing = false,
                    ShadowCopyFiles = "True"
                };

                //++ Secondary Application Domain

                _secondaryAppDomain = AppDomain.CreateDomain("SecondaryAppDomain", null, appSetup);
                AppDomain.CurrentDomain.AssemblyResolve += SecondaryAppDomain_AssemblyResolve;

                //! This creates remoteWorker in a secondary domain, allowing it to run
                //! in a separate context from the current domain. This separates
                //! remoteWorker from the rest of the application (VS), so if the
                //! domain becomes unstable, it can be unloaded without harming the
                //! current domain.
                remoteWorker = _secondaryAppDomain.CreateInstanceFromAndUnwrap(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "XamlHelpmeet.ReflectionLoader.dll"), "XamlHelpmeet.ReflectionLoader.RemoteWorker") as RemoteWorker;

                //+ remoteWorker inherits a MarshalByRefObject. This
                //+ enables access to objects returned by its
                //+ methods across domains.

                if (remoteWorker != null)
                {
                    var isSilverlight = PtHelpers.IsProjectSilverlight(PtHelpers.GetProjectTypeGuids(TargetProject).Split(';'));

                    // remoteResponse is a helper class that is serialized so it can
                    // wrap objects returned from a secondary (i.e., remote) application
                    // domain.

                    // A problem exists in this call when an object is returned from
                    // the secondary domain that is of a different version than the
                    // same object in the current domain. When that happens an
                    // InvalidCastException is thrown, and remoteResponse will be
                    // null. I think this may occur when XHM is used on its own
                    // assemblies, if the assemblies have been recompiled since
                    // the operating vsix file was produced. In fact it is likely
                    // that the object that is causing the throw is remoteResponse
                    // itself. This might be resolved by freezing the project
                    // that RemoteResponse is in, and compile it only when necessary.
                    // It would make sense also to move the class into the
                    // ReflectionLoader namespace so it is less likely it would
                    // need to be recompiled when other changes are needed in
                    // the solution.
                    remoteResponse = remoteWorker.GetClassEntityFromUserSelectedClass(assemblyPath, isSilverlight, GetProjectReferences(TargetProject));

                    if (remoteResponse.ResponseStatus != ResponseStatus.Success)
                    {
                        UIUtilities.ShowExceptionMessage("Unable to Reflect Type", String.Format("The following exception was returned. {0}", remoteResponse.CustomMessageAndException), string.Empty, remoteResponse.Exception.ToString());
                    }
                }
                else
                {
                    UIUtilities.ShowExceptionMessage("Unable To Create Worker", "Can't create Secondary AppDomain RemoteWorker class. CreateInstance and Unwrap methods returned null.");
                }
            }
            catch (FileNotFoundException ex)
            {
                UIUtilities.ShowExceptionMessage("File Not Found", String.Format("File not found.{0}{0}Have you built your application?{0}{0}{1}", Environment.NewLine, ex.Message), String.Empty, ex.ToString());
            }
            catch (Exception ex)
            {
                UIUtilities.ShowExceptionMessage("Unable To Create Secondary AppDomain RemoteWorker", ex.Message, String.Empty, ex.ToString());
            }
            finally
            {
                AppDomain.CurrentDomain.AssemblyResolve -= SecondaryAppDomain_AssemblyResolve;

                remoteWorker = null;
                if (_secondaryAppDomain != null)
                {
                    try
                    {
                        AppDomain.Unload(_secondaryAppDomain);
                    }
                    catch (Exception ex)
                    {
                        UIUtilities.ShowExceptionMessage("AppDomain.Unload Exception", ex.Message, String.Empty, ex.ToString());
                    }
                }
                _secondaryAppDomain = null;
            }

            if (remoteResponse == null || remoteResponse.ResponseStatus != ResponseStatus.Success || remoteResponse.Result == null || remoteResponse.Result.Count == 0)
            {
                if (remoteResponse == null || remoteResponse.ResponseStatus == ResponseStatus.Success)
                {
                    UIUtilities.ShowInformationMessage("No Model", "Unable to find a class suitable for this command.");
                }
                return(null);
            }

            SelectClassFromAssembliesWindow frm = null;

            // ClassEntity classEntity = null;	// Not used in original

            frm = new SelectClassFromAssembliesWindow(remoteResponse.Result, NameOfSourceCommand);

            if (!frm.ShowDialog() ?? false)
            {
                return(null);
            }

            frm.SelectedAssemblyNamespaceClass.ClassEntity.Success = true;
            if (frm.SelectedAssemblyNamespaceClass.ClassEntity.IsSilverlight)
            {
                frm.SelectedAssemblyNamespaceClass.ClassEntity.SilverlightVersion =
                    TargetProject.Properties.Item("TargetFrameworkMoniker").Value.ToString().Replace("Silverlight,Version=v", string.Empty);
            }

            return(frm.SelectedAssemblyNamespaceClass.ClassEntity);
        }
Exemple #25
0
        /// <summary>
        ///     Gets class entities for selected project.
        /// </summary>
        /// <exception cref="Exception">
        ///     Thrown when an exception error condition occurs.
        /// </exception>
        /// <param name="TargetProject">
        ///     Target project.
        /// </param>
        /// <param name="NameOfSourceCommand">
        ///     Name of the source command.
        /// </param>
        /// <returns>
        ///     The class entities for selected project.
        /// </returns>
        public AssembliesNamespacesClasses GetClassEntitiesForSelectedProject(Project TargetProject, string NameOfSourceCommand)
        {
            string assemblyPath = GetAssemblyInformation(TargetProject);

            if (assemblyPath.IsNullOrEmpty())
            {
                throw new Exception("The project associated with the selected file is either not vb, cs or is blacklisted.");
            }

            RemoteWorker remoteWorker = null;
            RemoteResponse <AssembliesNamespacesClasses> remoteResponse = null;

            try
            {
                var appSetup = new AppDomainSetup()
                {
                    ApplicationBase = Path.GetDirectoryName(assemblyPath),
                    DisallowApplicationBaseProbing = false,
                    ShadowCopyFiles = "True"
                };

                _secondaryAppDomain = AppDomain.CreateDomain("SecondaryAppDomain", null, appSetup);
                AppDomain.CurrentDomain.AssemblyResolve += SecondaryAppDomain_AssemblyResolve;
                remoteWorker = _secondaryAppDomain.CreateInstanceFromAndUnwrap(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "XamlHelpmeet.ReflectionLoader.dll"), "XamlHelpmeet.ReflectionLoader.RemoteWorker") as RemoteWorker;

                if (remoteWorker != null)
                {
                    var isSilverlight = PtHelpers.IsProjectSilverlight(PtHelpers.GetProjectTypeGuids(TargetProject).Split(';'));
                    remoteResponse = remoteWorker.GetClassEntityFromUserSelectedClass(assemblyPath, isSilverlight, GetProjectReferences(TargetProject));

                    if (remoteResponse.ResponseStatus != ResponseStatus.Success)
                    {
                        UIUtilities.ShowExceptionMessage("Unable to Reflect Type", "The following exception was returned. " + remoteResponse.CustomMessageAndException, string.Empty, remoteResponse.Exception.ToString());
                    }
                    else if (remoteResponse.CustomMessage.IsNotNullOrEmpty())
                    {
                        UIUtilities.ShowInformationMessage("Reflection Error", string.Format("Unable to reflect the following:\r\n\r\n{0}\r\nAt least one other assembly however successfully reflected.", remoteResponse.CustomMessage));
                    }
                }
                else
                {
                    UIUtilities.ShowExceptionMessage("Unable To Create Worker", "Can't create Secondary AppDomain RemoteWorker class. CreateInstance and Unwrap methods returned null.");
                }
            }
            catch (FileNotFoundException ex)
            {
                UIUtilities.ShowExceptionMessage("File Not Found", String.Format("File not found.{0}{0}Have you built your application?{0}{0}{1}", Environment.NewLine, ex.Message), String.Empty, ex.ToString());
            }
            catch (Exception ex)
            {
                UIUtilities.ShowExceptionMessage("Unable To Create Secondary AppDomain RemoteWorker", ex.Message, String.Empty, ex.ToString());
            }
            finally
            {
                AppDomain.CurrentDomain.AssemblyResolve -= SecondaryAppDomain_AssemblyResolve;

                remoteWorker = null;
                if (_secondaryAppDomain != null)
                {
                    try
                    {
                        AppDomain.Unload(_secondaryAppDomain);
                    }
                    catch (Exception ex)
                    {
                        UIUtilities.ShowExceptionMessage("AppDomain.Unload Exception", ex.Message, String.Empty, ex.ToString());
                    }
                }
                _secondaryAppDomain = null;
            }

            if (remoteResponse != null || remoteResponse.ResponseStatus != ResponseStatus.Success)
            {
                return(null);
            }
            return(remoteResponse.Result);
        }
Exemple #26
0
        /// <summary>
        /// 指定Post地址使用Get 方式获取全部字符串
        /// </summary>
        /// <param name="url">请求后台地址</param>
        /// <param name="content">Post提交数据内容(utf-8编码的)</param>
        /// <returns></returns>
        public static string PostStr(string url, string content)
        {
            try
            {
                string         result  = "";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                //req.ContentType = "application/x-www-form-urlencoded";
                request.ContentType = "application/json";
                //req.Headers.Add("X-Appid", Global.Appid);
                //req.Headers.Add("X-CurTime", UTC.ConvertDateTimeInt(DateTime.Now).ToString());
                //req.Headers.Add("X-CheckSum", GetMD5String(Global.Appkey + UTC.ConvertDateTimeInt(DateTime.Now).ToString()));

                if (Global.token != null)
                {
                    if ((DateTime.Now - Global.token.tokenTime).Minutes > 120)
                    {
                        if (RemoteWorker.getTokenResponse(Global.user.Name, Global.user.Password))
                        {
                        }
                        else
                        {
                            MessageBox.Show("Token已超时,重新获取Token失败,系统切换至离线状态");
                            Global.online = false;
                            return("error");
                        }
                    }
                    request.Headers.Add("API_TOKEN", Global.token.access_token);
                }

                #region 添加Post 参数
                byte[] data = Encoding.UTF8.GetBytes(content);
                request.ContentLength = data.Length;
                using (Stream reqStream = request.GetRequestStream())
                {
                    reqStream.Write(data, 0, data.Length);
                    reqStream.Close();
                }
                #endregion

                HttpWebResponse resp   = (HttpWebResponse)request.GetResponse();
                Stream          stream = resp.GetResponseStream();
                //获取响应内容
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                }
                return(result);
            }
            catch (WebException we)
            {
                MessageBox.Show("提交数据超时" + we.Message);
                Global.online = false;
                return("error");
            }
            catch (Exception ex)
            {
                MessageBox.Show("提交数据失败" + ex.Message);
                Global.online = false;
                return("error");
            }
        }
Exemple #27
0
 /// <summary>
 /// 刷新法规
 /// </summary>
 /// <param name="laws"></param>
 /// <returns></returns>
 public bool refreshLaw(List <Law> laws, out int autoUpdateCount)
 {
     using (SqliteContext context = new SqliteContext())
     {
         try
         {
             int updateLawCount = 0;
             foreach (Law law in laws.OrderBy(l => l.lawId))
             {
                 var currentLaw = context.Law.FirstOrDefault(l => l.lawId == law.lawId && l.userId == Global.user.Id);
                 if (currentLaw == null)//如果没有就新增
                 {
                     law.userId = Global.user.Id;
                     //如果是更新版本的法规(且法规旧版本已下载至本地),将更新信息保存至自动更新历史记录表,同时自动下载新版本法规内容
                     var oldDownloadedLaw = context.Law.FirstOrDefault(l => l.lastversion == law.lastversion && l.isLocal == "1" && l.userId == Global.user.Id);
                     if (oldDownloadedLaw != null)
                     {
                         List <Node> nodes = RemoteWorker.getBookContent(law.lawId);
                         RemoteWorker.getNodeDetail(nodes.Select(n => n.Id).ToList());
                         law.isLocal           = "1";
                         law.downloadPercent   = 100;
                         law.downloadNodeCount = nodes.Count;
                         law.downloadDate      = DateTime.Now.ToString("yyyy-MM-dd");
                         UpdateHistory updateHistory = new UpdateHistory();
                         updateHistory.LawId      = law.lawId;
                         updateHistory.LawTitle   = law.title;
                         updateHistory.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                         updateHistory.UserId     = Global.user.Id;
                         updateHistory.Version    = law.version;
                         updateHistory.Id         = Guid.NewGuid().ToString();
                         addUpdateHistory(updateHistory);
                         updateLawCount++;
                     }
                     else
                     {
                         //如果是更新版本的法规(且法规旧版本未下载至本地),只更新法规列表界面的版本
                         var oldUndownloadLaw = context.Law.FirstOrDefault(l => l.lastversion == law.lastversion && l.userId == Global.user.Id);
                         if (oldUndownloadLaw != null)
                         {
                             updateLawCount++;
                         }
                     }
                     context.Law.Add(law);
                 }
                 else//如果有就更新基本信息,但不更新是否下载到本地、下载时间、下载进度、用户id等本地信息。
                 {
                     currentLaw.name          = law.name;
                     currentLaw.buhao         = law.buhao;
                     currentLaw.digest        = law.digest;
                     currentLaw.effectiveDate = law.effectiveDate;
                     currentLaw.expiryDate    = law.expiryDate;
                     currentLaw.keyword       = law.keyword;
                     currentLaw.lastversion   = law.lastversion;
                     currentLaw.linghao       = law.linghao;
                     currentLaw.siju          = law.siju;
                     currentLaw.status        = law.status;
                     currentLaw.title         = law.title;
                     currentLaw.userLabel     = law.userLabel;
                     currentLaw.version       = law.version;
                     currentLaw.weijie        = law.weijie;
                     currentLaw.xiudingling   = law.xiudingling;
                     currentLaw.yewu          = law.yewu;
                     currentLaw.yilai         = law.yilai;
                     currentLaw.zefa          = law.zefa;
                 }
                 context.SaveChanges();
             }
             //context.SaveChanges();
             autoUpdateCount = updateLawCount;
             MessageBox.Show("新版法规自动更新完成,本次共更新了" + updateLawCount.ToString() + "个法规的新版本");
             return(true);
         }
         catch (Exception ex)
         {
             autoUpdateCount = -1;
             return(false);
         }
     }
 }
        public void RemoteReduceWorks()
        {
            var coordinatorStorage = new FileSystemStorage(@"c:\temp\netreduce\coordinator", true);

            var coordinatorProcess = Process.Start(new ProcessStartInfo(@"..\..\..\NetReduce.CoordinatorService.ConsoleHost\bin\Debug\NetReduce.CoordinatorService.ConsoleHost.exe"));
            Thread.Sleep(100);

            try
            {
                var workerStorage = new FileSystemStorage(@"c:\temp\netreduce\0", false);
                var reducerCodeFileName = new Uri("file:///SampleReducer.cs");
                TestHelpers.LoadToStorage(@"..\..\..\NetReduce.Core.Tests\SampleReducer.cs", reducerCodeFileName, this.storage);
                IUriProvider uriProvider = new UriProvider();
                uriProvider.Uris.Add(new Uri("http://*****:*****@"(?<Key>.+)", "[0-9]+", RegexExtensions.GuidRegexString));
                var uris = workerStorage.ListFiles();
                foreach (var uri in uris)
                {
                    var fileName = workerStorage.GetFileName(uri);
                    if (regex.IsMatch(fileName))
                    {
                        var key = regex.Match(fileName).Groups["Key"].Value;
                        if (Base64.Decode(key) == "k1")
                        {
                            result = workerStorage.Read(fileName);
                        }
                    }
                }

                result.ShouldBe("3");
            }
            finally
            {
                coordinatorProcess.Kill();
            }
        }
 public void AddWorker(RemoteWorker worker)
 {
     workers.Add(worker);
 }