public void ConnectClientToServerClientDisconnects()
{
var server = new TcpipServer(_ipEndPoint);
var e = new AutoResetEvent(false);
var e1 = 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;
server.NewClient = ch =>
{
Assert.Equal(_ipEndPoint, (ch as ITcpIpChannel).LocalEndPoint);
clientEndPoint = (ch as ITcpIpChannel).RemoteEndPoint;
ch.OnConnect.Subscribe(u => onServerConnected = true,
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; e2.Set();
});
e.Set();
};
server.StartListening();
try
{
var client = new TcpipClient(_ipEndPoint);
client.OnConnect.Subscribe(u =>
{
onClientConnected = true;
clientEndPoint2 = client.LocalEndPoint;
Assert.Equal(_ipEndPoint, client.RemoteEndPoint);
e1.Set();
},
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);
client.ConnectAsync();
Assert.True(e.WaitOne(TimeSpan.FromSeconds(10)));
Assert.True(e1.WaitOne(TimeSpan.FromSeconds(10)));
client.Dispose();
Assert.True(clientcompleted);
Assert.True(clientcompleted2);
Assert.True(e2.WaitOne(TimeSpan.FromSeconds(10)));
Assert.True(servercompleted);
Assert.True(servercompleted2);
Assert.True(onClientConnected);
Assert.True(onServerConnected);
Assert.Equal(clientEndPoint, clientEndPoint2);
}
finally
{
server.StopListening();
}
}