コード例 #1
0
        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}");
                    }
                }
            }));
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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");
            });
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: mango0228/MyTools
        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();
        }
コード例 #6
0
        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");
            });
        }