diff --git a/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoAsyncServer/CS/server.cs b/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoAsyncServer/CS/server.cs
index 73d71577836..93f2db92e72 100644
--- a/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoAsyncServer/CS/server.cs
+++ b/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoAsyncServer/CS/server.cs
@@ -14,14 +14,14 @@ namespace Examples.NegotiateStreamExample
public class AsynchronousAuthenticatingTcpListener
{
public static void Main()
- {
+ {
// Create an IPv4 TCP/IP socket.
TcpListener listener = new TcpListener(IPAddress.Any, 11000);
// Listen for incoming connections.
listener.Start();
- while (true)
+ while (true)
{
- TcpClient clientRequest = null;
+ TcpClient clientRequest;
// Application blocks while waiting for an incoming connection.
// Type CNTL-C to terminate the server.
clientRequest = listener.AcceptTcpClient();
@@ -29,103 +29,94 @@ public static void Main()
// A client has connected.
try
{
- AuthenticateClient (clientRequest);
+ AuthenticateClient(clientRequest);
}
catch (Exception e)
{
Console.WriteLine(e);
- continue;
}
}
}
- //
+
+//
public static void AuthenticateClient(TcpClient clientRequest)
{
- NetworkStream stream = clientRequest.GetStream();
+ NetworkStream stream = clientRequest.GetStream();
// Create the NegotiateStream.
- NegotiateStream authStream = new NegotiateStream(stream, false);
+ NegotiateStream authStream = new NegotiateStream(stream, false);
// Save the current client and NegotiateStream instance
// in a ClientState object.
ClientState cState = new ClientState(authStream, clientRequest);
// Listen for the client authentication request.
- authStream.BeginAuthenticateAsServer (
- new AsyncCallback(EndAuthenticateCallback),
- cState
- );
- // Wait until the authentication completes.
- cState.Waiter.WaitOne();
- cState.Waiter.Reset();
- authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length,
- new AsyncCallback(EndReadCallback),
- cState);
- cState.Waiter.WaitOne();
- // Finished with the current client.
- authStream.Close();
- clientRequest.Close();
- }
- //
- // The following method is invoked by the
- // BeginAuthenticateAsServer callback delegate.
+ Task authTask = authStream
+ .AuthenticateAsServerAsync()
+ .ContinueWith(task => { EndAuthenticateCallback(cState); });
- //
- public static void EndAuthenticateCallback (IAsyncResult ar)
- {
- // Get the saved data.
- ClientState cState = (ClientState) ar.AsyncState;
- TcpClient clientRequest = cState.Client;
- NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream;
- Console.WriteLine("Ending authentication.");
// Any exceptions that occurred during authentication are
// thrown by the EndAuthenticateAsServer method.
- try
+ try
{
// This call blocks until the authentication is complete.
- authStream.EndAuthenticateAsServer(ar);
+ authTask.Wait();
}
catch (AuthenticationException e)
{
Console.WriteLine(e);
Console.WriteLine("Authentication failed - closing connection.");
- cState.Waiter.Set();
return;
}
catch (Exception e)
{
Console.WriteLine(e);
Console.WriteLine("Closing connection.");
- cState.Waiter.Set();
return;
}
+
+ Task readTask = authStream
+ .ReadAsync(cState.Buffer, 0, cState.Buffer.Length);
+
+ readTask
+ .ContinueWith((task) => { EndReadCallback(cState, task.Result); })
+ .Wait();
+ // Finished with the current client.
+ authStream.Close();
+ clientRequest.Close();
+ }
+//
+
+//
+ private static void EndAuthenticateCallback(ClientState cState)
+ {
+ // Get the saved data.
+ NegotiateStream authStream = (NegotiateStream)cState.AuthenticatedStream;
+ Console.WriteLine("Ending authentication.");
+
// Display properties of the authenticated client.
IIdentity id = authStream.RemoteIdentity;
- Console.WriteLine("{0} was authenticated using {1}.",
- id.Name,
+ Console.WriteLine("{0} was authenticated using {1}.",
+ id.Name,
id.AuthenticationType
- );
- cState.Waiter.Set();
- }
+ );
+ }
//
+
//
- public static void EndReadCallback(IAsyncResult ar)
+ private static void EndReadCallback(ClientState cState, int bytes)
{
- // Get the saved data.
- ClientState cState = (ClientState) ar.AsyncState;
- TcpClient clientRequest = cState.Client;
- NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream;
- // Get the buffer that stores the message sent by the client.
- int bytes = -1;
+ NegotiateStream authStream = (NegotiateStream)cState.AuthenticatedStream;
// Read the client message.
try
{
- bytes = authStream.EndRead(ar);
- cState.Message.Append(Encoding.UTF8.GetChars(cState.Buffer, 0, bytes));
- if (bytes != 0)
- {
- authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length,
- new AsyncCallback(EndReadCallback),
- cState);
- return;
- }
+ cState.Message.Append(Encoding.UTF8.GetChars(cState.Buffer, 0, bytes));
+ if (bytes != 0)
+ {
+ Task readTask = authStream.ReadAsync(cState.Buffer, 0, cState.Buffer.Length);
+ readTask
+ .ContinueWith(task => { EndReadCallback(cState, task.Result); })
+ .Wait();
+
+ return;
+ }
}
catch (Exception e)
{
@@ -133,55 +124,32 @@ public static void EndReadCallback(IAsyncResult ar)
// useful here, such as logging the failure.
Console.WriteLine("Client message exception:");
Console.WriteLine(e);
- cState.Waiter.Set();
return;
}
IIdentity id = authStream.RemoteIdentity;
Console.WriteLine("{0} says {1}", id.Name, cState.Message.ToString());
- cState.Waiter.Set();
}
- //
+//
}
// ClientState is the AsyncState object.
internal class ClientState
{
- private AuthenticatedStream authStream = null;
- private TcpClient client = null;
- byte[] buffer = new byte[2048];
- StringBuilder message = null;
- ManualResetEvent waiter = new ManualResetEvent(false);
+ private StringBuilder _message = null;
+
internal ClientState(AuthenticatedStream a, TcpClient theClient)
{
- authStream = a;
- client = theClient;
- }
- internal TcpClient Client
- {
- get { return client;}
- }
- internal AuthenticatedStream AuthenticatedStream
- {
- get { return authStream;}
- }
- internal byte[] Buffer
- {
- get { return buffer;}
+ AuthenticatedStream = a;
+ Client = theClient;
}
+ internal TcpClient Client { get; }
+
+ internal AuthenticatedStream AuthenticatedStream { get; }
+
+ internal byte[] Buffer { get; } = new byte[2048];
+
internal StringBuilder Message
{
- get
- {
- if (message == null)
- message = new StringBuilder();
- return message;
- }
- }
- internal ManualResetEvent Waiter
- {
- get
- {
- return waiter;
- }
+ get { return _message ??= new StringBuilder(); }
}
}
}
diff --git a/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoasyncClient/CS/client.cs b/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoasyncClient/CS/client.cs
index a969d0be7ab..eada82a36ab 100644
--- a/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoasyncClient/CS/client.cs
+++ b/samples/snippets/csharp/VS_Snippets_Remoting/NclNegoasyncClient/CS/client.cs
@@ -28,75 +28,60 @@ public static void Main(String[] args)
Console.WriteLine("Client connected to {0}.", remoteEP.ToString());
// Ensure the client does not close when there is
// still data to be sent to the server.
- client.LingerState = (new LingerOption(true, 0));
+ client.LingerState = new LingerOption(true, 0);
//
// Request authentication.
NetworkStream clientStream = client.GetStream();
- NegotiateStream authStream = new NegotiateStream(clientStream, false);
+ NegotiateStream authStream = new NegotiateStream(clientStream, false);
//
// Pass the NegotiateStream as the AsyncState object
// so that it is available to the callback delegate.
- IAsyncResult ar = authStream.BeginAuthenticateAsClient(
- new AsyncCallback(EndAuthenticateCallback),
- authStream
- );
+ Task authenticateTask = authStream
+ .AuthenticateAsClientAsync()
+ .ContinueWith(task =>
+ {
+ Console.WriteLine("Client ending authentication...");
+ Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);
+ });
+
//
Console.WriteLine("Client waiting for authentication...");
// Wait until the result is available.
- ar.AsyncWaitHandle.WaitOne();
+ authenticateTask.Wait();
// Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream);
// Send a message to the server.
// Encode the test data into a byte array.
byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
- ar = authStream.BeginWrite(message, 0, message.Length,
- new AsyncCallback(EndWriteCallback),
- authStream);
+ Task writeTask = authStream
+ .WriteAsync(message, 0, message.Length)
+ .ContinueWith(task =>
+ {
+ Console.WriteLine("Client ending write operation...");
+ });
+
//
- ar.AsyncWaitHandle.WaitOne();
+ writeTask.Wait();
Console.WriteLine("Sent {0} bytes.", message.Length);
// Close the client connection.
authStream.Close();
Console.WriteLine("Client closed.");
}
- //
- // The following method is called when the authentication completes.
- public static void EndAuthenticateCallback (IAsyncResult ar)
- {
- Console.WriteLine("Client ending authentication...");
- NegotiateStream authStream = (NegotiateStream) ar.AsyncState;
- Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);
-
- // End the asynchronous operation.
- authStream.EndAuthenticateAsClient(ar);
- }
- //
- //
- // The following method is called when the write operation completes.
- public static void EndWriteCallback (IAsyncResult ar)
- {
- Console.WriteLine("Client ending write operation...");
- NegotiateStream authStream = (NegotiateStream) ar.AsyncState;
-
- // End the asynchronous operation.
- authStream.EndWrite(ar);
- }
- //
}
- //
+//
// The following class displays the properties of an authenticatedStream.
public class AuthenticatedStreamReporter
-{
- public static void DisplayProperties(AuthenticatedStream stream)
- {
- Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated);
- Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated);
- Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted);
- Console.WriteLine("IsSigned: {0}", stream.IsSigned);
- Console.WriteLine("IsServer: {0}", stream.IsServer);
+ {
+ public static void DisplayProperties(AuthenticatedStream stream)
+ {
+ Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated);
+ Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated);
+ Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted);
+ Console.WriteLine("IsSigned: {0}", stream.IsSigned);
+ Console.WriteLine("IsServer: {0}", stream.IsServer);
+ }
}
-}
- //
+//
}
//