//static Stethoscope stethoscope;
        static void Main(string[] args)
        {
            RobotRaconteurNativeLoader.Load();

       

            // Create and initialize the stehtoscope object
            Littman3200_impl scope = new Littman3200_impl();

            // Create and register the local transport
            LocalTransport t1 = new LocalTransport();
            t1.StartServerAsNodeName("Littman3200_Stethoscope.Littman3200_Interface");
            RobotRaconteurNode.s.RegisterTransport(t1);

            // Create and register the TCP transport
            TcpTransport t2 = new TcpTransport();
            t2.StartServer(7418);
            t2.EnableNodeAnnounce();
            RobotRaconteurNode.s.RegisterTransport(t2);

            //Register the Webcam_interface type so that the node can understand the service definition
            RobotRaconteurNode.s.RegisterServiceType(new Littman3200_StethoscopeFactory());

            //Register the webcam host object as a service so that it can be connected to
            RobotRaconteurNode.s.RegisterService("Stethoscope", "Littman3200_Stethoscope", scope);

            //Stay open until shut down
            Console.WriteLine("Stethoscope server started. Connect with URL");
            Console.WriteLine("http://localhost:7418/{0}/Stethoscope");
            //scope.StartAudioStream();
            Console.WriteLine("\nPress enter to exit\n");
            Console.ReadLine();

            // string connect = scope.Connect();
            //if(connect != ""){
            //  scope.Stream();
            //}

            //scope.Stream();

            //scope.StopAudioStream();

            //Disconnect and shut down
            scope.Disconnect();
            RobotRaconteurNode.s.Shutdown();
        }
コード例 #2
0
ファイル: RpcServer.cs プロジェクト: lxshwyan/Socean.Rpc
        private void AcceptSocketCallback(IAsyncResult ar)
        {
            if (_serverState != 1)
            {
                return;
            }

            var server = (TcpListener)ar.AsyncState;

            Socket     client     = null;
            IPEndPoint ipEndPoint = null;

            try
            {
                client     = server.EndAcceptSocket(ar);
                ipEndPoint = (IPEndPoint)client.RemoteEndPoint;
            }
            catch
            {
            }

            try
            {
                server.BeginAcceptSocket(AcceptSocketCallback, server);
            }
            catch
            {
                Close();
                return;
            }

            if (client == null)
            {
                return;
            }

            if (ipEndPoint == null)
            {
                try
                {
                    client.Close();
                }
                catch
                {
                }

                return;
            }

            var tcpTransport = new TcpTransport(this, ipEndPoint.Address, ipEndPoint.Port);

            try
            {
                tcpTransport.Init(client);
            }
            catch
            {
                try
                {
                    tcpTransport.Close();
                }
                catch
                {
                }
                return;
            }
        }
コード例 #3
0
        private async Task ReconnectToDcAsync(int dcId, CancellationToken token = default)
        {
            token.ThrowIfCancellationRequested();

            if (dcOptions == null || !dcOptions.Any())
            {
                throw new InvalidOperationException($"Can't reconnect. Establish initial connection first.");
            }

            TLExportedAuthorization exported = null;

            if (session.TLUser != null)
            {
                TLRequestExportAuthorization exportAuthorization = new TLRequestExportAuthorization()
                {
                    DcId = dcId
                };
                exported = await SendRequestAsync <TLExportedAuthorization>(exportAuthorization, token).ConfigureAwait(false);
            }

            IEnumerable <TLDcOption> dcs;

            if (dcIpVersion == DataCenterIPVersion.OnlyIPv6)
            {
                dcs = dcOptions.Where(d => d.Id == dcId && d.Ipv6); // selects only ipv6 addresses
            }
            else if (dcIpVersion == DataCenterIPVersion.OnlyIPv4)
            {
                dcs = dcOptions.Where(d => d.Id == dcId && !d.Ipv6); // selects only ipv4 addresses
            }
            else
            {
                dcs = dcOptions.Where(d => d.Id == dcId); // any
            }

            dcs = dcs.Where(d => !d.MediaOnly);

            TLDcOption dc;

            if (dcIpVersion != DataCenterIPVersion.Default)
            {
                if (!dcs.Any())
                {
                    throw new Exception($"Telegram server didn't provide us with any IPAddress that matches your preferences. If you chose OnlyIPvX, try switch to PreferIPvX instead.");
                }

                dcs = dcs.OrderBy(d => d.Ipv6);
                dc  = dcIpVersion == DataCenterIPVersion.PreferIPv4 ? dcs.First() : dcs.Last(); // ipv4 addresses are at the beginning of the list because it was ordered
            }
            else
            {
                dc = dcs.First();
            }

            var dataCenter = new DataCenter(dcId, dc.IpAddress, dc.Port);

            transport          = new TcpTransport(dc.IpAddress, dc.Port, handler);
            session.DataCenter = dataCenter;

            await ConnectAsync(true, token).ConfigureAwait(false);

            if (session.TLUser != null)
            {
                TLRequestImportAuthorization importAuthorization = new TLRequestImportAuthorization()
                {
                    Id = exported.Id, Bytes = exported.Bytes
                };
                var imported = await SendRequestAsync <TLAuthorization>(importAuthorization, token).ConfigureAwait(false);

                OnUserAuthenticated((TLUser)imported.User);
            }
        }
