Ejemplo n.º 1
0
        protected override async Task DoSendAsync(JimuTransportMsg msg)
        {
            var invokeMessage = msg.GetContent <JimuRemoteCallData>();
            var uri           = $"http://{_address.CreateEndPoint()}/{invokeMessage.Descriptor.RoutePath}";

            //if (invokeMessage.Descriptor.HttpMethod() == "get" || invokeMessage.Descriptor.HttpMethod() == null)
            //{
            foreach (var para in invokeMessage.Parameters)
            {
                uri.SetQueryParam(para.Key, para.Value);
            }
            //var ret = await uri.SendJsonAsync(HttpMethod.Get, msg);
            //var str = await ret.Content.ReadAsStringAsync();
            var result = await uri.SendJsonAsync(HttpMethod.Get, msg).ReceiveJson <JimuTransportMsg>();

            //result = await uri.GetJsonAsync<RemoteInvokeResultMessage>();

            //return new RemoteInvokeResultMessage { Result = result, ResultType = result.GetType().ToString() };
            //}
            //else if (invokeMessage.Descriptor.HttpMethod() == "post")
            //{
            //    switch (invokeMessage.Descriptor.HttpContentType())
            //    {
            //        case "application/json":
            //        case null:
            //            result = await uri.PostJsonAsync(invokeMessage.Parameters).ReceiveJson<TransportMessage>();
            //            break;
            //        case "application/x-www-form-urlencoded":
            //            result = await uri.PostUrlEncodedAsync(invokeMessage.Parameters).ReceiveJson<TransportMessage>();
            //            break;
            //        case "text/plain":
            //            StringBuilder paraSb = new StringBuilder();
            //            foreach (var para in invokeMessage.Parameters)
            //            {
            //                paraSb.Append($"{para.Key}={para.Value}&");
            //            }
            //            result = await uri.PostStringAsync(paraSb.Length > 0 ? paraSb.ToString().TrimEnd('&') : "").ReceiveJson<TransportMessage>();
            //            break;
            //        case "multipart/form-data":
            //            var ret = await uri.PostMultipartAsync((bc) =>
            //            {
            //                foreach (var para in invokeMessage.Parameters)
            //                {
            //                    if (para.Value.GetType().IsAssignableFrom(typeof(HttpContent)))
            //                    {
            //                        bc.Add((HttpContent)para.Value);
            //                    }
            //                    //bc.Add(para.Key, (HttpContent)para.Value);
            //                }
            //            });
            //            result = TransportMessage.Create(msg.Id, new RemoteInvokeResultMessage { Result = ret });
            //            break;
            //        default:
            //            result = TransportMessage.Create(msg.Id, new RemoteInvokeResultMessage { ErrorCode = "501", ErrorMsg = "not support media type" });
            //            break;
            //    }
            //}
            //result = new RemoteInvokeResultMessage { ErrorCode = "501", ErrorMsg = "not support media type" };
            await _clientListener.Received(result);
        }
Ejemplo n.º 2
0
        public async Task StartAsync()
        {
            _logger.Info($"start server: {_address.Code}");
            var bossGroup   = new MultithreadEventLoopGroup();
            var workerGroup = new MultithreadEventLoopGroup(4);
            var bootstrap   = new ServerBootstrap();

            bootstrap
            .Group(bossGroup, workerGroup)
            //.Group(bossGroup, workerGroup)
            .Channel <TcpServerSocketChannel>()
            .Option(ChannelOption.SoBacklog, 100)
            .Option(ChannelOption.Allocator, PooledByteBufferAllocator.Default)
            .ChildHandler(new ActionChannelInitializer <IChannel>(channel =>
            {
                var pipeline = channel.Pipeline;
                pipeline.AddLast(new LengthFieldPrepender(4));
                pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4));
                pipeline.AddLast(new ReadServerMessageChannelHandlerAdapter(_logger));
                pipeline.AddLast(new ServerHandlerChannelHandlerAdapter(async(context, message) =>
                {
                    await OnReceived(context, message);
                }, _logger));
            }));

            //var endpoint = new IPEndPoint(IPAddress.Parse(this.addre), this._port);
            _channel = await bootstrap.BindAsync(_address.CreateEndPoint());

            _logger.Info($"server start successfuly, address is: {_address.Code}");
        }
Ejemplo n.º 3
0
            private async Task CheckHealth(JimuAddress address, int timeout)
            {
                using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
                {
                    SendTimeout = timeout
                })
                {
                    try
                    {
                        await socket.ConnectAsync(address.CreateEndPoint());

                        address.IsHealth = true;
                    }
                    catch
                    {
                        address.IsHealth = false;
                    }
                }
            }