示例#1
0
 public void Send(IResponseHandlerResult response, IRemoteRequest request, ulong sessiongId = 0)
 {
     this.Send(response, new CurrentRequest()
     {
         Id = 0, Request = request
     }, sessiongId);
 }
示例#2
0
        public async Task TestExecute()
        {
            IRemoteRequest savedRequest = null;
            var            mock         = new Mock <IRemoteRequestProcessor>();

            mock.Setup(processor => processor.ExecuteAsync(It.IsAny <IRemoteRequest>()))
            .Callback <IRemoteRequest>(request => savedRequest = request)
            .Returns(Task.CompletedTask);

            var fooClient = new FooClient(mock.Object);
            await fooClient.ExecuteStringAsync("10", "20");

            Assert.NotNull(savedRequest);
            Assert.Equal("GET", savedRequest.Descriptor.Method);
            Assert.Equal("foo/{value}", savedRequest.Descriptor.UriTemplate);
            Assert.Equal(OperationWebMessageFormat.Json, savedRequest.Descriptor.RequestFormat);
            Assert.Equal(OperationWebMessageFormat.Xml, savedRequest.Descriptor.ResponseFormat);
            Assert.Equal(1, savedRequest.QueryStringParameters.Count);
            Assert.Equal(1, savedRequest.BodyParameters.Count);
            var queryParameter = savedRequest.QueryStringParameters.Single();
            var bodyParameter  = savedRequest.BodyParameters.Single();

            Assert.Equal("value", queryParameter.Key);
            Assert.Equal("10", queryParameter.Value);
            Assert.Equal("bar", bodyParameter.Key);
            Assert.Equal("20", bodyParameter.Value);
        }
示例#3
0
        private void RequestHandler_OnMessageReceived(object sender, IRemoteRequest request, OnReceivedSocketEventArgs e2)
        {
            var reqs = request as Request;

            if (reqs == null)
            {
                return;
            }

            if (request.CommandType.IsEquals(ConfigFileCommand.Push))
            {
                if (this.sessions.ContainsKey(e2.Connection.Id))
                {
                    return;
                }

                var fileName = reqs.Query == null ? null : reqs.Query["file"];
                if (fileName == null)
                {
                    return;
                }

                this.sessions[e2.Connection.Id] = new KeyValuePair <string, Encoding>(fileName, reqs.Encoding);
                return;
            }
        }
示例#4
0
        /// <summary>
        /// 处理请求
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public TaskCompletionSource <IRemoteResponse> Excute(IRemoteRequest request)
        {
            var current = new CurrentRequest(request, () => this.NextId);
            var task    = new TaskCompletionSource <IRemoteResponse>(TaskCreationOptions.None);

            this.all.TryAdd(current.Id, new CurrentRequestTaskCompletion()
            {
                Request = current, Response = task
            });
            this.client.Push(this.remoteProtocol.FromRequest(current));
            return(task);
        }
示例#5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="request"></param>
 /// <param name="idgenera"></param>
 public CurrentRequest(IRemoteRequest request, Func <ulong> idgenera)
 {
     this.Request = request;
     this.Id      = idgenera();
 }
示例#6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        IResponseHandlerResult IResponseHandler.Excute(IResponseHandlerContext context, IRemoteRequest request)
        {
            var reqs = request as Request;
            var resp = new ResponseResult()
            {
                Query   = reqs.Query,
                Headers = reqs.Headers,
                Form    = reqs.Form,
            };

            if (request.CommandType.IsEquals(ConfigFileCommand.Test))
            {
                return(resp);
            }

            var fileName = reqs.Query == null ? null : reqs.Query["file"];

            if (fileName == null)
            {
                return(resp);
            }

            var builder = this.configurationWatcher[fileName];

            if (builder == null)
            {
                return(resp);
            }

            resp.Query["encoding"] = builder.File.Encoding.BodyName;
            resp.Body = new MemoryStream(reqs.Encoding.GetBytes(builder.Content));
            return(resp);
        }