コード例 #4
0
        static void Main(string[] args)
        {
            string command = args[0];

            if (command == "loopback")
            {
                var t = new TcpTransport();
                t.StartServer(22332);
                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var s1 = new RobotRaconteurTestServiceSupport();
                s1.RegisterServices(t);

                ServiceTestClient s = new ServiceTestClient();
                s.RunFullTest("rr+tcp://localhost:22332/?service=RobotRaconteurTestService",
                              "rr+tcp://localhost:22332/?service=RobotRaconteurTestService_auth")
                .GetAwaiter().GetResult();

                RobotRaconteurNode.s.Shutdown();
            }
            else
            if (command == "client")
            {
                var url      = args[1];
                var auth_url = args[2];
                int count    = 1;
                if (args.Length >= 4)
                {
                    count = Int32.Parse(args[3]);
                }

                var t  = new TcpTransport();
                var t2 = new LocalTransport();

                RobotRaconteurNode.s.RegisterTransport(t);
                RobotRaconteurNode.s.RegisterTransport(t2);


                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                for (int i = 0; i < count; i++)
                {
                    ServiceTestClient s = new ServiceTestClient();
                    s.RunFullTest(url, auth_url).GetAwaiter().GetResult();
                }

                RobotRaconteurNode.s.Shutdown();

                Console.WriteLine("Test complete, no errors detected");
            }
            else if (command == "server")
            {
                int port = int.Parse(args[1]);

                //NodeID id = new NodeID(args[2]);
                string name = args[2];


                var t2 = new LocalTransport();
                t2.StartServerAsNodeName(name);


                var t = new TcpTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                t.StartServer(port);

                RobotRaconteurNode.s.RegisterTransport(t);
                t.EnableNodeAnnounce();

                try
                {
                    t.LoadTlsNodeCertificate();
                }
                catch (Exception)
                {
                    Console.WriteLine("Warning: Could not load TLS certificate");
                }

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());

                var s = new RobotRaconteurTestServiceSupport();
                s.RegisterServices(t);

                var s2 = new RobotRaconteurTestServiceSupport2();
                s2.RegisterServices(t);

                Console.WriteLine("Press enter to quit...");
                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();
            }
            else if (command == "findservicebytype")
            {
                string   servicetype = args[1];
                string[] schemes     = args[2].Split(new char[] { ',' });

                var t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);


                System.Threading.Thread.Sleep(5000);

                var r = RobotRaconteurNode.s.FindServiceByType(servicetype, schemes).Result;

                foreach (var e in r)
                {
                    Console.WriteLine("Name: " + e.Name);
                    Console.WriteLine("RootObjectType: " + e.RootObjectType);
                    Console.WriteLine("RootObjectImplements: " + e.ConnectionURL);
                    Console.WriteLine("ConnectionURL: " + String.Join(", ", e.ConnectionURL));
                    Console.WriteLine("NodeID: " + e.NodeID.ToString());
                    Console.WriteLine("NodeName: " + e.NodeName);
                    Console.WriteLine();
                }

                RobotRaconteurNode.s.Shutdown();
            }
            else if (command == "findnodebyid")
            {
                var      nodeid  = new NodeID(args[1]);
                string[] schemes = args[2].Split(new char[] { ',' });

                var t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                System.Threading.Thread.Sleep(6000);

                var r = RobotRaconteurNode.s.FindNodeByID(nodeid, schemes).Result;

                foreach (var e in r)
                {
                    Console.WriteLine("NodeID: " + e.NodeID);
                    Console.WriteLine("NodeName: " + e.NodeName);
                    Console.WriteLine("ConnectionURL: " + String.Join(", ", e.ConnectionURL));
                    Console.WriteLine();
                }

                RobotRaconteurNode.s.Shutdown();
            }
            else if (command == "findnodebyname")
            {
                var      name    = args[1];
                string[] schemes = args[2].Split(new char[] { ',' });

                var t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                System.Threading.Thread.Sleep(6000);

                var r = RobotRaconteurNode.s.FindNodeByName(name, schemes).Result;

                foreach (var e in r)
                {
                    Console.WriteLine("NodeID: " + e.NodeID);
                    Console.WriteLine("NodeName: " + e.NodeName);
                    Console.WriteLine("ConnectionURL: " + String.Join(", ", e.ConnectionURL));
                    Console.WriteLine();
                }

                RobotRaconteurNode.s.Shutdown();
            }
            else if (command == "robdeftest")
            {
                var robdef_filenames = args.Skip(1).ToArray();

                var defs  = new Dictionary <string, ServiceDefinition>();
                var defs2 = new Dictionary <string, ServiceDefinition>();

                foreach (var fname in robdef_filenames)
                {
                    string robdef_text = new StreamReader(fname).ReadToEnd();
                    var    def         = new ServiceDefinition();
                    def.FromString(robdef_text);
                    defs.Add(def.Name, def);
                    string robdef_text2 = def.ToString();
                    var    def3         = new ServiceDefinition();
                    def3.FromString(robdef_text2);
                    defs2.Add(def3.Name, def3);
                }

                ServiceDefinitionUtil.VerifyServiceDefinitions(defs);

                foreach (var n in defs.Keys)
                {
                    if (!ServiceDefinitionUtil.CompareServiceDefinitions(defs[n], defs2[n]))
                    {
                        throw new Exception("Service definition parse does not match");
                    }
                }

                foreach (var def in defs.Values)
                {
                    Console.WriteLine(def.ToString());
                }


                foreach (var def in defs.Values)

                {
                    foreach (var c in def.Constants.Values)

                    {
                        if (c.Name == "strconst")
                        {
                            var strconst = c.ValueToString();
                            Console.WriteLine("strconst " + strconst);

                            var strconst2 = ConstantDefinition.EscapeString(strconst);
                            var strconst3 = ConstantDefinition.UnescapeString(strconst2);

                            if (strconst3 != strconst)
                            {
                                throw new Exception("");
                            }
                        }

                        if (c.Name == "int32const")
                        {
                            Console.WriteLine("int32const: " + c.ValueToScalar <int>());
                        }

                        if (c.Name == "int32const_array")
                        {
                            var a = c.ValueToArray <int>();
                            Console.WriteLine("int32const_array: " + a.Length);
                        }

                        if (c.Name == "doubleconst_array")
                        {
                            var a = c.ValueToArray <double>();
                            Console.WriteLine("doubleconst_array: " + a.Length);
                        }

                        if (c.Name == "structconst")
                        {
                            var s = c.ValueToStructFields();
                            foreach (var f in s)
                            {
                                Console.Write(f.Name + ": " + f.ConstantRefName + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                }

                ServiceDefinition def1;
                if (defs.TryGetValue("com.robotraconteur.testing.TestService1", out def1))
                {
                    var entry = def1.Objects["testroot"];

                    var p1 = (PropertyDefinition)entry.Members["d1"];
                    if (p1.Direction != MemberDefinition_Direction.both)
                    {
                        throw new Exception();
                    }

                    var p2 = (PipeDefinition)entry.Members["p1"];
                    if (p2.Direction != MemberDefinition_Direction.both)
                    {
                        throw new Exception();
                    }
                    if (p2.IsUnreliable)
                    {
                        throw new Exception();
                    }

                    var w1 = (WireDefinition)entry.Members["w1"];
                    if (w1.Direction != MemberDefinition_Direction.both)
                    {
                        throw new Exception();
                    }

                    var m1 = (MemoryDefinition)entry.Members["m1"];
                    if (m1.Direction != MemberDefinition_Direction.both)
                    {
                        throw new Exception();
                    }
                }

                ServiceDefinition def2;
                if (defs.TryGetValue("com.robotraconteur.testing.TestService3", out def2))
                {
                    var entry = def2.Objects["testroot3"];

                    var p1 = (PropertyDefinition)entry.Members["readme"];
                    if (p1.Direction != MemberDefinition_Direction.readonly_)
                    {
                        throw new Exception();
                    }

                    var p2 = (PropertyDefinition)entry.Members["writeme"];
                    if (p2.Direction != MemberDefinition_Direction.writeonly)
                    {
                        throw new Exception();
                    }

                    var p3 = (PipeDefinition)entry.Members["unreliable1"];
                    if (p3.Direction != MemberDefinition_Direction.readonly_)
                    {
                        throw new Exception();
                    }
                    if (!p3.IsUnreliable)
                    {
                        throw new Exception();
                    }

                    var p4 = (PipeDefinition)entry.Members["unreliable2"];
                    if (p4.Direction != MemberDefinition_Direction.both)
                    {
                        throw new Exception();
                    }
                    if (!p4.IsUnreliable)
                    {
                        throw new Exception();
                    }

                    var w1 = (WireDefinition)entry.Members["peekwire"];
                    if (w1.Direction != MemberDefinition_Direction.readonly_)
                    {
                        throw new Exception();
                    }

                    var w2 = (WireDefinition)entry.Members["pokewire"];
                    if (w2.Direction != MemberDefinition_Direction.writeonly)
                    {
                        throw new Exception();
                    }

                    var m1 = (MemoryDefinition)entry.Members["readmem"];
                    if (m1.Direction != MemberDefinition_Direction.readonly_)
                    {
                        throw new Exception();
                    }

                    Console.WriteLine("Found it");
                }

                return;
            }
            else
            if (command == "loopback2")
            {
                var t = new TcpTransport();
                t.StartServer(22332);
                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());

                var s1 = new RobotRaconteurTestServiceSupport2();
                s1.RegisterServices(t);

                ServiceTestClient2 s = new ServiceTestClient2();
                s.RunFullTest("rr+tcp://localhost:22332/?service=RobotRaconteurTestService2")
                .GetAwaiter().GetResult();

                RobotRaconteurNode.s.Shutdown();
            }
            else
            if (command == "client2")
            {
                var url   = args[1];
                int count = 1;
                if (args.Length >= 3)
                {
                    count = Int32.Parse(args[2]);
                }

                var t = new TcpTransport();

                RobotRaconteurNode.s.RegisterTransport(t);


                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());

                for (int i = 0; i < count; i++)
                {
                    ServiceTestClient2 s = new ServiceTestClient2();
                    s.RunFullTest(url).GetAwaiter().GetResult();
                }

                RobotRaconteurNode.s.Shutdown();

                Console.WriteLine("Test complete, no errors detected");
            }
            else
            {
                throw new Exception("Unknown command");
            }
        }
コード例 #5
0
 public void Connect(string lobbyServerHost, int lobbyServerPort, string bindingIPoverride = null)
 {
     transport = new TcpTransport(lobbyServerHost, lobbyServerPort, bindingIPoverride);
     transport.ConnectAndRun(OnLineReceived, OnConnected, OnConnectionClosed);
 }
コード例 #6
0
 public TcpTransportFacts(ITestOutputHelper output)
 {
     this.output = output;
     this.local  = new TcpTransport(output.LoggerFor <TcpTransport>("local"));
 }
コード例 #7
0
        private void AcceptSocketCallback(IAsyncResult ar)
        {
            if (_serverState != 2)
            {
                return;
            }

            var server = (Socket)ar.AsyncState;

            Socket     client     = null;
            IPEndPoint ipEndPoint = null;

            try
            {
                client     = server.EndAccept(ar);
                ipEndPoint = (IPEndPoint)client.RemoteEndPoint;
            }
            catch (Exception ex)
            {
                LogAgent.Warn("RpcServer AcceptSocketCallback failed,EndAccept error", ex);
            }

            try
            {
                server.BeginAccept(AcceptSocketCallback, server);
            }
            catch (Exception ex)
            {
                Close();
                try
                {
                    if (client != null)
                    {
                        client.Close();
                    }
                }
                catch
                {
                }

                LogAgent.Warn("close network in RpcServer AcceptSocketCallback,BeginAccept error", ex);
                return;
            }

            if (ipEndPoint == null)
            {
                try
                {
                    if (client != null)
                    {
                        client.Close();
                    }
                }
                catch
                {
                }

                LogAgent.Warn("close network in RpcServer AcceptSocketCallback,client RemoteEndPoint is null");
                return;
            }

            var tcpTransport = new TcpTransport(this, ipEndPoint.Address, ipEndPoint.Port);

            try
            {
                tcpTransport.Init(client);
            }
            catch (Exception ex)
            {
                try
                {
                    tcpTransport.Close();
                }
                catch
                {
                }

                LogAgent.Warn("close network in RpcServer AcceptSocketCallback,tcpTransport Init error", ex);
                return;
            }

            _clientTransportDictionary[tcpTransport.Key] = tcpTransport;
        }
コード例 #8
0
 public void Dispose()
 {
     _recievingTokenSource?.Dispose();
     TcpTransport?.Dispose();
 }
コード例 #9
0
        private static async void ProcessReceive(TcpTransport serverTransport, FrameData frameData,
                                                 IMessageProcessor messageProcessor)
        {
            byte[] responseExtention = null;
            byte[] responseContent   = null;
            byte   responseCode      = 0;

            try
            {
                ResponseBase response = null;

                if (frameData.TitleBytes == null || frameData.TitleBytes.Length == 0)
                {
                    response = new ErrorResponse((byte)ResponseCode.SERVICE_TITLE_ERROR);
                }

                if (messageProcessor == null)
                {
                    response = new ErrorResponse((byte)ResponseCode.SERVICE_NOT_FOUND);
                }

                if (response == null)
                {
                    if (NetworkSettings.ServerProcessMode == CommunicationMode.Sync)
                    {
                        var responseTask = messageProcessor.Process(frameData);
                        responseTask.Wait();
                        response = responseTask.Result;
                    }
                    else
                    {
                        response = await messageProcessor.Process(frameData);
                    }
                }

                responseExtention = response.HeaderExtentionBytes ?? FrameFormat.EmptyBytes;
                responseContent   = response.ContentBytes ?? FrameFormat.EmptyBytes;
                responseCode      = (byte)response.Code;
            }
            catch
            {
                responseExtention = FrameFormat.EmptyBytes;
                responseContent   = FrameFormat.EmptyBytes;
                responseCode      = (byte)ResponseCode.SERVER_INTERNAL_ERROR;
            }

            try
            {
                var messageByteCount = FrameFormat.ComputeFrameByteCount(responseExtention, FrameFormat.EmptyBytes, responseContent);
                var sendBuffer       = serverTransport.SendBufferCache.Get(messageByteCount);

                FrameFormat.FillFrame(sendBuffer, responseExtention, FrameFormat.EmptyBytes, responseContent, responseCode, frameData.MessageId);

                //if (NetworkSettings.ServerTcpSendMode == TcpSendMode.Async)
                //{
                //    serverTransport.SendAsync(sendBuffer, messageByteCount);
                //}
                //else
                //{
                serverTransport.Send(sendBuffer, messageByteCount);
                //}

                serverTransport.SendBufferCache.Cache(sendBuffer);
            }
            catch
            {
                serverTransport.Close();
            }
        }
コード例 #10
0
ファイル: Program.cs プロジェクト: CodeMakerInc/EppLib.NET
        private void CiraTecnicalTest()
        {
            var tcpTransport = new TcpTransport("epp.test.cira.ca", 700, new X509Certificate("cert.pfx", "password"), true);

            var service = new Service(tcpTransport);

            //1. SSL connection establishment
            Console.WriteLine("TEST: 1");
            service.Connect();

            //2. EPP <login> command with your ‘a’ account
            Console.WriteLine("TEST: 2");
            var logingCmd = new Login("username", "password");

            var response = service.Execute(logingCmd);

            PrintResponse(response);

            //3. Using the correct EPP call, get the latest CIRA Registrant Agreement
            Console.WriteLine("TEST: 3");
            var agreementCmd = new GetAgreement();

            var getAgreementResponse = service.Execute(agreementCmd);

            var agreementVersion = getAgreementResponse.AgreementVersion;
            var agreementText = getAgreementResponse.Agreement;
            var agreementLanguage = getAgreementResponse.Language;

            PrintResponse(response);
            Console.WriteLine("Agreement Version:{0}", agreementVersion);
            /*
             4. Create a Registrant contact using: 
                -the same ID as your Registrar Number prefixed with the word ‘rant’ (e.g. rant75)
                -CPR category CCT
                -Full postal information, phone number, fax number, and email address
                -Agreed to latest CIRA Registrant Agreement version
             */
            Console.WriteLine("TEST: 4");
            var registrantContact = new Contact("rant" + registrarNumber,
                "Registrant Step Four", "Example Inc.",
                "Toronto", "301 La Fanfan Ave.", "ON", "M5V 3T1", "CA",
                "*****@*****.**",
                new Telephone { Value = "+1.6478913606", Extension = "333" },
                new Telephone { Value = "+1.6478913607" });


            var registrantContactCmd = new CiraContactCreate(registrantContact);

            registrantContactCmd.CprCategory = CiraCprCategories.CCT;
            registrantContactCmd.AgreementVersion = agreementVersion;
            registrantContactCmd.AggreementValue = "Y";
            registrantContactCmd.Language = "en";
            registrantContactCmd.OriginatingIpAddress = "127.0.0.1";
            registrantContactCmd.CreatedByResellerId = registrarNumber;

            var response1 = service.Execute(registrantContactCmd);

            PrintResponse(response1);

            /*
             5. Create an administrative contact
             -the same ID as your Registrar Number prefixed with the word ‘admin’ (e.g. admin75)
             -using all mandatory elements required for a Canadian administrative contact
             -omit CPR category (he have not agreed to the CIRA agreement)
            */
            Console.WriteLine("TEST: 5");
            var adminContact = new Contact("admin" + registrarNumber,
               "Administrative Step Five", "Example Inc.",
               "Toronto", "301 La Fanfan Ave.", "ON", "M5V 3T1", "CA",
               "*****@*****.**",
               new Telephone { Value = "+1.6478913606", Extension = "333" },
               new Telephone { Value = "+1.6478913607" });

            var adminContactCmd = new CiraContactCreate(adminContact);

            adminContactCmd.CprCategory = null;
            adminContactCmd.AgreementVersion = null;
            adminContactCmd.AggreementValue = null;
            adminContactCmd.Language = "en";
            adminContactCmd.OriginatingIpAddress = "127.0.0.1";
            adminContactCmd.CreatedByResellerId = registrarNumber;

            const string adminContactId = "admin" + registrarNumber;

            var loginresponse = service.Execute(adminContactCmd);

            PrintResponse(loginresponse);

            //6. Get information for the contact created in operation #4
            Console.WriteLine("TEST: 6");
            var getContactInfo = new ContactInfo(registrantContact.Id);

            var contactInfoResponse = service.Execute(getContactInfo);

            PrintResponse(contactInfoResponse);

            //7. Do a Registrant transfer for domain <registrar number>-3.ca to the Registrant created in operation #4
            Console.WriteLine("TEST: 7");

            //NOTE: registrant transfers are domain updates

            var registrantTransferCmd = new DomainUpdate(registrarNumber + "-3.ca");
            //var registrantTransferCmd = new DomainUpdate("3406310-4.ca");

            var domainChange = new DomainChange { RegistrantContactId = registrantContact.Id };

            registrantTransferCmd.DomainChange = domainChange;

            var response2 = service.Execute(registrantTransferCmd);

            PrintResponse(response2);

            //8. Update the contact created in operation #4 to no longer have a fax number
            Console.WriteLine("TEST: 8");
            var contactUpdateCmd = new ContactUpdate(registrantContact.Id);

            var contactChange = new ContactChange(registrantContact);

            contactChange.Fax = new Telephone("", "");

            contactUpdateCmd.ContactChange = contactChange;

            //NOTE:the docs say that the cpr category is update for domain contact
            //but they show a sample of a contact update request that does not include the extension
            //NOTE: Organization cannot be entered when CPR Category indicates a non individual - see documentation
            contactUpdateCmd.Extensions.Add(new CiraContactUpdateExtension { CprCategory = CiraCprCategories.CCT });

            var response3 = service.Execute(contactUpdateCmd);

            PrintResponse(response3);

            //8.1 Get contact info and check the fax number dissapeared
            var contactInfoCmd1 = new ContactInfo(registrantContact.Id);

            var contactInfoResponse1 = service.Execute(contactInfoCmd1);

            PrintResponse(contactInfoResponse1);

            //9. Do a domain:check on <registrar number>a.ca
            Console.WriteLine("TEST: 9");
            const string domainStep10 = registrarNumber + "a.ca";

            var domainCheckCmd = new DomainCheck(domainStep10);

            var response4 = service.Execute(domainCheckCmd);

            PrintResponse(response4);

            /*
             10. Create a domain using:
             -a domain name set to <registrar number>a.ca
             -a Registrant who is a Permanent Resident
             -the same administrative contact as the Registrant
             -0 hosts
             -the minimum registration period
            */
            Console.WriteLine("TEST: 10");
            //NOTE: CPR categories CCT and RES where merged into CCR

            //BUG: the registrant needs to be a Permanent Resident
            //TODO: create a new contact that is a permanent resident
            //10.1 
            var registrantContact10 = new Contact("ten" + registrarNumber,
               "Registrant Step Ten", "Example Inc.",
               "Toronto", "301 La Fanfan Ave.", "ON", "M5V 3T1", "CA",
               "*****@*****.**",
               new Telephone { Value = "+1.6478913606", Extension = "333" },
               new Telephone { Value = "+1.6478913607" });


            registrantContactCmd = new CiraContactCreate(registrantContact10);
            registrantContactCmd.CprCategory = CiraCprCategories.RES;
            registrantContactCmd.AgreementVersion = agreementVersion;
            registrantContactCmd.AggreementValue = "Y";
            registrantContactCmd.OriginatingIpAddress = "127.0.0.1";
            registrantContactCmd.Language = "en";
            registrantContactCmd.CreatedByResellerId = registrarNumber;

            //ContactCreate.MakeContact(registrantContact10,  agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var response5 = service.Execute(registrantContactCmd);

            PrintResponse(response5);

            //10.2
            var domainCreateCmd = new DomainCreate(domainStep10, registrantContact10.Id);

            domainCreateCmd.DomainContacts.Add(new DomainContact(registrantContact10.Id, "admin"));

            //NOTE: password is compulsory
            domainCreateCmd.Password = "******";

            var response6 = service.Execute(domainCreateCmd);

            PrintResponse(response6);

            /*11. Do a host:check on hosts <registrar number>.example.com and <registrar number>.example.net*/
            Console.WriteLine("TEST: 11");
            var hostCheckCmd = new HostCheck(new List<string> { registrarNumber + ".example.com", registrarNumber + ".example.net" });

            var response7 = service.Execute(hostCheckCmd);

            PrintResponse(response7);

            /*
             12. Create 2 hosts with the following name formats:
             <registrar number>.example.com
             <registrar number>.example.net
             */
            Console.WriteLine("TEST: 12");
            //CIRA only creates a host at a time

            //12.1
            var hostCreateCmd = new HostCreate(new Host(registrarNumber + ".example.com"));

            var response8 = service.Execute(hostCreateCmd);

            PrintResponse(response8);

            //12.2
            hostCreateCmd = new HostCreate(new Host(registrarNumber + ".example.net"));

            var response9 = service.Execute(hostCreateCmd);

            PrintResponse(response9);

            /*
             13. Create a domain using:
             -a domain name set to <registrar number>b.ca
             -the pre-populated contact id <registrar number> as the administrative contact
             -a Registrant who is a Corporation
             -2 hosts created in operation #12 <- the nameservers
             -a maximum registration period (10 years)
             */
            Console.WriteLine("TEST: 13");
            //13.1 - Create a corporation

            //If it is a corporation you can not provide company name
            var corporation = new Contact("corp" + registrarNumber, "Acme Corp.", null, "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createCorporationContactCmd = ContactCreate.MakeContact(corporation, CiraCprCategories.CCO, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createCorporationContactCmd = new CiraContactCreate(corporation);
            createCorporationContactCmd.CprCategory = CiraCprCategories.CCO;
            createCorporationContactCmd.AgreementVersion = agreementVersion;
            createCorporationContactCmd.AggreementValue = "Y";
            createCorporationContactCmd.OriginatingIpAddress = "127.0.0.1";
            createCorporationContactCmd.Language = "en";
            createCorporationContactCmd.CreatedByResellerId = registrarNumber;

            var response10 = service.Execute(createCorporationContactCmd);

            PrintResponse(response10);

            /* var domainUpdateCmd = new DomainUpdate(registrarNumber + "-10.ca");

             domainUpdateCmd.ToRemove.Status.Add(new Status("", "serverDeleteProhibited"));

             response = service.Execute(domainUpdateCmd);

             PrintResponse(response);*/

            //13.2 - Create the domain

            //var createDomainCmd = new DomainCreate(registrarNumber + "b.ca", corporation.Id);
            var createDomainCmd = new DomainCreate(registrarNumber + "b.ca", "corp" + registrarNumber);

            createDomainCmd.Period = new DomainPeriod(10, "y");

            //NOTE:The administrative or technical contact must be an Individual
            //BUG: admin contact needs be the prepopulated 3406310
            createDomainCmd.DomainContacts.Add(new DomainContact(registrarNumber, "admin"));

            //NOTE:Create the host on the Registry system before you assign it to a domain
            createDomainCmd.NameServers.Add(registrarNumber + ".example.com");
            createDomainCmd.NameServers.Add(registrarNumber + ".example.net");

            createDomainCmd.Password = "******";

            var response11 = service.Execute(createDomainCmd);

            PrintResponse(response11);

            /*
             14. Create a domain using: 
             - a domain name set to <registrar number>c.ca
             - a Registrant who is an Association
             - the administrative contact set to the contact created in operation #5
             - maximum number of technical contacts assigned to it (max is 3)
            - 0 hosts
            - a 2-year term
             */
            Console.WriteLine("TEST: 14");
            var association = new Contact("assoc" + registrarNumber, "Beer Producers Association", null, "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createAssociationContactCmd = ContactCreate.MakeContact(association, CiraCprCategories.ASS, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createAssociationContactCmd = new CiraContactCreate(association);
            createAssociationContactCmd.CprCategory = CiraCprCategories.ASS;
            createAssociationContactCmd.AgreementVersion = agreementVersion;
            createAssociationContactCmd.AggreementValue = "Y";
            createAssociationContactCmd.OriginatingIpAddress = "127.0.0.1";
            createAssociationContactCmd.Language = "en";
            createAssociationContactCmd.CreatedByResellerId = registrarNumber;

            var response12 = service.Execute(createAssociationContactCmd);

            PrintResponse(response12);

            //tech1
            var tech1 = new Contact("tech1" + registrarNumber, "Technician #1", "Beer Producers Association", "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createTech1ContactCmd = ContactCreate.MakeContact(tech1, CiraCprCategories.CCT, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createTech1ContactCmd = new CiraContactCreate(tech1);
            createTech1ContactCmd.CprCategory = CiraCprCategories.CCT;
            createTech1ContactCmd.AgreementVersion = agreementVersion;
            createTech1ContactCmd.AggreementValue = "Y";
            createTech1ContactCmd.OriginatingIpAddress = "127.0.0.1";
            createTech1ContactCmd.Language = "en";
            createTech1ContactCmd.CreatedByResellerId = registrarNumber;

            var response13 = service.Execute(createTech1ContactCmd);

            PrintResponse(response13);

            //tech2
            var tech2 = new Contact("tech2" + registrarNumber, "Technician #2", "Beer Producers Association", "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createTech2ContactCmd = ContactCreate.MakeContact(tech2, CiraCprCategories.CCT, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createTech2ContactCmd = new CiraContactCreate(tech2);
            createTech2ContactCmd.CprCategory = CiraCprCategories.CCT;
            createTech2ContactCmd.AgreementVersion = agreementVersion;
            createTech2ContactCmd.AggreementValue = "Y";
            createTech2ContactCmd.OriginatingIpAddress = "127.0.0.1";
            createTech2ContactCmd.Language = "en";
            createTech2ContactCmd.CreatedByResellerId = registrarNumber;

            var response14 = service.Execute(createTech2ContactCmd);

            PrintResponse(response14);

            //tech1
            var tech3 = new Contact("tech3" + registrarNumber, "Technician #3", "Beer Producers Association", "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createTech3ContactCmd = ContactCreate.MakeContact(tech3, CiraCprCategories.CCT, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createTech3ContactCmd = new CiraContactCreate(tech3);
            createTech3ContactCmd.CprCategory = CiraCprCategories.CCT;
            createTech3ContactCmd.AgreementVersion = agreementVersion;
            createTech3ContactCmd.AggreementValue = "Y";
            createTech3ContactCmd.OriginatingIpAddress = "127.0.0.1";
            createTech3ContactCmd.Language = "en";
            createTech3ContactCmd.CreatedByResellerId = registrarNumber;


            var response15 = service.Execute(createTech3ContactCmd);

            PrintResponse(response15);

            const string step14domain = registrarNumber + "c.ca";

            createDomainCmd = new DomainCreate(step14domain, association.Id);

            createDomainCmd.Period = new DomainPeriod(2, "y");

            createDomainCmd.DomainContacts.Add(new DomainContact(adminContactId, "admin"));

            createDomainCmd.DomainContacts.Add(new DomainContact(tech1.Id, "tech"));
            createDomainCmd.DomainContacts.Add(new DomainContact(tech2.Id, "tech"));
            createDomainCmd.DomainContacts.Add(new DomainContact(tech3.Id, "tech"));

            createDomainCmd.Password = "******";

            var response16 = service.Execute(createDomainCmd);

            PrintResponse(response16);

            /*
             15. Do a host:check for a host which the dot-ca domain name is registered
            */
            Console.WriteLine("TEST: 15");
            hostCheckCmd = new HostCheck("any." + registrarNumber + "b.ca");

            var response17 = service.Execute(hostCheckCmd);

            PrintResponse(response17);

            /*
             16. Create 2 subordinate hosts for the domain created in operation #14:
              - with format ns1.<domain> and ns2.<domain>
              - with IPv4 address information
            */
            Console.WriteLine("TEST: 16");
            var host1 = new Host("ns1." + step14domain);
            host1.Addresses.Add(new HostAddress("127.0.0.1", "v4"));
            var host2 = new Host("ns2." + step14domain);
            host2.Addresses.Add(new HostAddress("127.0.0.2", "v4"));

            var createHostCmd = new HostCreate(host1);

            var response18 = service.Execute(createHostCmd);

            PrintResponse(response18);

            createHostCmd = new HostCreate(host2);

            response18 = service.Execute(createHostCmd);

            PrintResponse(response18);

            /*
             17. Using the correct EPP call, get information on a host
            */
            Console.WriteLine("TEST: 17");
            var hostInfoCmd = new HostInfo(host1.HostName);

            var response19 = service.Execute(hostInfoCmd);

            PrintResponse(response19);

            /*18. Update the domain created in operation #14 such that the hosts created in operation #16 are delegated to the domain explicitly*/
            Console.WriteLine("TEST: 18");
            var domainUpdateCmd = new DomainUpdate(step14domain);

            //NOTE: Nameservers need different IP addresses
            domainUpdateCmd.ToAdd.NameServers = new List<string> { host1.HostName, host2.HostName };

            var response20 = service.Execute(domainUpdateCmd);

            PrintResponse(response20);

            //19. Update host ns1.<domain> created in operation #16 such that an IPv6 address is added
            Console.WriteLine("TEST: 19");
            var hostUpdateCmd = new HostUpdate(host1.HostName);

            var eppHostUpdateAddRemove = new EppHostUpdateAddRemove();

            eppHostUpdateAddRemove.Adresses = new List<HostAddress> { new HostAddress("1080:0:0:0:8:800:2004:17A", "v6") };

            hostUpdateCmd.ToAdd = eppHostUpdateAddRemove;

            var response21 = service.Execute(hostUpdateCmd);
            PrintResponse(response21);

            //20. Update host ns1.<domain> created in operation #16 such that an IPv4 address is removed
            Console.WriteLine("TEST: 20");
            hostUpdateCmd = new HostUpdate(host1.HostName);

            eppHostUpdateAddRemove = new EppHostUpdateAddRemove();

            eppHostUpdateAddRemove.Adresses = new List<HostAddress> { new HostAddress("127.0.0.1", "v4") };

            hostUpdateCmd.ToRemove = eppHostUpdateAddRemove;

            var response22 = service.Execute(hostUpdateCmd);
            PrintResponse(response22);

            //21. Update the status of ns1.<domain> such that it can no longer be updated
            Console.WriteLine("TEST: 21");
            hostUpdateCmd = new HostUpdate(host1.HostName);

            eppHostUpdateAddRemove = new EppHostUpdateAddRemove();

            eppHostUpdateAddRemove.Status = new List<Status> { new Status("", "clientUpdateProhibited") };

            hostUpdateCmd.ToAdd = eppHostUpdateAddRemove;

            response22 = service.Execute(hostUpdateCmd);
            PrintResponse(response22);

            //22. Using the correct EPP call, get information on a domain name without using WHOIS
            Console.WriteLine("TEST: 22");

            //const string domainStep10 = registrarNumber + "a.ca";

            var domainInfoCmd = new DomainInfo(domainStep10);
            var domainInfo = service.Execute(domainInfoCmd);

            PrintResponse(domainInfo);

            //23. Renew the domain created in operation #10 such that the domain’s total length of term becomes 3 years
            Console.WriteLine("TEST: 23");
            var renewCmd = new DomainRenew(domainStep10, domainInfo.Domain.ExDate, new DomainPeriod(2, "y"));

            var response23 = service.Execute(renewCmd);
            PrintResponse(response23);

            /*
             24. Do a Registrar transfer:
             - Domain name <registrar number>X2-1.ca, from your ‘e’ Registrar account 
             - Have the system auto-generate the contacts so that their information is identical to the contacts in the ‘e’ account
             */
            Console.WriteLine("TEST: 24");

            var transferCmd = new CiraDomainTransfer(registrarNumber + "X2-1.ca", null, null, new List<string>());
            //var transferCmd = new DomainTransfer("3406310x2-5.ca", null, null, new List<string>());

            transferCmd.Password = "******";
            var response24 = service.Execute(transferCmd);

            PrintResponse(response24);

            /*25. Do a Registrar transfer:
              - Domain name, <registrar number>X2-2.ca, from your ‘e’ Registrar account
              - Specify the same Registrant, administrative, and technical contacts used for the domain created in operation #14
             */
            Console.WriteLine("TEST: 25");

            //BUG: did not use all the technical contacts.

            transferCmd = new CiraDomainTransfer(registrarNumber + "X2-2.ca", association.Id, adminContactId, new List<string> { tech1.Id, tech2.Id, tech3.Id });
            //transferCmd = new DomainTransfer("3406310x2-10.ca", association.Id, adminContactId, new List<string> { tech1.Id, tech2.Id, tech3.Id });

            //Password is mandatory
            //TODO: find it in the control panel
            transferCmd.Password = "******";
            response24 = service.Execute(transferCmd);

            PrintResponse(response24);

            /*
             26. Do an update to the domain created in operation #14 to change the administrative contact to the pre-populated contact whose id is of format <registrar number>
             */
            Console.WriteLine("TEST: 26");
            domainUpdateCmd = new DomainUpdate(step14domain);

            //remove the previous admin
            domainUpdateCmd.ToRemove.DomainContacts.Add(new DomainContact(adminContactId, "admin"));

            domainUpdateCmd.ToAdd.DomainContacts.Add(new DomainContact(registrarNumber, "admin"));

            var response25 = service.Execute(domainUpdateCmd);

            PrintResponse(response25);

            /*27. Do an update to the status of the domain created in operation #14 such that it cannot be deleted*/
            Console.WriteLine("TEST: 27");
            domainUpdateCmd = new DomainUpdate(step14domain);

            domainUpdateCmd.ToAdd.Status.Add(new Status("", "clientDeleteProhibited"));

            var response26 = service.Execute(domainUpdateCmd);

            PrintResponse(response26);

            /*28. Do an update to the email address of the pre-populated contact whose id is of format <registrar number> to "*****@*****.**" */
            Console.WriteLine("TEST: 28");
            //28.1 get the contact
            //var contactInfoCmd = new ContactInfo("rant" + registrarNumber);
            var contactInfoCmd = new ContactInfo(registrarNumber);

            contactInfoResponse = service.Execute(contactInfoCmd);

            PrintResponse(contactInfoResponse);

            if (contactInfoResponse.Contact != null)
            {

                //28.2 update the email address

                //ASSERT: contactInfoResponse.Contact != null
                contactUpdateCmd = new ContactUpdate(contactInfoResponse.Contact.Id);

                var contactchage = new ContactChange(contactInfoResponse.Contact);

                contactchage.Email = "*****@*****.**";

                contactUpdateCmd.ContactChange = contactchage;

                //the extensions are compulsory
                contactUpdateCmd.Extensions.Add(new CiraContactUpdateExtension { CprCategory = contactInfoResponse.Contact.CprCategory });

                var response27 = service.Execute(contactUpdateCmd);

                PrintResponse(response27);


            }
            else
            {
                Console.WriteLine("Error: contact does not exist?");
            }


            /*
                 29. Do an update to the privacy status for Registrant contact created in operation #4 to now show full detail
            */
            Console.WriteLine("TEST: 29");
            contactUpdateCmd = new ContactUpdate("rant" + registrarNumber);

            //Invalid WHOIS display setting - valid values are PRIVATE or FULL
            contactUpdateCmd.Extensions.Add(new CiraContactUpdateExtension { WhoisDisplaySetting = "FULL" });

            var response28 = service.Execute(contactUpdateCmd);

            PrintResponse(response28);


            /*30. Delete the domain <registrar number>-10.ca*/
            Console.WriteLine("TEST: 30");
            //NOTE:check this domain status

            var deleteDomainCmd = new DomainDelete(registrarNumber + "-10.ca");
            //var deleteDomainCmd = new DomainDelete(registrarNumber + "-9.ca");

            var response29 = service.Execute(deleteDomainCmd);
            PrintResponse(response29);

            /*31. EPP <logout> command*/
            Console.WriteLine("TEST:31");
            var logOutCmd = new Logout();

            service.Execute(logOutCmd);

            /*32. Disconnect SSL connection*/
            Console.WriteLine("TEST: 32");
            service.Disconnect();

            /*33. SSL connection establishment*/
            Console.WriteLine("TEST: 33");
            service.Connect();

            /*34. EPP <login> command with your ‘e’ account*/
            Console.WriteLine("TEST: 34");
            logingCmd = new Login("username", "password");

            response = service.Execute(logingCmd);

            PrintResponse(response);

            /*35. Acknowledge all poll messages*/
            Console.WriteLine("TEST: 35");
            var thereAreMessages = true;

            while (thereAreMessages)
            {
                //request
                var poll = new Poll { Type = PollType.Request };

                var pollResponse = (PollResponse)service.Execute(poll);

                PrintResponse(pollResponse);

                if (!String.IsNullOrEmpty(pollResponse.Id))
                {
                    //acknowledge
                    poll = new Poll { Type = PollType.Acknowledge, MessageId = pollResponse.Id };

                    pollResponse = (PollResponse)service.Execute(poll);

                    PrintResponse(pollResponse);
                }

                Console.WriteLine("Messages left in the queue:" + pollResponse.Count);

                thereAreMessages = pollResponse.Count != 0;
            }

            /*36. EPP <logout> command*/
            Console.WriteLine("TEST: 36");
            logOutCmd = new Logout();

            service.Execute(logOutCmd);


        }
コード例 #11
0
        public RobotRaconteurNodeSetup(RobotRaconteurNode node, ServiceFactory[] service_types, bool scan_assembly_types, string nodename, ushort tcp_port, RobotRaconteurNodeSetupFlags flags)
        {
            Node = node;

            if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableLocalTransport))
            {
                LocalTransport = new LocalTransport(node);
                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.LocalTransportStartServer))
                {
                    LocalTransport.StartServerAsNodeName(nodename);
                }
                else if (flags.HasFlag(RobotRaconteurNodeSetupFlags.LocalTransportStartClient) && !string.IsNullOrEmpty(nodename))
                {
                    LocalTransport.StartClientAsNodeName(nodename);
                }

                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableNodeDiscoveryListening))
                {
                    LocalTransport.EnableNodeDiscoveryListening();
                }

                node.RegisterTransport(LocalTransport);
            }

            if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableTcpTransport))
            {
                TcpTransport = new TcpTransport(node);
                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.TcpTransportStartServer))
                {
                    TcpTransport.StartServer(tcp_port);
                }

                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableNodeDiscoveryListening))
                {
                    TcpTransport.EnableNodeDiscoveryListening();
                }

                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableNodeAnnounce))
                {
                    TcpTransport.EnableNodeAnnounce();
                }

                node.RegisterTransport(TcpTransport);
            }

            if (service_types != null)
            {
                foreach (var t in service_types)
                {
                    node.RegisterServiceType(t);
                }
            }

            if (scan_assembly_types)
            {
                try
                {
                    var scanned_types = ScanAssembliesForServiceTypes();
                    foreach (var t in scanned_types)
                    {
                        node.RegisterServiceType(t);
                    }
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("warning: assembly scanning failed: " + e.Message);
                }
            }
        }
