// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file was auto-generated by the vanadium vdl tool.

// Source: media.vdl
package io.v.x.media_sharing;


@io.v.v23.vdl.VServer(
    serverWrapper = io.v.x.media_sharing.MediaSharingServerWrapper.class
)
public interface MediaSharingServer  {

    
    

    
    /**
 * DisplayURL will cause the server to display whatever media is at
 * the given URL.  The server will rely on the ContentType response
 * header it gets when fetching the url to decide how to display
 * the media.
*/
    void displayUrl(io.v.v23.context.VContext ctx, io.v.v23.rpc.ServerCall call, final java.lang.String url) throws io.v.v23.verror.VException;

    
    

    
    /**
 * DisplayBytes will cause the server to display whatever media is
 * sent in the stream.  In the case of audio or movie media, the
 * media should be played while the data is streaming.  The mediaType
 * can be used by the server to decide how to display the media.
*/
    void displayBytes(io.v.v23.context.VContext ctx, io.v.v23.rpc.ServerCall call, final java.lang.String mediaType, io.v.v23.vdl.Stream<java.lang.Void, byte[]> stream) throws io.v.v23.verror.VException;

}
