public static async Task <StreamSocketConnection> AcceptConnectionAsync(StreamSocket socket, IObjectSerializer serializer) { // Receive connection request, send connection response using (var reader = new DataReader(socket.InputStream)) using (var writer = new DataWriter(socket.OutputStream)) { var request = await serializer.DeserializeFromStreamAsync(reader, CancellationToken.None) as ConnectionRequestMessage; if (request == null) { // Wrong message received => reject connection await serializer.SerializeToStreamAsync(new ConnectionResponseMessage(null), writer); socket.Dispose(); return(null); } else { // Accept connection request var connectionId = "SSC_" + Guid.NewGuid(); await serializer.SerializeToStreamAsync(new ConnectionResponseMessage(connectionId), writer); reader.DetachStream(); writer.DetachStream(); var connection = new StreamSocketConnection(connectionId, socket, serializer); return(connection); } } }
internal static async Task <StreamSocketConnection> ConnectAsync(StreamSocket socket, IObjectSerializer serializer) { // Send connection request, receive connection response using (var reader = new DataReader(socket.InputStream)) using (var writer = new DataWriter(socket.OutputStream)) { await serializer.SerializeToStreamAsync(new ConnectionRequestMessage(), writer); var response = await serializer.DeserializeFromStreamAsync(reader, CancellationToken.None); if (response is ConnectionResponseMessage connectionResponse && connectionResponse.IsSuccessful) { reader.DetachStream(); writer.DetachStream(); return(new StreamSocketConnection(connectionResponse.ConnectionId, socket, serializer)); }