Esempio n. 1
0
 public HandleRequest <ContextType> AddHandler(HandleRequest <ContextType> handler)
 {
     if (_localHandler == null)
     {
         _localHandler = new HandleRequest <ContextType>(this.LocalHandleRequest);
     }
     _handlers += handler;
     return(_localHandler);
 }
        private static void RegisterRequestHandler(
            SegmentNode <TRequest, TResponse> segmentTree,
            Endpoint endpoint,
            HandleRequest <TRequest, TResponse> handleRequest,
            IEnumerable <ISegmentVariant> segments)
        {
            var targetNode = FindTargetNode(segmentTree, segments);

            RegisterRequestHandlerOnNode(endpoint, handleRequest, targetNode);
        }
Esempio n. 3
0
        private void ProcessData(TcpClient client)
        {
            try
            {
                var strm = client.GetStream();

                var buffer = new byte[client.ReceiveBufferSize];

                var readCnt = strm.Read(buffer, 0, buffer.Length);

                var payload = Encoding.UTF8.GetString(buffer, 0, readCnt);
                var request = JsonConvert.DeserializeObject <Request>(payload);

                var handleRequest = new HandleRequest(request, _database);

                var response = handleRequest.InputValidation();
                var res      = new byte[0];

                if (response.Status.ToLower().Contains("ok"))
                {
                    // do the method
                    switch (request.Method)
                    {
                    case "read":
                        handleRequest.Read();
                        break;

                    case "create":
                        handleRequest.Create();
                        break;

                    case "update":
                        handleRequest.Update();
                        break;

                    case "delete":
                        handleRequest.Delete();
                        break;

                    case "echo":
                        handleRequest.Echo();
                        break;

                    default:
                        break;
                    }
                }
                res = Encoding.UTF8.GetBytes(response.ToJson());
                strm.Write(res, 0, res.Length);
            }
            catch (Exception e)
            {
                Console.WriteLine("something went wrong" + e.Message + e.StackTrace);
            }
        }
        public void Register(
            SegmentNode <TRequest, TResponse> segmentTree,
            Endpoint endpoint,
            HandleRequest <TRequest, TResponse> handleRequest,
            ValidateParameterKeys validateParameterKeys)
        {
            var segments = ParseRoute(endpoint).ToList();

            RunParameterKeyValidation(validateParameterKeys, segments);
            RegisterRequestHandler(segmentTree, endpoint, handleRequest, segments);
        }
        public ActionResult ListGrid(q_ProgData sh)
        {
            HandleRequest HRq = new HandleRequest();  //記錄QueryString

            HRq.encodeURIComponent = true;
            //HRq.Remove("page");

            ac            = new a_PowerUser();
            ac.Connection = getSQLConnection();
            CreatGridInitScript();
            HandleCollectDataToOptions();

            return(View("EditData"));
        }
Esempio n. 6
0
        public override ActionResult ListGrid(q_PageContext sh)
        {
            operationMode = OperationMode.EnterList;
            HandleRequest HRq = new HandleRequest(); //記錄QueryString

            HRq.encodeURIComponent = true;
            HRq.Remove("page");

            ViewBag.Page              = QueryGridPage();
            ViewBag.Caption           = GetSystemInfo().prog_name;
            ViewBag.AppendQuertString = HRq.ToQueryString();
            HRq = null;

            return(View("ListData", sh));
        }
        public void StartReceivingClientRequest(HandleRequest handleRequestCallback)
        {
            var continuedRequest = new Queue <HttpRequest>();

            while (true)
            {
                try
                {
                    var @event  = ExpectClientRequest()[0];
                    var request = @event.ParsedHttpRequest;

                    if (request != null && request.GetHeaderFieldValue(HttpRequestHeader.Expect) != null)
                    {
                        if (request.GetHeaderFieldValue(HttpRequestHeader.Expect).Contains("100"))
                        {
                            continuedRequest.Enqueue(request);
                            SendResponse(@event.Sender, new HttpResponse(System.Net.HttpStatusCode.Continue));
                            continue;
                        }
                    }

                    if (request == null)
                    {
                        if (@event.EventType == EventType.IncomingRequest && continuedRequest.Count > 0)
                        {
                            request      = continuedRequest.Dequeue();
                            request.Body = @event.Text;
                        }
                        else
                        {
                            throw new IOException("Non-HTTP request received.");
                        }
                    }

                    Debug.WriteLine("\n\rReceived request at " + DateTime.Now);
                    Debug.WriteLine(request.ToString().Trim());

                    var response = handleRequestCallback(request);
                    SendResponse(@event.Sender, response);
                    Debug.WriteLine("\n\rSent response at " + DateTime.Now);
                    Debug.WriteLine(response.ToString().Trim());
                }
                catch (TimeoutException)
                {
                    break;
                }
            }
        }
        public ActionResult ListGrid(q_ProgData sh)
        {
            HandleRequest HRq = new HandleRequest();  //記錄QueryString

            HRq.encodeURIComponent = true;

            ac = new a_PowerUnit()
            {
                Connection = getSQLConnection(), logPlamInfo = plamInfo
            };
            ViewBag.Caption = GetSystemInfo().prog_name;
            CreatGridInitScript();
            HandleCollectDataToOptions();

            return(View("EditData"));
        }
