コード例 #1
0
        public void Run()
        {
            _server           = new TcpipServer(new IPEndPoint(IPAddress.Any, 12345));
            _server.NewClient = ch =>
            {
                _serverService = new Service(ch);
                _serverService.RegisterLocalService <Func <Task> >(ServerAction);
            };
            _server.StartListening();

            _client        = new TcpipClient(new IPEndPoint(IPAddress.Loopback, 12345));
            _clientService = new Service(_client);
            _clientService.OnNewRemoteService.Subscribe(s =>
            {
                Console.WriteLine("NewRemoteService {0}", s);
                _clientFunc = _clientService.QueryRemoteService <Func <Task> >();
            });
            _client.ConnectAsync();
            while (_clientFunc == null)
            {
                Thread.Sleep(1);
            }
            _clientFunc().Wait();
            _serverService.Dispose();
            try
            {
                _clientFunc().Wait();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            _server.StopListening();
        }
コード例 #2
0
        public void ConnectClientToServerServerDisconnects()
        {
            var        server            = new TcpipServer(_ipEndPoint);
            var        e                 = new AutoResetEvent(false);
            var        e2                = new AutoResetEvent(false);
            bool       servercompleted   = false;
            bool       servercompleted2  = false;
            bool       clientcompleted   = false;
            bool       clientcompleted2  = false;
            bool       onServerConnected = false;
            bool       onClientConnected = false;
            IPEndPoint clientEndPoint    = null;
            IPEndPoint clientEndPoint2   = null;
            IChannel   serverChannel     = null;

            server.NewClient = ch =>
            {
                Assert.Equal(_ipEndPoint, (ch as ITcpIpChannel).LocalEndPoint);
                clientEndPoint = (ch as ITcpIpChannel).RemoteEndPoint;
                serverChannel  = ch;
                ch.OnConnect.Subscribe(u => { onServerConnected = true; e.Set(); },
                                       ex => Assert.True(false, ex.ToString()),
                                       () => servercompleted2 = true);
                ch.OnReceive.Subscribe(bb => Assert.True(false, "receive without send"), ex => Assert.True(false, ex.ToString()), () =>
                {
                    servercompleted = true;
                });
            };
            server.StartListening();
            try
            {
                var client = new TcpipClient(_ipEndPoint);
                client.OnConnect.Subscribe(u =>
                {
                    onClientConnected = true;
                    clientEndPoint2   = client.LocalEndPoint;
                    Assert.Equal(_ipEndPoint, client.RemoteEndPoint);
                },
                                           ex => Assert.True(false, ex.ToString()),
                                           () => clientcompleted2 = true);
                client.OnReceive.Subscribe(bb => Assert.True(false, "receive without send"),
                                           ex => Assert.True(false, ex.ToString()),
                                           () => { clientcompleted = true; e2.Set(); });
                client.ConnectAsync();
                Assert.True(e.WaitOne(TimeSpan.FromSeconds(10)));
                serverChannel.Dispose();
                Assert.True(e2.WaitOne(TimeSpan.FromSeconds(10)));
                Assert.True(servercompleted);
                Assert.True(servercompleted2);
                Assert.True(clientcompleted);
                Assert.True(clientcompleted2);
                Assert.True(onClientConnected);
                Assert.True(onServerConnected);
                Assert.Equal(clientEndPoint, clientEndPoint2);
            }
            finally
            {
                server.StopListening();
            }
        }
コード例 #3
0
        public void ConnectNowhereFails()
        {
            var       e                = new AutoResetEvent(false);
            var       client           = new TcpipClient(_ipEndPoint);
            Exception connectException = null;

            client.OnConnect.Subscribe(
                u => Assert.True(false, "Should not connect"),
                ex => connectException = ex,
                () => Assert.True(false, "Connect should end with exception"));
            client.OnReceive.Subscribe(b => { }, () => e.Set());
            client.ConnectAsync();
            Assert.True(e.WaitOne(TimeSpan.FromSeconds(10)));
            Assert.NotNull(connectException);
        }
コード例 #4
0
        public static void Main(string[] args)
        {
            string host        = null;
            int    port        = -1;
            string clsName     = null;
            string dllName     = null;
            Role?  roleRequest = null;
            string playerName  = null;
            bool   eternity    = false;
            bool   verbose     = false;

            for (int i = 0; i < args.Length; i++)
            {
                if (args[i].StartsWith("-"))
                {
                    if (args[i].Equals("-p"))
                    {
                        i++;
                        port = int.Parse(args[i]);
                    }
                    else if (args[i].Equals("-e"))
                    {
                        eternity = true;
                    }
                    else if (args[i].Equals("-h"))
                    {
                        i++;
                        host = args[i];
                    }
                    else if (args[i].Equals("-c"))
                    {
                        i++;
                        clsName = args[i];
                        i++;
                        dllName = args[i];
                        i++;
                        try
                        {
                            if (i > args.Length - 1 || args[i].StartsWith("-")) // Roleでない
                            {
                                i--;
                                roleRequest = null;
                                continue;
                            }
                            roleRequest = (Role)Enum.Parse(typeof(Role), args[i]);
                        }
                        catch (ArgumentException)
                        {
                            Console.Error.WriteLine("No such role as " + args[i]);
                            return;
                        }
                    }
                    else if (args[i].Equals("-n"))
                    {
                        i++;
                        playerName = args[i];
                    }
                    else if (args[i].Equals("-v"))
                    {
                        verbose = true;
                    }
                }
            }
            if (port < 0 || host == null || clsName == null)
            {
                Console.Error.WriteLine("Usage:" + typeof(ClientStarter).Name + " -h host -p port -c clientClass dllName (roleRequest) [-n name] [-e] [-v]");
                return;
            }

            Assembly assembly;

            try
            {
                assembly = Assembly.LoadFrom(dllName);
            }
            catch (FileNotFoundException)
            {
                Console.Error.WriteLine("Can not find " + dllName);
                return;
            }
            catch (Exception)
            {
                Console.Error.WriteLine("Error in loading " + dllName);
                return;
            }

            IPlayer player;

            try
            {
                player = (IPlayer)Activator.CreateInstance(assembly.GetType(clsName));
            }
            catch (Exception)
            {
                Console.Error.WriteLine("Error in creating instance of " + clsName);
                return;
            }

            TcpipClient client = new TcpipClient(host, port, roleRequest);

            client.Completed += Client_Completed;
            if (playerName != null)
            {
                client.PlayerName = playerName;
            }

            int turn = 1;

            do
            {
                if (client.Connect(player))
                {
                    if (verbose)
                    {
                        Console.WriteLine("{0}:Player connected to server:{1}", turn, player);
                    }
                    are.WaitOne();
                    turn++;
                }
                else
                {
                    break;
                }
            }while (eternity);
        }
コード例 #5
0
        /// <summary>
        /// Main method.
        /// </summary>
        /// <param name="args">Arguments.</param>
        /// <remarks>
        /// Usage: [-h host] [-p port] [-t timeout] -c clientClass dllName [-r role] [-n name] [-d]
        /// </remarks>
        public static void Main(string[] args)
        {
            string host             = "localhost";
            int    port             = 10000;
            string clsName          = null;
            string dllName          = null;
            Role   roleRequest      = Role.UNC; // No request by default.
            string playerName       = null;     // Obtained from the player by default.
            int    timeout          = -1;       // No limit by default.
            bool   useDefaultPlayer = false;

            for (int i = 0; i < args.Length; i++)
            {
                if (args[i].Equals("-d"))
                {
                    useDefaultPlayer = true;
                }
                else if (args[i].Equals("-p"))
                {
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        if (!int.TryParse(args[i], out port))
                        {
                            Console.Error.WriteLine("ClientStarter: Invalid port {0}.", args[i]);
                            return;
                        }
                    }
                    else
                    {
                        Usage();
                    }
                }
                else if (args[i].Equals("-h"))
                {
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        host = args[i];
                    }
                    else
                    {
                        Usage();
                    }
                }
                else if (args[i].Equals("-c"))
                {
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        clsName = args[i];
                    }
                    else
                    {
                        Usage();
                    }
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        dllName = args[i];
                    }
                    else
                    {
                        Usage();
                    }
                }
                else if (args[i].Equals("-r"))
                {
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        if (!Enum.TryParse(args[i], out roleRequest))
                        {
                            Console.Error.WriteLine("ClientStarter: Invalid role {0}.", args[i]);
                            return;
                        }
                    }
                    else
                    {
                        Usage();
                    }
                }
                else if (args[i].Equals("-n"))
                {
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        playerName = args[i];
                    }
                    else
                    {
                        Usage();
                    }
                }
                else if (args[i].Equals("-t"))
                {
                    i++;
                    if (i < args.Length || !args[i].StartsWith("-"))
                    {
                        if (!int.TryParse(args[i], out timeout))
                        {
                            Console.Error.WriteLine("ClientStarter: Invalid timeout {0}.", args[i]);
                            return;
                        }
                    }
                    else
                    {
                        Usage();
                    }
                }
            }
            if (port < 0 || (!useDefaultPlayer && clsName == null))
            {
                Usage();
            }

            IPlayer player;

            if (useDefaultPlayer)
            {
                player = new RoleAssignPlayer();
            }
            else
            {
                Assembly assembly;
                try
                {
#if !NETCOREAPP1_1
                    assembly = Assembly.LoadFrom(dllName);
#else
                    assembly = new AssemblyLoader(Path.GetDirectoryName(Path.GetFullPath(dllName))).LoadFromAssemblyPath(Path.GetFullPath(dllName));
#endif
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("ClientStarter: Error in loading {0}.", dllName);
                    Console.Error.WriteLine(e);
                    return;
                }

                try
                {
                    player = (IPlayer)Activator.CreateInstance(assembly.GetType(clsName));
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("ClientStarter: Error in creating instance of {0}.", clsName);
                    Console.Error.WriteLine(e);
                    return;
                }
            }

            TcpipClient client = new TcpipClient(host, port, playerName, roleRequest, timeout);
            try
            {
                client.Connect(player);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("ClientStarter: Error in running player.");
                Console.Error.WriteLine(ex);
                if (ex is AggregateException)
                {
                    foreach (var e in (ex as AggregateException).InnerExceptions)
                    {
                        Console.Error.WriteLine(e);
                    }
                }
                return;
            }
        }
