//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(); }
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; } }
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); } }
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"); } }
public void Connect(string lobbyServerHost, int lobbyServerPort, string bindingIPoverride = null) { transport = new TcpTransport(lobbyServerHost, lobbyServerPort, bindingIPoverride); transport.ConnectAndRun(OnLineReceived, OnConnected, OnConnectionClosed); }
public TcpTransportFacts(ITestOutputHelper output) { this.output = output; this.local = new TcpTransport(output.LoggerFor <TcpTransport>("local")); }
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; }
public void Dispose() { _recievingTokenSource?.Dispose(); TcpTransport?.Dispose(); }
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(); } }
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); }
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); } } }
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); }
IObserver <FormattedLogEvent> CreateSender() => TcpTransport.Send("127.0.0.1", _port);
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; } }
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"); }); }
#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}"); } }
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"); }
internal override void OnCloseTransport(TcpTransport tcpTransport) { }
//[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(); }
internal override void OnReceiveMessage(TcpTransport serverTransport, FrameData frameData) { ProcessReceive(serverTransport, frameData, _messageProcessor); }
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; }