Exemple #1
0
        public RpcTcpConnection(
            Socket tcpClient,
            int program,
            int[] versions,
            Action <ReceivedRpcCall> receivedCallDispatcher,
            ILogger logger = default)
        {
            this.tcpClient        = tcpClient;
            this.remoteIpEndPoint = (IPEndPoint)tcpClient.RemoteEndPoint;
            this.caller           = new Caller(this.remoteIpEndPoint, Protocol.Tcp);
            this.reader           = new TcpReader(tcpClient, logger);
            this.writer           = new TcpWriter(tcpClient, logger);
            this.logger           = logger;

            this.receivedCall = new ReceivedRpcCall(
                program,
                versions,
                this.reader,
                this.writer,
                receivedCallDispatcher);

            this.receivingThread = new Thread(this.Receiving)
            {
                IsBackground = true, Name = $"RpcNet TCP Connection {this.remoteIpEndPoint}"
            };
            this.receivingThread.Start();
        }
Exemple #2
0
        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}...");
        }
Exemple #3
0
        protected override void DispatchReceivedCall(ReceivedRpcCall call)
        {
            if (call.Version == TestServiceConstants.TestServiceVersion)
            {
                switch (call.Procedure)
                {
                case TestServiceConstants.Ping_1:
                {
                    var args = new PingStruct();
                    call.RetrieveCall(args);
                    var result = Ping_1(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                case TestServiceConstants.TestMyStruct_1:
                {
                    var args = new MyStruct();
                    call.RetrieveCall(args);
                    var result = TestMyStruct_1(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                default:
                    call.ProcedureUnavailable();
                    break;
                }
            }
            else if (call.Version == TestServiceConstants.TestServiceVersion2)
            {
                switch (call.Procedure)
                {
                case TestServiceConstants.Ping2_2:
                {
                    var args = new PingStruct();
                    call.RetrieveCall(args);
                    var result = Ping2_2(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                case TestServiceConstants.TestMyStruct2_2:
                {
                    var args = new MyStruct();
                    call.RetrieveCall(args);
                    var result = TestMyStruct2_2(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                default:
                    call.ProcedureUnavailable();
                    break;
                }
            }
            else
            {
                call.ProgramMismatch();
            }
        }
Exemple #4
0
        protected override void DispatchReceivedCall(ReceivedRpcCall call)
        {
            if (call.Version == PortMapperConstants.PortMapperVersion)
            {
                switch (call.Procedure)
                {
                case PortMapperConstants.Ping_2:
                {
                    var args = new Arguments_0();
                    call.RetrieveCall(args);
                    Ping_2(call.Caller);
                    call.Reply(new Result_0());
                    break;
                }

                case PortMapperConstants.Set_2:
                {
                    var args = new Mapping();
                    call.RetrieveCall(args);
                    var result = new Result_1();
                    result.Value = Set_2(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                case PortMapperConstants.Unset_2:
                {
                    var args = new Mapping();
                    call.RetrieveCall(args);
                    var result = new Result_2();
                    result.Value = Unset_2(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                case PortMapperConstants.GetPort_2:
                {
                    var args = new Mapping();
                    call.RetrieveCall(args);
                    var result = new Result_3();
                    result.Value = GetPort_2(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                case PortMapperConstants.Dump_2:
                {
                    var args = new Arguments_4();
                    call.RetrieveCall(args);
                    var result = Dump_2(call.Caller);
                    call.Reply(result);
                    break;
                }

                case PortMapperConstants.Call_2:
                {
                    var args = new CallArguments();
                    call.RetrieveCall(args);
                    var result = Call_2(call.Caller, args);
                    call.Reply(result);
                    break;
                }

                default:
                    call.ProcedureUnavailable();
                    break;
                }
            }
            else
            {
                call.ProgramMismatch();
            }
        }