コード例 #6
0
        private void tbConnect_Click(object sender, RoutedEventArgs e)
        {
            byte ctrlID;

            if (!byte.TryParse(tbControllerID.Text, out ctrlID))
            {
                MessageBox.Show("Contriller ID:" + ctrlID + "is not valid");
                return;
            }
            if (parameters.BroadcastIds.Contains(ctrlID))
            {
                MessageBox.Show("Contriller ID:" + ctrlID + "is used as Broadcast ID");
                return;
            }
            parameters.ControllerID = ctrlID;
            // check values
            if (rbCom.IsChecked == true)
            {
                try
                {
                    SerialPort serial_port = new SerialPort(
                        cbComport.SelectedValue.ToString(),
                        Int32.Parse(cbBaudrate.SelectedValue.ToString()),
                        Parity.None, 8, StopBits.One);
                    ComPort comPort = new ComPort(serial_port);
                    parameters.ByteStream = comPort;
                    parameters.RootName   = String.Format("{0}:{1}:{2}bps 8-N-1",
                                                          cbZone.SelectedValue, serial_port.PortName, serial_port.BaudRate);
                }
                catch
                {
                    MessageBox.Show("Can't Open " + cbComport.SelectedValue.ToString());
                    return;
                }
            }
            else if (rbTcpClient.IsChecked == true)
            {
                try
                {
                    string      ip          = IPAddress.Parse(tbClientIp.Text).ToString();
                    int         port        = Int32.Parse(tbClientPort.Text);
                    TcpipClient tcpipClient = new TcpipClient(ip, port);
                    parameters.ByteStream = tcpipClient;
                    parameters.RootName   = cbZone.SelectedValue + ":" + ip + ":" + port;
                }
                catch
                {
                    MessageBox.Show("Can't Open " + tbClientIp.Text + ":" + tbClientPort.Text);
                    return;
                }
            }
            else if (rbTcpServer.IsChecked == true)
            {
            }
            if (parameters.ByteStream == null)
            {
                MessageBox.Show("Connection parameters error!");
            }
            else
            {
                this.DialogResult = true;
                Close();    // close ConnectionMode : Window
            }
        }