Esempio n. 9
0
        public bool TryGetHandler(RequestHandlerContext context, out HandleRequest handler)
        {
            if (_typeOfRoute == RouteType.None)
            {
                handler = _request;
                return(true);
            }
            var database = CreateDatabase(context);

            if (database.IsCompleted)
            {
                handler = _request;
                return(true);
            }
            handler = null;
            return(false);
        }
        private void HandlePackage(Package package)
        {
            switch (package.PackageType)
            {
            case PackageType.ConnectionRequest:

                var response = (bool)HandleRequest?.Invoke();
                SendConnectionResponse(response);

                if (response)
                {
                    broadcastThread = new Thread(BroadcastScreen);
                    broadcastThread.Start();
                }

                break;

            case PackageType.ConnectionResponse:

                var isAllowed = (package as ConnectionResponsePackage).IsAllowed;

                if (!isAllowed)
                {
                    HandleError?.Invoke("Пользователь отказал вам в соединении.");
                    Disconnect();
                }

                break;

            case PackageType.ImagePackage:

                var image = (package as ImagePackage).Screenshot;

                UpdateDisplay?.Invoke(image);

                break;

            case PackageType.MouseInfoPackage:

                var parameters = (package as MouseInfoPackage).MouseParameters;

                MouseOperationsUtility.DoMouseEvent(parameters);

                break;
            }
        }
Esempio n. 11
0
        public override ActionResult EditMasterNewData()
        {
            operationMode = OperationMode.EditInsert;
            md            = new m_Unit();

            //設定預設值
            md.EditType = EditModeType.Insert;

            ac            = new a_Unit();
            ac.Connection = getSQLConnection();
            HandleCollectDataToOptions();

            ViewBag.Caption = GetSystemInfo().prog_name;

            HandleRequest HRq = new HandleRequest(); //記錄QueryString

            HRq.Remove("Id");                        //不需記ID
            ViewBag.QueryString = HRq.ToQueryString();
            HRq = null;
            return(View("EditData", md));
        }
        public override ActionResult EditMasterNewData()
        {
            operationMode = OperationMode.EditInsert;
            HandleCollectDataToOptions();
            ViewBag.Caption = GetSystemInfo().prog_name;
            HandleRequest HRq = new HandleRequest(); //記錄QueryString

            HRq.Remove("Id");                        //不需記ID
            ViewBag.QueryString = HRq.ToQueryString();
            HRq = null;
            ac  = new a_ProductKind()
            {
                Connection = getSQLConnection(), logPlamInfo = plamInfo
            };
            return(View("EditData", new m_ProductKind()
            {
                ID = ac.GetIDX(),
                EditType = EditModeType.Insert,
                IsOpen = true
            }));
        }
Esempio n. 13
0
        public override Task <HandleReply> Handle(HandleRequest request, ServerCallContext context)
        {
            var brokerTimestamp = DateTime.UtcNow.Ticks;
            var task            = new CrawlTask();

            return(Task.Run(async() =>
            {
                if (!Guid.TryParse(request.Uuid, out var uuid) || !this._repository.FindById(uuid, out _))
                {
                    return new HandleReply
                    {
                        Timestamp = request.Timestamp,
                        BrokerTimestamp = brokerTimestamp,
                        Task = task,
                        Status = false
                    };
                }

                foreach (var u in request.Task.Urls)
                {
                    this._urls.Add(u, context.CancellationToken);
                }

                var url = default(string);
                // 這裡會一直等到可以dequeue(trytake = dequeue)
                while (!context.CancellationToken.IsCancellationRequested && !this._urls.TryTake(out url))
                {
                    await Task.Delay(1000, context.CancellationToken);
                }

                task.Urls.Add(url);
                return new HandleReply
                {
                    Timestamp = request.Timestamp,
                    BrokerTimestamp = brokerTimestamp,
                    Task = task,
                    Status = true
                };
            }, context.CancellationToken));
        }
Esempio n. 14
0
        private async Task TryFillFile(IFormFileCollection files, HandleRequest model)
        {
            foreach (var file in files)
            {
                var pName = file.Name;

                var prop = model.GetType().GetProperty(pName);
                if (prop == null)
                {
                    continue;
                }

                var path = Path.GetTempPath();

                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                var ext      = Path.GetExtension(file.FileName);
                var fileName = $"{Guid.NewGuid():N}{ext}";
                var filePath = Path.Combine(path, fileName);

                using (var stream = new FileStream(filePath, FileMode.CreateNew))
                {
                    await file.CopyToAsync(stream);
                }
                try
                {
                    var url = _objectStorageService.UploadFile($"{pName}/{fileName}", filePath);

                    prop.SetValue(model, url);
                }
                catch (Exception ex)
                {
                    _logger.LogError("Save file to oss raised an error:{0}", ex.ToString());
                }
            }
        }
