private static Task CallGetServiceName(DotNettyClient client, ISerializer serializer) { System.Console.WriteLine("------------------------------GetServiceName----------------------------------"); var request = CreateGetServiceNameRequest(); return(client.SendAsync(serializer.SerializeAsync(request).Result, 1000 * 3) .ContinueWith(task => { try { GetServiceNameResponseHandler(serializer, task.Result.Data); } catch (AggregateException ex) { if (ex.InnerException.GetType() == typeof(RequestTimeoutExcption)) { System.Console.WriteLine($"Timeout: RequestId={((RequestTimeoutExcption)ex.InnerException).Request.Id}"); } else { System.Console.WriteLine($"Error: {ex.InnerException.Message}"); } } })); }
public object InvokeMember(object obj, int rid, string statement, params object[] args) { MethodInfo met = (MethodInfo)typeof(T).Module.ResolveMethod(rid); List <string> parameterList = new List <string>(); List <string> parameterTypeList = new List <string>(); List <ParameterInfo> parameterInfos = met.GetParameters().ToList(); string result; for (int i = 0; i < args.Length; i++) { var arg = args[i]; ParameterInfo parameterInfo = parameterInfos[i]; parameterList.Add(JsonConvert.SerializeObject(arg)); parameterTypeList.Add(parameterInfo.ParameterType.FullName); } string[] statements = statement.Split('+'); string parameter = JsonConvert.SerializeObject(parameterList); string parameterType = JsonConvert.SerializeObject(parameterTypeList); RpcRequest request = RpcRequest.BuildRequest(statements[0], statements[1], parameter, parameterType); if (statements.Length != 2) { throw new RpcArgumentException("非法接口请求"); } try { using (DotNettyClient client = new DotNettyClient()) { TransportMessage message = client.SendMessage(JsonConvert.SerializeObject(request)); result = message.Message; } // 0.1 版本采用底层socket来通信 0.1版本以后已经弃用 // result = SyncTcpClient.SendMessage(ClientContainer.Client, JsonConvert.SerializeObject(request)); } catch (System.Exception e) { throw new RpcRequestException("rpc调用失败,请检查服务器是否状态正常", e); } try { RpcResponse response = JsonConvert.DeserializeObject <RpcResponse>(result); if (response.Code != 0) { throw new System.Exception(response.Message); } if (met.ReturnType == typeof(void)) { return(null); } return(JsonConvert.DeserializeObject(response.Response, met.ReturnType)); } catch (System.Exception e) { throw new DeserializeException("rpc反序列化失败", e); } }
private static Task CallAddCustomer(DotNettyClient client, ISerializer serializer) { System.Console.WriteLine("------------------------------AddCustomerTest----------------------------------"); var request1 = CreateAddCustomerRequest(serializer, new Customer() { Id = 1, Name = "Michael", Birthday = new DateTime(1999, 1, 1) }); var task1 = client.SendAsync(serializer.SerializeAsync(request1).Result, 1000 * 3) .ContinueWith(task => { try { AddCustomerResponseHandler(serializer, task.Result.Data); } catch (AggregateException ex) { if (ex.InnerException.GetType() == typeof(RequestTimeoutExcption)) { System.Console.WriteLine($"Timeout: RequestId={((RequestTimeoutExcption)ex.InnerException).Request.Id}"); } else { System.Console.WriteLine($"Error: {ex.InnerException.Message}"); } } }); var request2 = CreateAddCustomerRequest(serializer, new Customer() { Id = 2, Name = "Jane", Birthday = new DateTime(2001, 5, 10) }); var task2 = client.SendAsync(serializer.SerializeAsync(request2).Result, 1000 * 3) .ContinueWith(task => { try { AddCustomerResponseHandler(serializer, task.Result.Data); } catch (AggregateException ex) { if (ex.InnerException.GetType() == typeof(RequestTimeoutExcption)) { System.Console.WriteLine($"Timeout: RequestId={((RequestTimeoutExcption)ex.InnerException).Request.Id}"); } else { System.Console.WriteLine($"Error: {ex.InnerException.Message}"); } } }); return(Task.WhenAll(task1, task2)); }
public static void Test(string host, int port, string localHost, int localPort) { System.Console.ReadLine(); LoggerManager.ClientLoggerFactory.AddConsole(LogLevel.Debug); var client = new DotNettyClient(host, port, localHost, localPort); client.ConnectAsync().ContinueWith(task => { if (task.Exception != null) { System.Console.WriteLine(task.Exception.InnerException.Message); return; } System.Console.WriteLine("Connected"); }).Wait(); var serializer = new ProtoBufSerializer(LoggerManager.ClientLoggerFactory); //new MsgPackSerializer(LoggerManager.ClientLoggerFactory); CallGetServiceName(client, serializer).Wait(); CallAddCustomer(client, serializer).Wait(); CallGetCustomer(client, serializer).Wait(); CallQueryCustomer(client, serializer).Wait(); CallRemoveCustomer(client, serializer).Wait(); CallQueryCustomer(client, serializer).Wait(); CallRemoveAllCustomer(client, serializer).Wait(); CallQueryCustomer(client, serializer).Wait(); System.Console.ReadLine(); client.CloseAsync().ContinueWith(task => { if (task.Exception != null) { System.Console.WriteLine(task.Exception.InnerException.Message); return; } System.Console.WriteLine("Closed"); }); }
static void Main(string[] args) { DotNettyClient client = new DotNettyClient("127.0.0.1", 10228); client.StartAsync(); Thread.Sleep(2000); DotNettyData paramData = new DotNettyData { Data = "i am client message", SerialNumber = Guid.NewGuid().ToString() }; DotNettyData result = client.SendAsync(paramData, false, 10000).Result; //设定30秒超时 Console.WriteLine(result.Data.ToString()); Console.ReadLine(); client.CloseAsync(); }
public static void Test(string host, int port, string localHost, int localPort) { System.Console.ReadLine(); LoggerManager.ClientLoggerFactory.AddConsole(LogLevel.Debug); var client = new DotNettyClient(host, port, localHost, localPort); client.ConnectAsync().ContinueWith(task => { if (task.Exception != null) { System.Console.WriteLine(task.Exception.InnerException.Message); return; } System.Console.WriteLine("Connected"); }); System.Console.WriteLine("Input messge and send to server. Please input $quit to exit."); string message; do { message = System.Console.ReadLine(); if (message.Equals("$quit", StringComparison.CurrentCultureIgnoreCase)) { break; } for (long i = 0; i < 100; i++) { var attachments = new Dictionary <string, byte[]>(); attachments.Add("TestString", Encoding.UTF8.GetBytes("ABC")); attachments.Add("TestInt", BitConverter.GetBytes(100)); client.SendAsync(Encoding.UTF8.GetBytes(message), 1000 * 3, attachments) .ContinueWith(task => { try { var result = task.Result; var str = Encoding.UTF8.GetString(result.Data); System.Console.WriteLine($"Result={str}"); System.Console.WriteLine($"Res1={Encoding.UTF8.GetString(result.Attachments["Res1"])}"); System.Console.WriteLine($"Res2={BitConverter.ToInt32(result.Attachments["Res2"], 0)}"); } catch (AggregateException ex) { if (ex.InnerException.GetType() == typeof(RequestTimeoutExcption)) { System.Console.WriteLine($"Timeout: RequestId={((RequestTimeoutExcption)ex.InnerException).Request.Id}"); } else { System.Console.WriteLine($"Error: {ex.InnerException.Message}"); } } }); } System.Console.WriteLine("Done"); } while (true); client.CloseAsync().ContinueWith(task => { if (task.Exception != null) { System.Console.WriteLine(task.Exception.InnerException.Message); return; } System.Console.WriteLine("Closed"); }); }