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(); }
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(); } }
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); }
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); }
/// <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; } }
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 } }