示例#1
0
        internal async Task RunClientAsync()
        {
            var clientSock = new TcpClient();

            _barrier.SignalAndWait();
            await clientSock.ConnectAsync(IPAddress.Loopback, Program.lbPort);

            var caller = new RpcCaller <IHelloService>(
                new NetworkRpcClient(new TcpTransportLayer(clientSock)
                                     ));

            //var result = await caller.CallByNameAsync<string>(nameof(IHelloServer.SayHello));
            _barrier.SignalAndWait();
            var client      = caller.CreateClient();
            var helloResult = client.SayHello();

            Console.WriteLine($"Sent command from client. Server responded {helloResult}");
            Console.WriteLine($"Is the sky blue?: {client.IsSkyBlue()}");
            Console.WriteLine($"1 + 3 is: {client.Add(1, 3)}");
            var c1 = new TastyCookie(TastyCookie.CookieFlavor.Chocolate, 6, 1);
            var c2 = new TastyCookie(TastyCookie.CookieFlavor.Chocolate, 8, 1.2);

            Console.WriteLine($"Volume of TastyCookie 1 is: {client.GetVolume(c1)}");
            Console.WriteLine($"Cookie {(client.Compare(c1, c2) ? "1" : "2")} is larger.");
            await Task.Delay(0);
        }
示例#2
0
        public static TInterface CreateEmpty(RpcCaller <TInterface> caller)
        {
            var binder           = new CallProxyBinder <TInterface>(caller);
            var dynamicCallProxy = ProxyGenerator.BuildEmpty <TInterface>(binder);

            return(dynamicCallProxy);
        }
        private async Task <T> MakeRPCCall <T>(Node node, string method = "getblockcount")
        {
            try
            {
                HttpResponseMessage response = null;
                var rpcRequest = new RPCRequestBody(method);

                if (!string.IsNullOrEmpty(node.SuccessUrl))
                {
                    response = await RpcCaller.SendRPCCall(HttpMethod.Post, $"{node.SuccessUrl}", rpcRequest);
                }
                else
                {
                    var ports = this.netSettings.GetPorts();
                    foreach (var portWithType in ports)
                    {
                        var triedUrl = default(string);
                        if (!string.IsNullOrEmpty(node.Url))
                        {
                            triedUrl = portWithType.GetFullUrl(node.Url);
                            response = await RpcCaller.SendRPCCall(HttpMethod.Post, triedUrl, rpcRequest);
                        }
                        else
                        {
                            triedUrl = portWithType.GetFullUrl(node.NodeAddresses.FirstOrDefault().Ip);
                            response = await RpcCaller.SendRPCCall(HttpMethod.Post, triedUrl, rpcRequest);
                        }

                        if (response != null && response.IsSuccessStatusCode)
                        {
                            node.SuccessUrl = triedUrl;
                            break;
                        }
                    }
                }

                if (response != null && response.IsSuccessStatusCode)
                {
                    var result = await response.Content.ReadAsStringAsync();

                    var serializedResult = JsonConvert.DeserializeObject <T>(result);
                    return(serializedResult);
                }
            }
            catch (Exception e)
            {
            }

            return(default(T));
        }
        public TestClientFixture()
        {
            var sockets    = SocketProvider.CreateSockets().Result;
            var clientSock = sockets.Item1;
            var serverSock = sockets.Item2;

            Service = new RpcService <ITestService>(
                new NetworkRpcService(new TcpTransportLayer(serverSock)
                                      ));
            Caller = new RpcCaller <ITestService>(
                new NetworkRpcClient(new TcpTransportLayer(clientSock)
                                     ));
            Service.Export(new TestService());
            Client = Caller.CreateClient();
        }
示例#5
0
        static async Task Main(string[] args)
        {
            var factory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };
            var conn    = factory.CreateConnection();
            var channel = conn.CreateModel();

            var svc1 = new MyService();

            svc1.BindTo(channel);
            var svc2 = new MyService();

            svc2.BindTo(channel);

            var caller = new RpcCaller(channel, svc1.DefaultQueueName);
            await caller.Call("Test", 5);

            Console.WriteLine("Done");
            Thread.Sleep(Timeout.InfiniteTimeSpan);
        }
        public async Task <string> GetNodeVersion(string endpoint)
        {
            var result = await RpcCaller.MakeRPCCall <RPCResponseBody <RPCResponseVersion> >(endpoint, "getversion");

            return(result == null ? string.Empty : result.Result.Useragent);
        }
        private void HandleNewAddress(RPCPeer address, StateOfNeoContext db)
        {
            var    newNode    = default(Node);
            string successUrl = null;
            var    ports      = this.netSettings.GetPorts();

            foreach (var portWithType in ports)
            {
                var url = portWithType.GetFullUrl(address.Address.ToMatchedIp());

                try
                {
                    var rpcResult = RpcCaller.MakeRPCCall <RPCResponseBody <int> >(url, "getblockcount")
                                    .GetAwaiter()
                                    .GetResult();


                    if (rpcResult?.Result > 0)
                    {
                        successUrl = url;
                        newNode    = this.CreateNodeOfAddress(address.Address,
                                                              portWithType.Type,
                                                              successUrl,
                                                              NodeAddressType.RPC);
                        break;
                    }
                }
                catch (Exception e)
                {
                    Log.Error($"Get blockcount parse error {e.Message}", e);
                    break;
                }
            }

            if (newNode == default(Node))
            {
                var httpTypes = new string[] { "https", "http" };
                foreach (var httpType in httpTypes)
                {
                    var url            = $"{httpType}://{address.Address.ToMatchedIp()}";
                    var heightResponse = HttpRequester.MakeRestCall <HeightResponseObject>($@"{url}/api/main_net/v1/get_height", HttpMethod.Get)
                                         .GetAwaiter()
                                         .GetResult();

                    if (heightResponse != null)
                    {
                        successUrl = url;
                        newNode    = this.CreateNodeOfAddress(address.Address,
                                                              httpType,
                                                              successUrl,
                                                              NodeAddressType.REST,
                                                              NodeCallsConstants.NeoScan);
                        break;
                    }

                    var versionResponse = HttpRequester.MakeRestCall <NeoNotificationVersionResponse>($@"{url}/v1/version", HttpMethod.Get)
                                          .GetAwaiter()
                                          .GetResult();

                    if (versionResponse != null)
                    {
                        successUrl = url;
                        newNode    = this.CreateNodeOfAddress(address.Address,
                                                              httpType,
                                                              successUrl,
                                                              NodeAddressType.REST,
                                                              NodeCallsConstants.NeoNotification);
                        break;
                    }
                }
            }

            if (newNode != null)
            {
                var newNodeAddress = new NodeAddress
                {
                    Ip   = address.Address.ToMatchedIp(),
                    Node = newNode
                };

                var peer = db.Peers.FirstOrDefault(x => x.Ip == address.Address.ToMatchedIp());

                var result = LocationCaller.UpdateNode(newNode, newNodeAddress.Ip).GetAwaiter().GetResult();

                newNode.NodeAddresses.Add(newNodeAddress);

                db.NodeAddresses.Add(newNodeAddress);
                db.Nodes.Add(newNode);
                peer.Node = newNode;
                db.SaveChanges();
            }
        }
示例#8
0
 public CallProxyBinder(RpcCaller <TInterface> caller)
 {
     _caller = caller;
 }
示例#9
0
 public CallProxy(TInterface target, RpcCaller <TInterface> caller)
 {
     _remoteCaller  = caller;
     _proxiedObject = target;
 }