public RpcUdpClient( IPAddress ipAddress, int program, int version, ClientSettings clientSettings = default) { int port = clientSettings?.Port ?? 0; if (port == 0) { var portMapperClientSettings = new PortMapperClientSettings { Port = clientSettings?.PortMapperPort ?? PortMapperConstants.PortMapperPort }; port = PortMapperUtilities.GetPort(Protocol.Udp, ipAddress, program, version, portMapperClientSettings); } var remoteIpEndPoint = new IPEndPoint(ipAddress, port); this.client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); this.ReceiveTimeout = clientSettings?.ReceiveTimeout ?? Utilities.DefaultClientReceiveTimeout; this.SendTimeout = clientSettings?.SendTimeout ?? Utilities.DefaultClientSendTimeout; var reader = new UdpReader(this.client); var writer = new UdpWriter(this.client); this.call = new RpcCall(program, remoteIpEndPoint, reader, writer, null, clientSettings?.Logger); }
public RpcTcpClient( IPAddress ipAddress, int program, int version, ClientSettings clientSettings = default) { int port = clientSettings?.Port ?? 0; if (port == 0) { var portMapperClientSettings = new PortMapperClientSettings { Port = clientSettings?.PortMapperPort ?? PortMapperConstants.PortMapperPort }; port = PortMapperUtilities.GetPort(Protocol.Tcp, ipAddress, program, version, portMapperClientSettings); } this.remoteIpEndPoint = new IPEndPoint(ipAddress, port); this.client = new Socket(SocketType.Stream, ProtocolType.Tcp); this.ReceiveTimeout = clientSettings?.ReceiveTimeout ?? Utilities.DefaultClientReceiveTimeout; this.SendTimeout = clientSettings?.SendTimeout ?? Utilities.DefaultClientSendTimeout; this.EstablishConnection(); this.tcpReader = new TcpReader(this.client, clientSettings?.Logger); this.tcpWriter = new TcpWriter(this.client, clientSettings?.Logger); this.call = new RpcCall( program, this.remoteIpEndPoint, this.tcpReader, this.tcpWriter, this.ReestablishConnection, clientSettings?.Logger); }
public void TestSetAndWrongGet(int port, int program, int version, int program2, int version2) { var settings = new PortMapperClientSettings { Port = PortMapperPort }; using var client = new PortMapperClient( Protocol.Tcp, IPAddress.Loopback, settings); client.Set( new Mapping { Port = port, Program = program, Version = version }); int receivedPort = client.GetPort( new Mapping { Program = program2, Version = version2 }); Assert.That(receivedPort, Is.EqualTo(0)); }
public void Start() { if (this.isDisposed) { throw new ObjectDisposedException(nameof(RpcUdpServer)); } if (this.acceptingThread != null) { return; } try { this.server.Bind(new IPEndPoint(this.ipAddress, this.port)); this.server.Listen(int.MaxValue); } catch (SocketException e) { throw new RpcException($"Could not start TCP listener. Socket error: {e.SocketErrorCode}."); } if (this.port == 0) { this.port = ((IPEndPoint)this.server.LocalEndPoint).Port; lock (this.connections) { var clientSettings = new PortMapperClientSettings { Port = this.portMapperPort }; foreach (int version in this.versions) { PortMapperUtilities.UnsetAndSetPort( Protocol.Tcp, this.port, this.program, version, clientSettings); } } } this.logger?.Info( $"{Utilities.ConvertToString(Protocol.Tcp)} Server listening on {this.server.LocalEndPoint}..."); this.acceptingThread = new Thread(this.Accepting) { Name = $"RpcNet TCP Accept {this.port}" }; this.acceptingThread.Start(); }
public RpcUdpServer( IPAddress ipAddress, int program, int[] versions, Action <ReceivedRpcCall> receivedCallDispatcher, ServerSettings serverSettings = default) { this.port = serverSettings?.Port ?? 0; this.server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); this.server.Bind(new IPEndPoint(ipAddress, this.port)); this.reader = new UdpReader(this.server); this.writer = new UdpWriter(this.server); this.receivedCall = new ReceivedRpcCall( program, versions, this.reader, this.writer, receivedCallDispatcher); this.logger = serverSettings?.Logger; if (this.port == 0) { this.port = ((IPEndPoint)this.server.LocalEndPoint).Port; var clientSettings = new PortMapperClientSettings { Port = serverSettings?.PortMapperPort ?? PortMapperConstants.PortMapperPort }; foreach (int version in versions) { PortMapperUtilities.UnsetAndSetPort(Protocol.Udp, this.port, program, version, clientSettings); } } this.logger?.Info( $"{Utilities.ConvertToString(Protocol.Udp)} Server listening on {this.server.LocalEndPoint}..."); }