Esempio n. 15
0
        public override ActionResult EditMasterDataByID(int id)
        {
            operationMode = OperationMode.EditModify;
            ac            = new a_ProgData();
            ac.Connection = getSQLConnection();

            RunOneDataEnd <m_ProgData> HResult = ac.GetDataMaster(id, LoginUserId);

            md          = HResult.SearchData;
            md.EditType = EditModeType.Modify;
            HandleResultCheck(HResult);
            HandleCollectDataToOptions();

            ViewBag.Caption = GetSystemInfo().prog_name;

            HandleRequest HRq = new HandleRequest(); //記錄QueryString

            HRq.Remove("id");                        //不需記ID
            ViewBag.QueryString = HRq.ToQueryString();
            HRq = null;

            return(View("EditData", md));
        }
 public IRouteRegistry <TRequest, TResponse> Register(Endpoint endpoint, HandleRequest <TRequest, TResponse> handleRequest)
 {
     _routeRegistrar.Register(_segmentTree, endpoint, handleRequest);
     return(this);
 }
Esempio n. 17
0
        public async Task Run(Uri endpoint, CancellationToken cancellationToken = default)
        {
            var httpClient = new HttpClient {
                Timeout = TimeSpan.FromSeconds(15)
            };

            var options = new GrpcChannelOptions
            {
                HttpClient    = httpClient,
                LoggerFactory = this._loggerFactory
            };

            await Task.Run(async() =>
            {
                var channel = GrpcChannel.ForAddress(endpoint, options);
                var client  = new ServiceClient(channel);
                // 連線請求
                var connectRequest = new ConnectRequest
                {
                    Timestamp = DateTime.UtcNow.Ticks,
                    Worker    = this.Worker
                };
                var connectReply = await client.ConnectAsync(connectRequest, cancellationToken: cancellationToken);
                if (!connectReply.IsConnected)
                {
                    await Task.FromException(new RpcException(Status.DefaultCancelled));
                }
                else
                {
                    Console.Title = connectReply.Address;

                    var target = connectReply.Task.Urls[0];

                    while (!cancellationToken.IsCancellationRequested)
                    {
                        var task = s_none;
                        var get  = default(HttpResponseMessage);
                        try
                        {
                            // 替換成 Selenium/PhantomJs
                            // ----------------- begin todo -------------------


                            get         = await httpClient.GetAsync(target);
                            var doc     = new HtmlDocument();
                            var content = await get.Content.ReadAsStreamAsync();
                            doc.Load(content);

                            if (doc.DocumentNode.SelectNodes("//a") is HtmlNodeCollection nodes)
                            {
                                var hrefs = (from node in nodes
                                             let p = node.GetAttributeValue("href", null)
                                                     where p != null && p.StartsWith("http")
                                                     select p).ToArray();
                                if (hrefs.Length > 0)
                                {
                                    task = new CrawlTask();
                                    task.Urls.AddRange(hrefs);
                                }
                            }

                            // ------------------ end todo --------------------
                            Console.WriteLine("crawled: " + target);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("unhandled: " + target);
                        }

                        var now           = DateTime.UtcNow;
                        var handleRequest = new HandleRequest
                        {
                            Task      = task,
                            Timestamp = now.Ticks,
                            Uuid      = connectReply.Uuid
                        };
                        var handleReply = await client.HandleAsync(handleRequest);
                        target          = handleReply.Task.Urls[0];
                    }
                }
            }, cancellationToken);
        }
        public void Register(SegmentNode <TRequest, TResponse> segmentTree, Endpoint endpoint, HandleRequest <TRequest, TResponse> handleRequest)
        {
            var segments = ParseRoute(endpoint);

            RegisterRequestHandler(segmentTree, endpoint, handleRequest, segments);
        }
        public ActionResult ListGrid(q_ProgData sh)
        {
            HandleRequest HRq = new HandleRequest();  //記錄QueryString
            HRq.encodeURIComponent = true;

            ac = new a_PowerUnit() { Connection = getSQLConnection(), logPlamInfo = plamInfo };
            ViewBag.Caption = GetSystemInfo().prog_name;
            CreatGridInitScript();
            HandleCollectDataToOptions();

            return View("EditData");
        }
        public ActionResult ListGrid(q_ProgData sh)
        {
            HandleRequest HRq = new HandleRequest();  //記錄QueryString
            HRq.encodeURIComponent = true;
            //HRq.Remove("page");

            ac = new a_PowerUser();
            ac.Connection = getSQLConnection();
            CreatGridInitScript();
            HandleCollectDataToOptions();

            return View("EditData");
        }