コード例 #12
0
        private void CiraTecnicalTest()
        {
            var tcpTransport = new TcpTransport("epp.test.cira.ca", 700, new X509Certificate("cert.pfx", "password"), true);

            var service = new Service(tcpTransport);

            //1. SSL connection establishment
            Console.WriteLine("TEST: 1");
            service.Connect();

            //2. EPP <login> command with your ‘a’ account
            Console.WriteLine("TEST: 2");
            var logingCmd = new Login("username", "password");

            var response = service.Execute(logingCmd);

            PrintResponse(response);

            //3. Using the correct EPP call, get the latest CIRA Registrant Agreement
            Console.WriteLine("TEST: 3");
            var agreementCmd = new GetAgreement();

            var getAgreementResponse = service.Execute(agreementCmd);

            var agreementVersion  = getAgreementResponse.AgreementVersion;
            var agreementText     = getAgreementResponse.Agreement;
            var agreementLanguage = getAgreementResponse.Language;

            PrintResponse(response);
            Console.WriteLine("Agreement Version:{0}", agreementVersion);

            /*
             * 4. Create a Registrant contact using:
             *  -the same ID as your Registrar Number prefixed with the word ‘rant’ (e.g. rant75)
             *  -CPR category CCT
             *  -Full postal information, phone number, fax number, and email address
             *  -Agreed to latest CIRA Registrant Agreement version
             */
            Console.WriteLine("TEST: 4");
            var registrantContact = new Contact("rant" + registrarNumber,
                                                "Registrant Step Four", "Example Inc.",
                                                "Toronto", "301 La Fanfan Ave.", "ON", "M5V 3T1", "CA",
                                                "*****@*****.**",
                                                new Telephone {
                Value = "+1.6478913606", Extension = "333"
            },
                                                new Telephone {
                Value = "+1.6478913607"
            });


            var registrantContactCmd = new CiraContactCreate(registrantContact);

            registrantContactCmd.CprCategory          = CiraCprCategories.CCT;
            registrantContactCmd.AgreementVersion     = agreementVersion;
            registrantContactCmd.AggreementValue      = "Y";
            registrantContactCmd.Language             = "en";
            registrantContactCmd.OriginatingIpAddress = "127.0.0.1";
            registrantContactCmd.CreatedByResellerId  = registrarNumber;

            var response1 = service.Execute(registrantContactCmd);

            PrintResponse(response1);

            /*
             * 5. Create an administrative contact
             * -the same ID as your Registrar Number prefixed with the word ‘admin’ (e.g. admin75)
             * -using all mandatory elements required for a Canadian administrative contact
             * -omit CPR category (he have not agreed to the CIRA agreement)
             */
            Console.WriteLine("TEST: 5");
            var adminContact = new Contact("admin" + registrarNumber,
                                           "Administrative Step Five", "Example Inc.",
                                           "Toronto", "301 La Fanfan Ave.", "ON", "M5V 3T1", "CA",
                                           "*****@*****.**",
                                           new Telephone {
                Value = "+1.6478913606", Extension = "333"
            },
                                           new Telephone {
                Value = "+1.6478913607"
            });

            var adminContactCmd = new CiraContactCreate(adminContact);

            adminContactCmd.CprCategory          = null;
            adminContactCmd.AgreementVersion     = null;
            adminContactCmd.AggreementValue      = null;
            adminContactCmd.Language             = "en";
            adminContactCmd.OriginatingIpAddress = "127.0.0.1";
            adminContactCmd.CreatedByResellerId  = registrarNumber;

            const string adminContactId = "admin" + registrarNumber;

            var loginresponse = service.Execute(adminContactCmd);

            PrintResponse(loginresponse);

            //6. Get information for the contact created in operation #4
            Console.WriteLine("TEST: 6");
            var getContactInfo = new ContactInfo(registrantContact.Id);

            var contactInfoResponse = service.Execute(getContactInfo);

            PrintResponse(contactInfoResponse);

            //7. Do a Registrant transfer for domain <registrar number>-3.ca to the Registrant created in operation #4
            Console.WriteLine("TEST: 7");

            //NOTE: registrant transfers are domain updates

            var registrantTransferCmd = new DomainUpdate(registrarNumber + "-3.ca");
            //var registrantTransferCmd = new DomainUpdate("3406310-4.ca");

            var domainChange = new DomainChange {
                RegistrantContactId = registrantContact.Id
            };

            registrantTransferCmd.DomainChange = domainChange;

            var response2 = service.Execute(registrantTransferCmd);

            PrintResponse(response2);

            //8. Update the contact created in operation #4 to no longer have a fax number
            Console.WriteLine("TEST: 8");
            var contactUpdateCmd = new ContactUpdate(registrantContact.Id);

            var contactChange = new ContactChange(registrantContact);

            contactChange.Fax = new Telephone("", "");

            contactUpdateCmd.ContactChange = contactChange;

            //NOTE:the docs say that the cpr category is update for domain contact
            //but they show a sample of a contact update request that does not include the extension
            //NOTE: Organization cannot be entered when CPR Category indicates a non individual - see documentation
            contactUpdateCmd.Extensions.Add(new CiraContactUpdateExtension {
                CprCategory = CiraCprCategories.CCT
            });

            var response3 = service.Execute(contactUpdateCmd);

            PrintResponse(response3);

            //8.1 Get contact info and check the fax number dissapeared
            var contactInfoCmd1 = new ContactInfo(registrantContact.Id);

            var contactInfoResponse1 = service.Execute(contactInfoCmd1);

            PrintResponse(contactInfoResponse1);

            //9. Do a domain:check on <registrar number>a.ca
            Console.WriteLine("TEST: 9");
            const string domainStep10 = registrarNumber + "a.ca";

            var domainCheckCmd = new DomainCheck(domainStep10);

            var response4 = service.Execute(domainCheckCmd);

            PrintResponse(response4);

            /*
             * 10. Create a domain using:
             * -a domain name set to <registrar number>a.ca
             * -a Registrant who is a Permanent Resident
             * -the same administrative contact as the Registrant
             * -0 hosts
             * -the minimum registration period
             */
            Console.WriteLine("TEST: 10");
            //NOTE: CPR categories CCT and RES where merged into CCR

            //BUG: the registrant needs to be a Permanent Resident
            //TODO: create a new contact that is a permanent resident
            //10.1
            var registrantContact10 = new Contact("ten" + registrarNumber,
                                                  "Registrant Step Ten", "Example Inc.",
                                                  "Toronto", "301 La Fanfan Ave.", "ON", "M5V 3T1", "CA",
                                                  "*****@*****.**",
                                                  new Telephone {
                Value = "+1.6478913606", Extension = "333"
            },
                                                  new Telephone {
                Value = "+1.6478913607"
            });


            registrantContactCmd                      = new CiraContactCreate(registrantContact10);
            registrantContactCmd.CprCategory          = CiraCprCategories.RES;
            registrantContactCmd.AgreementVersion     = agreementVersion;
            registrantContactCmd.AggreementValue      = "Y";
            registrantContactCmd.OriginatingIpAddress = "127.0.0.1";
            registrantContactCmd.Language             = "en";
            registrantContactCmd.CreatedByResellerId  = registrarNumber;

            //ContactCreate.MakeContact(registrantContact10,  agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var response5 = service.Execute(registrantContactCmd);

            PrintResponse(response5);

            //10.2
            var domainCreateCmd = new DomainCreate(domainStep10, registrantContact10.Id);

            domainCreateCmd.DomainContacts.Add(new DomainContact(registrantContact10.Id, "admin"));

            //NOTE: password is compulsory
            domainCreateCmd.Password = "******";

            var response6 = service.Execute(domainCreateCmd);

            PrintResponse(response6);

            /*11. Do a host:check on hosts <registrar number>.example.com and <registrar number>.example.net*/
            Console.WriteLine("TEST: 11");
            var hostCheckCmd = new HostCheck(new List <string> {
                registrarNumber + ".example.com", registrarNumber + ".example.net"
            });

            var response7 = service.Execute(hostCheckCmd);

            PrintResponse(response7);

            /*
             * 12. Create 2 hosts with the following name formats:
             * <registrar number>.example.com
             * <registrar number>.example.net
             */
            Console.WriteLine("TEST: 12");
            //CIRA only creates a host at a time

            //12.1
            var hostCreateCmd = new HostCreate(new Host(registrarNumber + ".example.com"));

            var response8 = service.Execute(hostCreateCmd);

            PrintResponse(response8);

            //12.2
            hostCreateCmd = new HostCreate(new Host(registrarNumber + ".example.net"));

            var response9 = service.Execute(hostCreateCmd);

            PrintResponse(response9);

            /*
             * 13. Create a domain using:
             * -a domain name set to <registrar number>b.ca
             * -the pre-populated contact id <registrar number> as the administrative contact
             * -a Registrant who is a Corporation
             * -2 hosts created in operation #12 <- the nameservers
             * -a maximum registration period (10 years)
             */
            Console.WriteLine("TEST: 13");
            //13.1 - Create a corporation

            //If it is a corporation you can not provide company name
            var corporation = new Contact("corp" + registrarNumber, "Acme Corp.", null, "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createCorporationContactCmd = ContactCreate.MakeContact(corporation, CiraCprCategories.CCO, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createCorporationContactCmd = new CiraContactCreate(corporation);

            createCorporationContactCmd.CprCategory          = CiraCprCategories.CCO;
            createCorporationContactCmd.AgreementVersion     = agreementVersion;
            createCorporationContactCmd.AggreementValue      = "Y";
            createCorporationContactCmd.OriginatingIpAddress = "127.0.0.1";
            createCorporationContactCmd.Language             = "en";
            createCorporationContactCmd.CreatedByResellerId  = registrarNumber;

            var response10 = service.Execute(createCorporationContactCmd);

            PrintResponse(response10);

            /* var domainUpdateCmd = new DomainUpdate(registrarNumber + "-10.ca");
             *
             * domainUpdateCmd.ToRemove.Status.Add(new Status("", "serverDeleteProhibited"));
             *
             * response = service.Execute(domainUpdateCmd);
             *
             * PrintResponse(response);*/

            //13.2 - Create the domain

            //var createDomainCmd = new DomainCreate(registrarNumber + "b.ca", corporation.Id);
            var createDomainCmd = new DomainCreate(registrarNumber + "b.ca", "corp" + registrarNumber);

            createDomainCmd.Period = new DomainPeriod(10, "y");

            //NOTE:The administrative or technical contact must be an Individual
            //BUG: admin contact needs be the prepopulated 3406310
            createDomainCmd.DomainContacts.Add(new DomainContact(registrarNumber, "admin"));

            //NOTE:Create the host on the Registry system before you assign it to a domain
            createDomainCmd.NameServers.Add(registrarNumber + ".example.com");
            createDomainCmd.NameServers.Add(registrarNumber + ".example.net");

            createDomainCmd.Password = "******";

            var response11 = service.Execute(createDomainCmd);

            PrintResponse(response11);

            /*
             * 14. Create a domain using:
             * - a domain name set to <registrar number>c.ca
             * - a Registrant who is an Association
             * - the administrative contact set to the contact created in operation #5
             * - maximum number of technical contacts assigned to it (max is 3)
             * - 0 hosts
             * - a 2-year term
             */
            Console.WriteLine("TEST: 14");
            var association = new Contact("assoc" + registrarNumber, "Beer Producers Association", null, "Toronto",
                                          "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                          new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createAssociationContactCmd = ContactCreate.MakeContact(association, CiraCprCategories.ASS, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createAssociationContactCmd = new CiraContactCreate(association);

            createAssociationContactCmd.CprCategory          = CiraCprCategories.ASS;
            createAssociationContactCmd.AgreementVersion     = agreementVersion;
            createAssociationContactCmd.AggreementValue      = "Y";
            createAssociationContactCmd.OriginatingIpAddress = "127.0.0.1";
            createAssociationContactCmd.Language             = "en";
            createAssociationContactCmd.CreatedByResellerId  = registrarNumber;

            var response12 = service.Execute(createAssociationContactCmd);

            PrintResponse(response12);

            //tech1
            var tech1 = new Contact("tech1" + registrarNumber, "Technician #1", "Beer Producers Association", "Toronto",
                                    "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                    new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createTech1ContactCmd = ContactCreate.MakeContact(tech1, CiraCprCategories.CCT, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createTech1ContactCmd = new CiraContactCreate(tech1);

            createTech1ContactCmd.CprCategory          = CiraCprCategories.CCT;
            createTech1ContactCmd.AgreementVersion     = agreementVersion;
            createTech1ContactCmd.AggreementValue      = "Y";
            createTech1ContactCmd.OriginatingIpAddress = "127.0.0.1";
            createTech1ContactCmd.Language             = "en";
            createTech1ContactCmd.CreatedByResellerId  = registrarNumber;

            var response13 = service.Execute(createTech1ContactCmd);

            PrintResponse(response13);

            //tech2
            var tech2 = new Contact("tech2" + registrarNumber, "Technician #2", "Beer Producers Association", "Toronto",
                                    "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                    new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createTech2ContactCmd = ContactCreate.MakeContact(tech2, CiraCprCategories.CCT, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createTech2ContactCmd = new CiraContactCreate(tech2);

            createTech2ContactCmd.CprCategory          = CiraCprCategories.CCT;
            createTech2ContactCmd.AgreementVersion     = agreementVersion;
            createTech2ContactCmd.AggreementValue      = "Y";
            createTech2ContactCmd.OriginatingIpAddress = "127.0.0.1";
            createTech2ContactCmd.Language             = "en";
            createTech2ContactCmd.CreatedByResellerId  = registrarNumber;

            var response14 = service.Execute(createTech2ContactCmd);

            PrintResponse(response14);

            //tech1
            var tech3 = new Contact("tech3" + registrarNumber, "Technician #3", "Beer Producers Association", "Toronto",
                                    "some where 22", "ON", "M6G2L1", "CA", "*****@*****.**",
                                    new Telephone("+1.1234567890", null), new Telephone("+1.1234567890", null));

            //var createTech3ContactCmd = ContactCreate.MakeContact(tech3, CiraCprCategories.CCT, agreementVersion, "Y", "127.0.0.1", "en", registrarNumber);

            var createTech3ContactCmd = new CiraContactCreate(tech3);

            createTech3ContactCmd.CprCategory          = CiraCprCategories.CCT;
            createTech3ContactCmd.AgreementVersion     = agreementVersion;
            createTech3ContactCmd.AggreementValue      = "Y";
            createTech3ContactCmd.OriginatingIpAddress = "127.0.0.1";
            createTech3ContactCmd.Language             = "en";
            createTech3ContactCmd.CreatedByResellerId  = registrarNumber;


            var response15 = service.Execute(createTech3ContactCmd);

            PrintResponse(response15);

            const string step14domain = registrarNumber + "c.ca";

            createDomainCmd = new DomainCreate(step14domain, association.Id);

            createDomainCmd.Period = new DomainPeriod(2, "y");

            createDomainCmd.DomainContacts.Add(new DomainContact(adminContactId, "admin"));

            createDomainCmd.DomainContacts.Add(new DomainContact(tech1.Id, "tech"));
            createDomainCmd.DomainContacts.Add(new DomainContact(tech2.Id, "tech"));
            createDomainCmd.DomainContacts.Add(new DomainContact(tech3.Id, "tech"));

            createDomainCmd.Password = "******";

            var response16 = service.Execute(createDomainCmd);

            PrintResponse(response16);

            /*
             * 15. Do a host:check for a host which the dot-ca domain name is registered
             */
            Console.WriteLine("TEST: 15");
            hostCheckCmd = new HostCheck("any." + registrarNumber + "b.ca");

            var response17 = service.Execute(hostCheckCmd);

            PrintResponse(response17);

            /*
             * 16. Create 2 subordinate hosts for the domain created in operation #14:
             * - with format ns1.<domain> and ns2.<domain>
             * - with IPv4 address information
             */
            Console.WriteLine("TEST: 16");
            var host1 = new Host("ns1." + step14domain);

            host1.Addresses.Add(new HostAddress("127.0.0.1", "v4"));
            var host2 = new Host("ns2." + step14domain);

            host2.Addresses.Add(new HostAddress("127.0.0.2", "v4"));

            var createHostCmd = new HostCreate(host1);

            var response18 = service.Execute(createHostCmd);

            PrintResponse(response18);

            createHostCmd = new HostCreate(host2);

            response18 = service.Execute(createHostCmd);

            PrintResponse(response18);

            /*
             * 17. Using the correct EPP call, get information on a host
             */
            Console.WriteLine("TEST: 17");
            var hostInfoCmd = new HostInfo(host1.HostName);

            var response19 = service.Execute(hostInfoCmd);

            PrintResponse(response19);

            /*18. Update the domain created in operation #14 such that the hosts created in operation #16 are delegated to the domain explicitly*/
            Console.WriteLine("TEST: 18");
            var domainUpdateCmd = new DomainUpdate(step14domain);

            //NOTE: Nameservers need different IP addresses
            domainUpdateCmd.ToAdd.NameServers = new List <string> {
                host1.HostName, host2.HostName
            };

            var response20 = service.Execute(domainUpdateCmd);

            PrintResponse(response20);

            //19. Update host ns1.<domain> created in operation #16 such that an IPv6 address is added
            Console.WriteLine("TEST: 19");
            var hostUpdateCmd = new HostUpdate(host1.HostName);

            var eppHostUpdateAddRemove = new EppHostUpdateAddRemove();

            eppHostUpdateAddRemove.Adresses = new List <HostAddress> {
                new HostAddress("1080:0:0:0:8:800:2004:17A", "v6")
            };

            hostUpdateCmd.ToAdd = eppHostUpdateAddRemove;

            var response21 = service.Execute(hostUpdateCmd);

            PrintResponse(response21);

            //20. Update host ns1.<domain> created in operation #16 such that an IPv4 address is removed
            Console.WriteLine("TEST: 20");
            hostUpdateCmd = new HostUpdate(host1.HostName);

            eppHostUpdateAddRemove = new EppHostUpdateAddRemove();

            eppHostUpdateAddRemove.Adresses = new List <HostAddress> {
                new HostAddress("127.0.0.1", "v4")
            };

            hostUpdateCmd.ToRemove = eppHostUpdateAddRemove;

            var response22 = service.Execute(hostUpdateCmd);

            PrintResponse(response22);

            //21. Update the status of ns1.<domain> such that it can no longer be updated
            Console.WriteLine("TEST: 21");
            hostUpdateCmd = new HostUpdate(host1.HostName);

            eppHostUpdateAddRemove = new EppHostUpdateAddRemove();

            eppHostUpdateAddRemove.Status = new List <Status> {
                new Status("", "clientUpdateProhibited")
            };

            hostUpdateCmd.ToAdd = eppHostUpdateAddRemove;

            response22 = service.Execute(hostUpdateCmd);
            PrintResponse(response22);

            //22. Using the correct EPP call, get information on a domain name without using WHOIS
            Console.WriteLine("TEST: 22");

            //const string domainStep10 = registrarNumber + "a.ca";

            var domainInfoCmd = new DomainInfo(domainStep10);
            var domainInfo    = service.Execute(domainInfoCmd);

            PrintResponse(domainInfo);

            //23. Renew the domain created in operation #10 such that the domain’s total length of term becomes 3 years
            Console.WriteLine("TEST: 23");
            var renewCmd = new DomainRenew(domainStep10, domainInfo.Domain.ExDate, new DomainPeriod(2, "y"));

            var response23 = service.Execute(renewCmd);

            PrintResponse(response23);

            /*
             * 24. Do a Registrar transfer:
             * - Domain name <registrar number>X2-1.ca, from your ‘e’ Registrar account
             * - Have the system auto-generate the contacts so that their information is identical to the contacts in the ‘e’ account
             */
            Console.WriteLine("TEST: 24");

            var transferCmd = new CiraDomainTransfer(registrarNumber + "X2-1.ca", null, null, new List <string>());

            //var transferCmd = new DomainTransfer("3406310x2-5.ca", null, null, new List<string>());

            transferCmd.Password = "******";
            var response24 = service.Execute(transferCmd);

            PrintResponse(response24);

            /*25. Do a Registrar transfer:
             * - Domain name, <registrar number>X2-2.ca, from your ‘e’ Registrar account
             * - Specify the same Registrant, administrative, and technical contacts used for the domain created in operation #14
             */
            Console.WriteLine("TEST: 25");

            //BUG: did not use all the technical contacts.

            transferCmd = new CiraDomainTransfer(registrarNumber + "X2-2.ca", association.Id, adminContactId, new List <string> {
                tech1.Id, tech2.Id, tech3.Id
            });
            //transferCmd = new DomainTransfer("3406310x2-10.ca", association.Id, adminContactId, new List<string> { tech1.Id, tech2.Id, tech3.Id });

            //Password is mandatory
            //TODO: find it in the control panel
            transferCmd.Password = "******";
            response24           = service.Execute(transferCmd);

            PrintResponse(response24);

            /*
             * 26. Do an update to the domain created in operation #14 to change the administrative contact to the pre-populated contact whose id is of format <registrar number>
             */
            Console.WriteLine("TEST: 26");
            domainUpdateCmd = new DomainUpdate(step14domain);

            //remove the previous admin
            domainUpdateCmd.ToRemove.DomainContacts.Add(new DomainContact(adminContactId, "admin"));

            domainUpdateCmd.ToAdd.DomainContacts.Add(new DomainContact(registrarNumber, "admin"));

            var response25 = service.Execute(domainUpdateCmd);

            PrintResponse(response25);

            /*27. Do an update to the status of the domain created in operation #14 such that it cannot be deleted*/
            Console.WriteLine("TEST: 27");
            domainUpdateCmd = new DomainUpdate(step14domain);

            domainUpdateCmd.ToAdd.Status.Add(new Status("", "clientDeleteProhibited"));

            var response26 = service.Execute(domainUpdateCmd);

            PrintResponse(response26);

            /*28. Do an update to the email address of the pre-populated contact whose id is of format <registrar number> to "*****@*****.**" */
            Console.WriteLine("TEST: 28");
            //28.1 get the contact
            //var contactInfoCmd = new ContactInfo("rant" + registrarNumber);
            var contactInfoCmd = new ContactInfo(registrarNumber);

            contactInfoResponse = service.Execute(contactInfoCmd);

            PrintResponse(contactInfoResponse);

            if (contactInfoResponse.Contact != null)
            {
                //28.2 update the email address

                //ASSERT: contactInfoResponse.Contact != null
                contactUpdateCmd = new ContactUpdate(contactInfoResponse.Contact.Id);

                var contactchage = new ContactChange(contactInfoResponse.Contact);

                contactchage.Email = "*****@*****.**";

                contactUpdateCmd.ContactChange = contactchage;

                //the extensions are compulsory
                contactUpdateCmd.Extensions.Add(new CiraContactUpdateExtension {
                    CprCategory = contactInfoResponse.Contact.CprCategory
                });

                var response27 = service.Execute(contactUpdateCmd);

                PrintResponse(response27);
            }
            else
            {
                Console.WriteLine("Error: contact does not exist?");
            }


            /*
             *   29. Do an update to the privacy status for Registrant contact created in operation #4 to now show full detail
             */
            Console.WriteLine("TEST: 29");
            contactUpdateCmd = new ContactUpdate("rant" + registrarNumber);

            //Invalid WHOIS display setting - valid values are PRIVATE or FULL
            contactUpdateCmd.Extensions.Add(new CiraContactUpdateExtension {
                WhoisDisplaySetting = "FULL"
            });

            var response28 = service.Execute(contactUpdateCmd);

            PrintResponse(response28);


            /*30. Delete the domain <registrar number>-10.ca*/
            Console.WriteLine("TEST: 30");
            //NOTE:check this domain status

            var deleteDomainCmd = new DomainDelete(registrarNumber + "-10.ca");
            //var deleteDomainCmd = new DomainDelete(registrarNumber + "-9.ca");

            var response29 = service.Execute(deleteDomainCmd);

            PrintResponse(response29);

            /*31. EPP <logout> command*/
            Console.WriteLine("TEST:31");
            var logOutCmd = new Logout();

            service.Execute(logOutCmd);

            /*32. Disconnect SSL connection*/
            Console.WriteLine("TEST: 32");
            service.Disconnect();

            /*33. SSL connection establishment*/
            Console.WriteLine("TEST: 33");
            service.Connect();

            /*34. EPP <login> command with your ‘e’ account*/
            Console.WriteLine("TEST: 34");
            logingCmd = new Login("username", "password");

            response = service.Execute(logingCmd);

            PrintResponse(response);

            /*35. Acknowledge all poll messages*/
            Console.WriteLine("TEST: 35");
            var thereAreMessages = true;

            while (thereAreMessages)
            {
                //request
                var poll = new Poll {
                    Type = PollType.Request
                };

                var pollResponse = (PollResponse)service.Execute(poll);

                PrintResponse(pollResponse);

                if (!String.IsNullOrEmpty(pollResponse.Id))
                {
                    //acknowledge
                    poll = new Poll {
                        Type = PollType.Acknowledge, MessageId = pollResponse.Id
                    };

                    pollResponse = (PollResponse)service.Execute(poll);

                    PrintResponse(pollResponse);
                }

                Console.WriteLine("Messages left in the queue:" + pollResponse.Count);

                thereAreMessages = pollResponse.Count != 0;
            }

            /*36. EPP <logout> command*/
            Console.WriteLine("TEST: 36");
            logOutCmd = new Logout();

            service.Execute(logOutCmd);
        }
コード例 #13
0
 IObserver <FormattedLogEvent> CreateSender()
 => TcpTransport.Send("127.0.0.1", _port);
コード例 #14
0
        public async Task LoginAsync()
        {
            IClientChannel client = null;

            ITraceWriter traceWriter = null;

            if (ShowTraceWindow)
            {
                traceWriter = Owner.TraceViewModel;

                base.MessengerInstance.Send <OpenWindowMessage>(
                    new OpenWindowMessage()
                {
                    WindowName  = "Trace",
                    DataContext = Owner.TraceViewModel
                });
            }

            IsBusy            = true;
            this.ErrorMessage = string.Empty;

            try
            {
                var cancellationToken = _loginTimeout.ToCancellationToken();

                var transport = new TcpTransport(traceWriter: traceWriter);
                await transport.OpenAsync(_serverAddressUri, cancellationToken);

                client = new ClientChannel(
                    transport,
                    _sendTimeout,
                    fillEnvelopeRecipients: true,
                    autoReplyPings: true,
                    autoNotifyReceipt: true);

                if (RegisterUser)
                {
                    var guestSessionResult = await client.EstablishSessionAsync(
                        compressionOptions => compressionOptions.First(),
                        encryptionOptions => SessionEncryption.TLS,
                        new Identity()
                    {
                        Name = Guid.NewGuid().ToString(), Domain = _userNameNode.Domain
                    },
                        (schemeOptions, roundtrip) => new GuestAuthentication(),
                        null,
                        cancellationToken
                        );

                    if (guestSessionResult.State == SessionState.Established)
                    {
                        // Creates the account
                        var account = new Account()
                        {
                            Password = this.Password.ToBase64()
                        };

                        await client.SetResourceAsync <Account>(
                            LimeUri.Parse(UriTemplates.ACCOUNT),
                            account,
                            _userNameNode,
                            cancellationToken);

                        await client.SendFinishingSessionAsync();

                        await client.ReceiveFinishedSessionAsync(cancellationToken);

                        client.DisposeIfDisposable();

                        transport = new TcpTransport(traceWriter: traceWriter);
                        await transport.OpenAsync(_serverAddressUri, cancellationToken);

                        client = new ClientChannel(
                            transport,
                            _sendTimeout,
                            fillEnvelopeRecipients: true,
                            autoReplyPings: true,
                            autoNotifyReceipt: true);
                    }
                    else if (guestSessionResult.Reason != null)
                    {
                        this.ErrorMessage = guestSessionResult.Reason.Description;
                    }
                    else
                    {
                        this.ErrorMessage = "Could not establish a guest session with the server";
                    }
                }

                var authentication = new PlainAuthentication();
                authentication.SetToBase64Password(this.Password);

                var sessionResult = await client.EstablishSessionAsync(
                    compressionOptions => compressionOptions.First(),
                    encryptionOptions => SessionEncryption.TLS,
                    new Identity()
                {
                    Name = _userNameNode.Name, Domain = _userNameNode.Domain
                },
                    (schemeOptions, roundtrip) => authentication,
                    _userNameNode.Instance,
                    cancellationToken);

                if (sessionResult.State == SessionState.Established)
                {
                    var rosterViewModel = new RosterViewModel(client, this);
                    base.Owner.ContentViewModel = rosterViewModel;
                }
                else if (sessionResult.Reason != null)
                {
                    this.ErrorMessage = sessionResult.Reason.Description;
                }
                else
                {
                    this.ErrorMessage = "Could not connect to the server";
                }
            }
            catch (Exception ex)
            {
                ErrorMessage = ex.Message;
                client.DisposeIfDisposable();
            }
            finally
            {
                IsBusy = false;
            }
        }
コード例 #15
0
        private async Task OpenTransportAsync()
        {
            await ExecuteAsync(async() =>
            {
                AddStatusMessage("Connecting...");

                var timeoutCancellationToken = _operationTimeout.ToCancellationToken();

                X509Certificate2 clientCertificate = null;

                if (!string.IsNullOrWhiteSpace(ClientCertificateThumbprint))
                {
                    ClientCertificateThumbprint = ClientCertificateThumbprint
                                                  .Replace(" ", "")
                                                  .Replace("‎", "");

                    var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

                    try
                    {
                        store.Open(OpenFlags.ReadOnly);

                        var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, ClientCertificateThumbprint, false);
                        if (certificates.Count > 0)
                        {
                            clientCertificate = certificates[0];

                            var identity = clientCertificate.GetIdentity();

                            if (identity != null)
                            {
                                var fromVariableViewModel = this.Variables.FirstOrDefault(v => v.Name.Equals("from", StringComparison.OrdinalIgnoreCase));

                                if (fromVariableViewModel == null)
                                {
                                    fromVariableViewModel = new VariableViewModel()
                                    {
                                        Name = "from"
                                    };

                                    this.Variables.Add(fromVariableViewModel);
                                }

                                fromVariableViewModel.Value = identity.ToString();
                            }
                        }
                        else
                        {
                            AddStatusMessage("The specified certificate was not found", true);
                        }
                    }
                    finally
                    {
                        store.Close();
                    }
                }

                if (_hostUri.Scheme == WebSocketTransportListener.UriSchemeWebSocket ||
                    _hostUri.Scheme == WebSocketTransportListener.UriSchemeWebSocketSecure)
                {
                    Transport = new ClientWebSocketTransport(
                        new EnvelopeSerializer(new DocumentTypeResolver()),
                        this);
                }
                else
                {
                    TcpClient = new TcpClientAdapter(new TcpClient());
                    Transport = new TcpTransport(
                        TcpClient,
                        new EnvelopeSerializer(new DocumentTypeResolver()),
                        _hostUri.Host,
                        clientCertificate,
                        traceWriter: this);
                }

                await Transport.OpenAsync(_hostUri, timeoutCancellationToken);

                _connectionCts = new CancellationTokenSource();

                var dispatcher = Dispatcher.CurrentDispatcher;

                _receiveTask = ReceiveAsync(
                    Transport,
                    (e) => ReceiveEnvelopeAsync(e, dispatcher),
                    _connectionCts.Token)
                               .WithCancellation(_connectionCts.Token)
                               .ContinueWith(t =>
                {
                    IsConnected = false;

                    if (t.Exception != null)
                    {
                        AddStatusMessage(string.Format("Disconnected with errors: {0}", t.Exception.InnerException.Message.RemoveCrLf()), true);
                    }
                    else
                    {
                        AddStatusMessage("Disconnected");
                    }
                }, TaskScheduler.FromCurrentSynchronizationContext());

                IsConnected  = true;
                CanSendAsRaw = true;

                AddStatusMessage("Connected");
            });
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: planetarium/libplanet-seed
#pragma warning disable MEN003 // Method Main must be no longer than 120 lines
        public static async Task Main(string[] args)
        {
            Options options = Options.Parse(args, Console.Error);

            var loggerConfig = new LoggerConfiguration();

            switch (options.LogLevel)
            {
            case "error":
                loggerConfig = loggerConfig.MinimumLevel.Error();
                break;

            case "warning":
                loggerConfig = loggerConfig.MinimumLevel.Warning();
                break;

            case "information":
                loggerConfig = loggerConfig.MinimumLevel.Information();
                break;

            case "debug":
                loggerConfig = loggerConfig.MinimumLevel.Debug();
                break;

            case "verbose":
                loggerConfig = loggerConfig.MinimumLevel.Verbose();
                break;

            default:
                loggerConfig = loggerConfig.MinimumLevel.Information();
                break;
            }

            loggerConfig = loggerConfig
                           .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                           .Enrich.FromLogContext()
                           .WriteTo.Console();
            Log.Logger = loggerConfig.CreateLogger();

            if (options.IceServer is null && options.Host is null)
            {
                Log.Error(
                    "-h/--host is required if -I/--ice-server is not given."
                    );
                Environment.Exit(1);
                return;
            }

            if (!(options.IceServer is null || options.Host is null))
            {
                Log.Warning("-I/--ice-server will not work because -h/--host is given.");
            }

            try
            {
                var          privateKey = options.PrivateKey ?? new PrivateKey();
                RoutingTable table      = new RoutingTable(privateKey.ToAddress());
                ITransport   transport;
                switch (options.TransportType)
                {
                case "tcp":
                    transport = new TcpTransport(
                        privateKey,
                        AppProtocolVersion.FromToken(options.AppProtocolVersionToken),
                        null,
                        host: options.Host,
                        listenPort: options.Port,
                        iceServers: new[] { options.IceServer },
                        differentAppProtocolVersionEncountered: null);
                    break;

                case "netmq":
                    transport = new NetMQTransport(
                        privateKey,
                        AppProtocolVersion.FromToken(options.AppProtocolVersionToken),
                        null,
                        workers: options.Workers,
                        host: options.Host,
                        listenPort: options.Port,
                        iceServers: new[] { options.IceServer },
                        differentAppProtocolVersionEncountered: null);
                    break;

                default:
                    Log.Error(
                        "-t/--transport-type must be either \"tcp\" or \"netmq\".");
                    Environment.Exit(1);
                    return;
                }

                KademliaProtocol peerDiscovery = new KademliaProtocol(
                    table,
                    transport,
                    privateKey.ToAddress());
                Startup.TableSingleton = table;

                IWebHost webHost = WebHost.CreateDefaultBuilder()
                                   .UseStartup <SeedStartup <Startup> >()
                                   .UseSerilog()
                                   .UseUrls($"http://{options.GraphQLHost}:{options.GraphQLPort}/")
                                   .Build();

                using (var cts = new CancellationTokenSource())
                {
                    Console.CancelKeyPress += (sender, eventArgs) =>
                    {
                        eventArgs.Cancel = true;
                        cts.Cancel();
                    };

                    try
                    {
                        var tasks = new List <Task>
                        {
                            webHost.RunAsync(cts.Token),
                            StartTransportAsync(transport, cts.Token),
                            RefreshTableAsync(peerDiscovery, cts.Token),
                            RebuildConnectionAsync(peerDiscovery, cts.Token),
                        };
                        if (!(options.Peers is null) && options.Peers.Any())
                        {
                            tasks.Add(CheckStaticPeersAsync(
                                          options.Peers,
                                          table,
                                          peerDiscovery,
                                          cts.Token));
                        }

                        await Task.WhenAll(tasks);
                    }
                    catch (OperationCanceledException)
                    {
                        await transport.StopAsync(TimeSpan.FromSeconds(1));
                    }
                }
            }
            catch (InvalidOptionValueException e)
            {
                string expectedValues = string.Join(", ", e.ExpectedValues);
                Console.Error.WriteLine($"Unexpected value given through '{e.OptionName}'\n"
                                        + $"  given value: {e.OptionValue}\n"
                                        + $"  expected values: {expectedValues}");
            }
        }
コード例 #17
0
ファイル: Program.cs プロジェクト: emartsolf/robotraconteur
        static void Main(string[] args)
        {
            //string path = @"C:\Users\wasonj\Documents\RobotRaconteur2\bin_devel\out_debug\NET\Native\RobotRaconteurNETNative.dll";

            //Environment.SetEnvironmentVariable("PATH", Path.GetDirectoryName(path) + ";" + Environment.GetEnvironmentVariable("PATH"));

            string exepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            MultiDimArrayTest.testdatapath = System.IO.Path.Combine(exepath, System.IO.Path.Combine("..", "testdata"));

            RobotRaconteurNode.s.SetExceptionHandler(delegate(Exception e)
            {
                Console.WriteLine(e.ToString());
            });

            string command = "loopback";

            if (args.Length >= 1)
            {
                command = args[0];
            }

            if (command == "loopback")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                TcpTransport t = new TcpTransport();
                t.StartServer(2323);
                t.EnableNodeDiscoveryListening();
                t.EnableNodeAnnounce();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());


                MultiDimArrayTest.Test();

                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);

                int count = 1;

                if (args.Length >= 2)
                {
                    count = int.Parse(args[1]);
                }

                for (int i = 0; i < count; i++)
                {
                    ServiceTestClient c = new ServiceTestClient();
                    c.RunFullTest("tcp://localhost:2323/{0}/RobotRaconteurTestService", "tcp://localhost:2323/{0}/RobotRaconteurTestService_auth");
                    //System.Threading.Thread.Sleep(100);
                }

                /* c = new ServiceTestClient();
                 * c.RunFullTest("tcp://localhost:2323/{0}/RobotRaconteurTestService", "tcp://localhost:2323/{0}/RobotRaconteurTestService_auth");
                 * System.Threading.Thread.Sleep(1000);*/

                /*System.Threading.Thread.Sleep(10000);
                 *
                 * ServiceInfo2[] services = RobotRaconteurNode.s.FindServiceByType("RobotRaconteurTestService.testroot", new string[] { "tcp" });*/

                try
                {
                    object o = RobotRaconteurNode.s.ConnectService("tcp://localhost:2323/{0}/RobotRaconteurTestService");
                }
                catch { }

                //System.Threading.Thread.Sleep(17000);



                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "loopback2")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                using (var setup = new ServerNodeSetup("com.robotraconteur.testing.TestService2", 4565,
                                                       RobotRaconteurNodeSetupFlags.ENABLE_TCP_TRANSPORT | RobotRaconteurNodeSetupFlags.TCP_TRANSPORT_START_SERVER))
                {
                    MultiDimArrayTest.Test();

                    RobotRaconteurTestServiceSupport2 sup = new RobotRaconteurTestServiceSupport2();
                    sup.RegisterServices(setup.TcpTransport);

                    ServiceTestClient2 c = new ServiceTestClient2();
                    c.RunFullTest("rr+tcp://localhost:4565/?service=RobotRaconteurTestService2");
                }
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "loopback3")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                using (var setup = new ServerNodeSetup("com.robotraconteur.testing.TestService3", 4567,
                                                       RobotRaconteurNodeSetupFlags.ENABLE_TCP_TRANSPORT | RobotRaconteurNodeSetupFlags.TCP_TRANSPORT_START_SERVER))
                {
                    RobotRaconteurTestServiceSupport3 sup = new RobotRaconteurTestServiceSupport3();
                    sup.RegisterServices();

                    ServiceTestClient3 c = new ServiceTestClient3();
                    c.RunFullTest("rr+tcp://localhost:4567/?service=RobotRaconteurTestService3");
                }
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "client")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url      = args[1];
                string url_auth = args[2];

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                HardwareTransport t4 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t4);


                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());


                MultiDimArrayTest.Test();

                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);

                int count = 1;

                if (args.Length >= 4)
                {
                    count = int.Parse(args[3]);
                }

                for (int i = 0; i < count; i++)
                {
                    ServiceTestClient c = new ServiceTestClient();
                    c.RunFullTest(url, url_auth);
                    //System.Threading.Thread.Sleep(100);
                }

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "client2")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url = args[1];

                TcpTransport t = new TcpTransport();

                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());

                MultiDimArrayTest.Test();

                RobotRaconteurTestServiceSupport2 sup = new RobotRaconteurTestServiceSupport2();
                sup.RegisterServices(t);

                ServiceTestClient2 c = new ServiceTestClient2();
                c.RunFullTest(url);

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "client3")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url = args[1];

                TcpTransport t = new TcpTransport();

                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService5.com__robotraconteur__testing__TestService5Factory());



                ServiceTestClient3 c = new ServiceTestClient3();
                c.RunFullTest(url);

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "server")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                int port;
                if (args[1] == "sharer")
                {
                    port = -1;
                }
                else
                {
                    port = Int32.Parse(args[1]);
                }
                string name = args[2];

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);
                t2.StartServerAsNodeName(name);

                TcpTransport t = new TcpTransport();
                t.EnableNodeAnnounce();
                if (port > 0)
                {
                    t.StartServer(port);
                }
                else
                {
                    t.StartServerUsingPortSharer();
                }

                try
                {
                    t.LoadTlsNodeCertificate();
                }
                catch (Exception)
                {
                    Console.WriteLine("warning: Could not load local node certificate");
                }

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService5.com__robotraconteur__testing__TestService5Factory());


                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);

                RobotRaconteurTestServiceSupport2 sup2 = new RobotRaconteurTestServiceSupport2();
                sup2.RegisterServices(t);

                RobotRaconteurTestServiceSupport2 sup3 = new RobotRaconteurTestServiceSupport2();
                sup3.RegisterServices(t);

                Console.WriteLine("Server started, press enter to quit");
                Console.ReadLine();
                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test complete, no error detected");
                return;
            }


            if (command == "findservicebytype")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string   type     = args[1];
                string[] tschemes = args[2].Split(new char[] { ',' });

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                System.Threading.Thread.Sleep(6000);



                ServiceInfo2[] ret = RobotRaconteurNode.s.FindServiceByType(type, tschemes);

                foreach (ServiceInfo2 r in ret)
                {
                    print_ServiceInfo2(r);
                }

                var t1 = RobotRaconteurNode.s.AsyncFindServiceByType(type, tschemes);
                t1.Wait();
                var ret2 = t1.Result;
                {
                    foreach (ServiceInfo2 r in ret2)
                    {
                        print_ServiceInfo2(r);
                    }
                }

                System.Threading.Thread.Sleep(10000);
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "findnodebyid")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                NodeID   id       = new NodeID(args[1]);
                string[] tschemes = args[2].Split(new char[] { ',' });

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                System.Threading.Thread.Sleep(6000);



                NodeInfo2[] ret = RobotRaconteurNode.s.FindNodeByID(id, tschemes);

                foreach (NodeInfo2 r in ret)
                {
                    print_NodeInfo2(r);
                }

                var ts1 = RobotRaconteurNode.s.AsyncFindNodeByID(id, tschemes);
                ts1.Wait();
                var ret2 = ts1.Result;
                {
                    foreach (NodeInfo2 r in ret2)
                    {
                        print_NodeInfo2(r);
                    }
                }

                System.Threading.Thread.Sleep(10000);
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "findnodebyname")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string   name     = args[1];
                string[] tschemes = args[2].Split(new char[] { ',' });

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                System.Threading.Thread.Sleep(6000);



                NodeInfo2[] ret = RobotRaconteurNode.s.FindNodeByName(name, tschemes);

                foreach (NodeInfo2 r in ret)
                {
                    print_NodeInfo2(r);
                }

                var ts1 = RobotRaconteurNode.s.AsyncFindNodeByName(name, tschemes);
                ts1.Wait();
                var ret2 = ts1.Result;
                {
                    foreach (NodeInfo2 r in ret2)
                    {
                        print_NodeInfo2(r);
                    }
                }

                System.Threading.Thread.Sleep(10000);
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "stresstestclient")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url1 = args[1];

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);


                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                servicetest_count     = 0;
                servicetest_keepgoing = true;

                object         obj = RobotRaconteurNode.s.ConnectService(url1);
                async_testroot o   = (async_testroot)obj;
                testroot       o2  = (testroot)obj;
                o.async_func3(1, 2).ContinueWith(ts1 => servicetest2(o, ts1));

                Pipe <double> .PipeEndpoint p = o2.broadcastpipe.Connect(-1);
                p.PacketReceivedEvent += servicetest7;
                Wire <double> .WireConnection w  = o2.broadcastwire.Connect();
                RobotRaconteur.Timer          tt = RobotRaconteurNode.s.CreateTimer(40, delegate(TimerEvent ev) { servicetest5(p, w, ev); });
                tt.Start();

                Console.WriteLine("Press enter to quit");
                Console.ReadLine();
                servicetest_keepgoing = false;
                tt.Stop();
                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "latencytestclient" || command == "latencytestclient2")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url1 = args[1];

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);


                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                servicetest_count     = 0;
                servicetest_keepgoing = true;

                object         obj = RobotRaconteurNode.s.ConnectService(url1);
                async_testroot o   = (async_testroot)obj;
                testroot       o2  = (testroot)obj;

                var o3 = o2.get_o1();

                int iters = 100000;

                var d = new double[10];

                DateTime start;
                DateTime end;

                if (command == "latencytestclient")
                {
                    start = DateTime.UtcNow;
                    for (int i = 0; i < iters; i++)
                    {
                        o3.d1 = d;
                    }
                    end = DateTime.UtcNow;
                }
                else
                {
                    start = DateTime.UtcNow;
                    for (int i = 0; i < iters; i++)
                    {
                        var dummy = o2.struct1;
                    }
                    end = DateTime.UtcNow;
                }

                var diff = (end - start).Ticks / (TimeSpan.TicksPerMillisecond / 1000);

                double period = ((double)diff) / ((double)iters);

                Console.WriteLine("Period = {0}", period);

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "peeridentity")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for peeridentity:  RobotRaconteurTest peeridentity url [nodeid]");
                    return;
                }

                var url1 = args[1];
                Console.WriteLine(url1);
                var c = new TcpTransport();

                if (args.Length > 2)
                {
                    var nodeid = args[2];

                    var id = new NodeID(nodeid);

                    RobotRaconteurNode.s.NodeID = id;

                    try
                    {
                        c.LoadTlsNodeCertificate();
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("warning: Could not load local node certificate");
                    }
                }

                Console.WriteLine(RobotRaconteurNode.s.NodeID);
                var c2 = new LocalTransport();

                var c5 = new HardwareTransport();

                RobotRaconteurNode.s.RegisterTransport(c);
                RobotRaconteurNode.s.RegisterTransport(c2);

                RobotRaconteurNode.s.RegisterTransport(c5);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var oo = (testroot)RobotRaconteurNode.s.ConnectService(url1);
                oo.func3(1.0, 2.3);

                if (c.IsTransportConnectionSecure(oo))
                {
                    Console.WriteLine("Connection is secure");

                    if (c.IsSecurePeerIdentityVerified(oo))
                    {
                        Console.WriteLine("Peer identity is verified: " + c.GetSecurePeerIdentity(oo));
                    }
                    else
                    {
                        Console.WriteLine("Peer identity is not verified");
                    }
                }
                else
                {
                    Console.WriteLine("Connection is not secure");
                }

                RobotRaconteurNode.s.Shutdown();

                Console.WriteLine("Test completed, no errors detected");
                return;
            }

            if (command == "multidimarraytest")
            {
                MultiDimArrayTest.Test();
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "subscribertest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for subscribertest:  RobotRaconteurTest subscribertest servicetype");
                    return;
                }

                var servicetype = args[1];

                LocalTransport t2 = new LocalTransport();
                t2.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t2);

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                HardwareTransport t3 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t3);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var subscription = RobotRaconteurNode.s.SubscribeServiceByType(new string[] { servicetype });

                subscription.ClientConnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client connected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                    testroot e1 = (testroot)e;
                    Console.WriteLine("d1 = " + e1.d1);
                };

                subscription.ClientDisconnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client disconnected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                };

                var wire_subscription = subscription.SubscribeWire <double>("broadcastwire");
                wire_subscription.WireValueChanged += delegate(WireSubscription <double> c, double d, TimeSpec e)
                {
                    //Console.WriteLine("Wire value changed: " + d);
                };

                var pipe_subscription = subscription.SubscribePipe <double>("broadcastpipe");
                pipe_subscription.PipePacketReceived += delegate(PipeSubscription <double> c)
                {
                    double val;
                    while (c.TryReceivePacket(out val))
                    {
                        Console.WriteLine("Received pipe packet: " + val);
                    }
                };


                System.Threading.Thread.Sleep(6000);

                var connected_clients = subscription.GetConnectedClients();

                foreach (var c in connected_clients)
                {
                    Console.WriteLine("Client: " + c.Key.NodeID + ", " + c.Key.ServiceName);
                }

                TimeSpec w1_time = null;
                double   w1_value;
                var      w1_res = wire_subscription.TryGetInValue(out w1_value);

                if (w1_res)
                {
                    Console.WriteLine("Got broadcastwire value: " + w1_value + " " + w1_time?.seconds);
                }

                Console.WriteLine("Waiting for services...");

                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "subscriberurltest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for subscriberurltest:  RobotRaconteurTest subscriberurltest url");
                    return;
                }

                var url = args[1];

                LocalTransport t2 = new LocalTransport();
                t2.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t2);

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                HardwareTransport t3 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t3);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var subscription = RobotRaconteurNode.s.SubscribeService(url);

                subscription.ClientConnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client connected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                    testroot e1 = (testroot)e;
                    Console.WriteLine("d1 = " + e1.d1);
                };

                subscription.ClientDisconnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client disconnected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                };

                subscription.ClientConnectFailed += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, string[] url2, Exception err)
                {
                    Console.WriteLine("Client connect failed: " + d.NodeID.ToString() + " url: " + String.Join(",", url2) + err.ToString());
                };

                subscription.AsyncGetDefaultClient(1000).ContinueWith(delegate(Task <object> res)
                {
                    if (res.IsFaulted)
                    {
                        Console.WriteLine("AsyncGetDefaultClient failed");
                    }
                    else if (res.Result == null)
                    {
                        Console.WriteLine("AsyncGetDefaultClient returned null");
                    }
                    else
                    {
                        Console.WriteLine($"AsyncGetDefaultClient successful: {res.Result}");
                    }
                });
                var    client2 = subscription.GetDefaultClientWait(6000);
                object client3;
                var    try_res = subscription.TryGetDefaultClientWait(out client3, 6000);
                Console.WriteLine($"try_res = {try_res}");

                var connected_clients = subscription.GetConnectedClients();

                foreach (var c in connected_clients)
                {
                    Console.WriteLine("Client: " + c.Key.NodeID + ", " + c.Key.ServiceName);
                }

                try
                {
                    Console.WriteLine(((testroot)subscription.GetDefaultClient()).d1);
                }
                catch (Exception)
                {
                    Console.WriteLine("Client not connected");
                }

                object client1;
                subscription.TryGetDefaultClient(out client1);

                Console.WriteLine("Waiting for services...");

                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "subscriberfiltertest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest servicetype");
                }

                var servicetype = args[1];

                var f = new ServiceSubscriptionFilter();

                if (args.Length >= 3)
                {
                    var subcommand = args[2];

                    if (subcommand == "nodeid")
                    {
                        if (args.Length < 4)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodeid <nodeid>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeID = new NodeID(args[3]);
                        f.Nodes  = new ServiceSubscriptionFilterNode[] { n };
                    }

                    else if (subcommand == "nodename")
                    {
                        if (args.Length < 4)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodename <nodename>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeName = args[3];
                        f.Nodes    = new ServiceSubscriptionFilterNode[] { n };
                    }
                    else
                    if (subcommand == "nodeidscheme")
                    {
                        if (args.Length < 5)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodeidscheme <nodeid> <schemes>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeID           = new NodeID(args[3]);
                        f.Nodes            = new ServiceSubscriptionFilterNode[] { n };
                        f.TransportSchemes = args[4].Split(new char[] { ',' });
                    }
                    else
                    if (subcommand == "nodeidauth")
                    {
                        if (args.Length < 6)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodeidauth <nodeid> <username> <password>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeID      = new NodeID(args[3]);
                        n.Username    = args[4];
                        n.Credentials = new Dictionary <string, object>()
                        {
                            { "password", args[5] }
                        };
                        f.Nodes = new ServiceSubscriptionFilterNode[] { n };
                    }
                    else
                    if (subcommand == "servicename")
                    {
                        if (args.Length < 4)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest servicename <servicename>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        f.ServiceNames = new string[] { args[3] };
                    }
                    else if (subcommand == "predicate")
                    {
                        f.Predicate = delegate(ServiceInfo2 info)
                        {
                            Console.WriteLine("Predicate: " + info.NodeName);
                            return(info.NodeName == "testprog");
                        };
                    }
                    else
                    {
                        throw new Exception("Unknown subscriberfiltertest command");
                    }

                    LocalTransport t2 = new LocalTransport();
                    t2.EnableNodeDiscoveryListening();
                    RobotRaconteurNode.s.RegisterTransport(t2);

                    TcpTransport t = new TcpTransport();
                    t.EnableNodeDiscoveryListening();
                    RobotRaconteurNode.s.RegisterTransport(t);

                    HardwareTransport t3 = new HardwareTransport();
                    RobotRaconteurNode.s.RegisterTransport(t3);

                    RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                    RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                    var subscription = RobotRaconteurNode.s.SubscribeServiceByType(new string[] { servicetype }, f);

                    subscription.ClientConnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                    {
                        Console.WriteLine("Client connected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                        testroot e1 = (testroot)e;
                        Console.WriteLine("d1 = " + e1.d1);
                    };

                    subscription.ClientDisconnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                    {
                        Console.WriteLine("Client disconnected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                    };

                    Console.ReadLine();

                    RobotRaconteurNode.s.Shutdown();

                    return;
                }



                return;
            }

            if (command == "serviceinfo2subscribertest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for subscribertest:  RobotRaconteurTest subscribertest servicetype");
                    return;
                }

                var servicetype = args[1];

                LocalTransport t2 = new LocalTransport();
                t2.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t2);

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                HardwareTransport t3 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t3);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var subscription = RobotRaconteurNode.s.SubscribeServiceInfo2(new string[] { servicetype });
                subscription.ServiceDetected += delegate(ServiceInfo2Subscription sub, ServiceSubscriptionClientID id, ServiceInfo2 info)
                {
                    Console.WriteLine("Service detected: " + info.NodeID.ToString() + ", " + info.Name);
                };

                subscription.ServiceLost += delegate(ServiceInfo2Subscription sub, ServiceSubscriptionClientID id, ServiceInfo2 info)
                {
                    Console.WriteLine("Service lost: " + info.NodeID.ToString() + ", " + info.Name);
                };

                System.Threading.Thread.Sleep(6000);

                var connected_clients = subscription.GetDetectedServiceInfo2();

                foreach (var c in connected_clients)
                {
                    Console.WriteLine("Client: " + c.Key.NodeID + ", " + c.Key.ServiceName);
                }

                Console.WriteLine("Waiting for services...");

                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "nowutc")
            {
                Console.WriteLine(RobotRaconteurNode.s.NowUTC);

                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "testlogging")
            {
                var r      = new RRLogRecord();
                var node   = RobotRaconteurNode.s;
                var nodeid = node.NodeID;
                r.Node    = node;
                r.Time    = DateTime.UtcNow;
                r.Level   = LogLevel.LogLevel_Warning;
                r.Message = "This is a test warning";
                RobotRaconteurNode.s.LogRecord(r);

                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "testloghandler")
            {
                var user_log_handler = new UserLogRecordHandler(x => Console.WriteLine("csharp handler: " + x.ToString()));
                RobotRaconteurNode.s.SetLogRecordHandler(user_log_handler);
                RobotRaconteurNode.s.SetLogLevel(LogLevel.LogLevel_Debug);

                TcpTransport t = new TcpTransport();
                t.StartServer(2323);

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);
                ServiceTestClient c = new ServiceTestClient();
                c.RunFullTest("tcp://localhost:2323/{0}/RobotRaconteurTestService", "tcp://localhost:2323/{0}/RobotRaconteurTestService_auth");

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");

                return;
            }

            if (command == "server2")
            {
                ServerNodeSetup node_setup = new ServerNodeSetup("testprog", 22222, args);
                using (node_setup)
                {
                    var t = node_setup.TcpTransport;

                    RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                    sup.RegisterServices(t);

                    RobotRaconteurTestServiceSupport2 sup2 = new RobotRaconteurTestServiceSupport2();
                    sup2.RegisterServices(t);

                    RobotRaconteurTestServiceSupport3 sup3 = new RobotRaconteurTestServiceSupport3();
                    sup3.RegisterServices();

                    Console.WriteLine("Server started, press enter to quit");
                    Console.ReadLine();
                    RobotRaconteurNode.s.Shutdown();
                    Console.WriteLine("Test complete, no error detected");
                    return;
                }
            }

            throw new Exception("Unknown command");
        }
