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); }
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}"); }
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; } } }