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