コード例 #18
0
 internal override void OnCloseTransport(TcpTransport tcpTransport)
 {
 }
コード例 #19
0
        //[STAThread]
        private static void Main(params string[] args)
        {
            var          startupPath   = Path.GetDirectoryName(Path.GetFullPath(Application.ExecutablePath));
            var          springPaths   = new SpringPaths(startupPath);
            Spring       runningSpring = null;
            TcpTransport connection    = null;

            // speed up spring start
            springPaths.SpringVersionChanged += (sender, engine) =>
            {
                Utils.StartAsync(
                    () =>
                {
                    UnitSync unitSync = null;
                    try
                    {
                        unitSync = new UnitSync(springPaths, engine);     // initialize unitsync to avoid slowdowns when starting

                        if (unitSync.UnitsyncWritableFolder != springPaths.WritableDirectory)
                        {
                            // unitsync created its cache in different folder than is used to start spring -> move it
                            var fi = ArchiveCache.GetCacheFile(unitSync.UnitsyncWritableFolder);
                            if (fi != null)
                            {
                                File.Copy(fi.FullName, Path.Combine(springPaths.WritableDirectory, "cache", fi.Name), true);
                            }
                        }
                    }
                    finally
                    {
                        unitSync?.Dispose();
                    }
                });
            };

            Config config = null;

            try { config = JsonConvert.DeserializeObject <Config>(File.ReadAllText(startupPath + "/config.json")); } catch (Exception) { }

            CefWrapper.Initialize(startupPath + "/render", args);


            var springScanner = new SpringScanner(springPaths);

            springScanner.Start();

            EventHandler <ProgressEventArgs> workHandler =
                (s, e) => { CefWrapper.ExecuteJavascript("on_spring_scanner_work(" + JsonConvert.SerializeObject(e) + ");"); };

            springScanner.WorkStarted         += workHandler;
            springScanner.WorkProgressChanged += workHandler;
            springScanner.WorkStopped         += (s, e) => { CefWrapper.ExecuteJavascript("on_spring_scanner_work(null);"); };
            springScanner.LocalResourceAdded  +=
                (s, e) => { CefWrapper.ExecuteJavascript("on_spring_scanner_add(" + JsonConvert.SerializeObject(e.Item) + ")"); };
            springScanner.LocalResourceRemoved +=
                (s, e) => { CefWrapper.ExecuteJavascript("on_spring_scanner_remove(" + JsonConvert.SerializeObject(e.Item) + ")"); };


            var downloader = new PlasmaDownloader.PlasmaDownloader(springScanner, springPaths); //rapid

            downloader.GetResource(DownloadType.ENGINE, GlobalConst.DefaultEngineOverride);

            // ZKL's downloader doesn't send events to monitor download progress, so we have to poll it.
            Timer pollDownloads = new Timer();

            pollDownloads.Interval = 250;
            pollDownloads.Tick    += (s, e) => {
                CefWrapper.ExecuteJavascript("on_downloads_change(" + JsonConvert.SerializeObject(downloader.Downloads) + ")");
            };
            // Through some WinAPI dark magic it manages to use the message pump in the window that is run by CEF.
            // Can this be dangerous?
            pollDownloads.Start();


            CefWrapper.RegisterApiFunction(
                "getEngines",
                () => {
                return(new List <string> {
                    "100.0"
                });                                      // TODO: stub
            });
            CefWrapper.RegisterApiFunction("getMods", () => { return(springScanner.GetAllModResource()); });
            CefWrapper.RegisterApiFunction("getMaps", () => { return(springScanner.GetAllMapResource()); });

            CefWrapper.RegisterApiFunction(
                "downloadEngine",
                (string engine) =>
            {
                // Don't let GetAndSwitchEngine() touch the main SpringPaths.
                var path = new SpringPaths(springPaths.WritableDirectory);
                downloader.GetResource(DownloadType.ENGINE, engine);
            });
            CefWrapper.RegisterApiFunction("downloadMod", (string game) => { downloader.GetResource(DownloadType.MOD, game); });
            CefWrapper.RegisterApiFunction("downloadMap", (string map) => { downloader.GetResource(DownloadType.MAP, map); });
            CefWrapper.RegisterApiFunction(
                "abortDownload",
                (string name) =>
            {
                downloader.Downloads.FirstOrDefault(d => d.Name == name)?.Abort();
            });

            CefWrapper.RegisterApiFunction(
                "startSpringScript",
                (string engineVer, string script) =>
            {
                if (runningSpring != null)
                {
                    return(null);
                }
                // Ultimately we should get rid of the concept of a "current set engine", but for now let's work around it.
                var path      = new SpringPaths(springPaths.WritableDirectory);
                runningSpring = new Spring(path);
                runningSpring.SpringExited += (obj, evt) =>
                {
                    CefWrapper.ExecuteJavascript("on_spring_exit(" + (evt.IsCrash ? "true" : "false") + ");");
                    runningSpring = null;
                };
                try
                {
                    runningSpring.RunLocalScriptGame(script, engineVer);
                    return(null);
                }
                catch (Exception e)
                {
                    runningSpring = null;
                    return(e.Message);
                }
            });

            CefWrapper.RegisterApiFunction(
                "connect",
                (string host, int port) =>
            {
                if (connection != null)
                {
                    connection.RequestClose();
                }
                connection = new TcpTransport(host, port);
                connection.ConnectAndRun(
                    async(s) => CefWrapper.ExecuteJavascript(
                        $"on_lobby_message({CefWrapper.mangleUtf8(JsonConvert.SerializeObject(s))})"),
                    async() => { },
                    async(requested) => CefWrapper.ExecuteJavascript(
                        $"on_connection_closed({CefWrapper.mangleUtf8(JsonConvert.SerializeObject(requested))})")
                    );
            });
            CefWrapper.RegisterApiFunction("disconnect", () => connection?.RequestClose());
            CefWrapper.RegisterApiFunction("sendLobbyMessage", (string msg) => connection?.SendLine(CefWrapper.unmangleUtf8(msg) + '\n'));

            CefWrapper.RegisterApiFunction(
                "readConfig",
                () =>
            {
                try { return(JsonConvert.DeserializeObject(File.ReadAllText(startupPath + "/config.json"))); }
                catch (FileNotFoundException) { return(null); }
            });
            CefWrapper.RegisterApiFunction("saveConfig", (object conf) => File.WriteAllText(startupPath + "/config.json",
                                                                                            JsonConvert.SerializeObject(conf, Formatting.Indented)));

            CefWrapper.RegisterApiFunction("setFullscreen", (bool fullscreen) => CefWrapper.SetFullscreen(fullscreen));

            var fileUrl = new Uri(startupPath + "/zkwl/index.html");

            CefWrapper.StartMessageLoop(fileUrl.AbsoluteUri, "black", !config?.lobbyWindowed ?? true);
            CefWrapper.Deinitialize();

            downloader.Dispose();
            springScanner.Dispose();
        }
コード例 #20
0
 internal override void OnReceiveMessage(TcpTransport serverTransport, FrameData frameData)
 {
     ProcessReceive(serverTransport, frameData, _messageProcessor);
 }
コード例 #21
0
        private void AcceptSocketCallback(IAsyncResult ar)
        {
            if (_serverState != 1)
            {
                return;
            }

            var server = (Socket)ar.AsyncState;

            Socket     client     = null;
            IPEndPoint ipEndPoint = null;

            try
            {
                client     = server.EndAccept(ar);
                ipEndPoint = (IPEndPoint)client.RemoteEndPoint;
            }
            catch (Exception ex)
            {
                LogAgent.Error(ex.Message);
            }

            try
            {
                server.BeginAccept(AcceptSocketCallback, server);
            }
            catch (Exception ex)
            {
                Close();
                try
                {
                    if (client != null)
                    {
                        client.Close();
                    }
                }
                catch
                {
                }

                LogAgent.Error(ex.Message);

                return;
            }

            if (ipEndPoint == null)
            {
                try
                {
                    if (client != null)
                    {
                        client.Close();
                    }
                }
                catch
                {
                }

                return;
            }

            var tcpTransport = new TcpTransport(this, ipEndPoint.Address, ipEndPoint.Port);

            try
            {
                tcpTransport.Init(client);
            }
            catch (Exception ex)
            {
                try
                {
                    tcpTransport.Close();
                }
                catch
                {
                }

                LogAgent.Error(ex.Message);
                return;
            }

            _clientTransportDictionary[tcpTransport.Key] = tcpTransport;
        }