using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using Tango.RemoteDesktop.Frames;
using Tango.RemoteDesktop.Network;
namespace Tango.FSE.Common.RemoteDesktop
{
///
/// Represents a machine PPC remote desktop provider.
///
public interface IRemoteDesktopProvider
{
///
/// Occurs when a remote desktop session has started.
///
event EventHandler SessionStarted;
///
/// Occurs when a remote desktop session has stopped.
///
event EventHandler SessionStopped;
///
/// Occurs when a new remote desktop screen frame is available.
///
event EventHandler FrameReceived;
///
/// Gets the current remote desktop session frame rate.
///
double FrameRate { get; }
///
/// Gets the current remote desktop session frame width.
///
int FrameWidth { get; }
///
/// Gets the current remote desktop session frame height.
///
int FrameHeight { get; }
///
/// Gets a value indicating whether the WebRTC channel is available.
///
bool IsWebRtcActive { get; }
///
/// Gets or sets a value indicating whether enable the WebRTC channel.
///
bool EnableWebRtc { get; set; }
///
/// Gets a value indicating whether a remote desktop session is active.
///
bool InSession { get; }
///
/// Gets a value indicating whether a remote desktop session can be started.
///
bool CanStartSession { get; }
///
/// Gets or sets the mouse move send interval.
///
TimeSpan MouseMoveInterval { get; set; }
///
/// Starts a remote desktop session.
///
///
Task StartSession();
///
/// Ends the current remote desktop session.
///
///
Task EndSession();
///
/// Creates a video recording handler.
///
///
VideoRecordingHandler CreateRecordingHandler();
///
/// Sends a mouse down command to the remote PPC.
///
/// The button.
/// The location.
/// Size of the view.
void MouseDown(MouseButton button, Point location, Size viewSize);
///
/// Sends a mouse up command to the remote PPC.
///
/// The button.
/// The location.
/// Size of the view.
void MouseUp(MouseButton button, Point location, Size viewSize);
///
/// Sends a mouse move command to the remote PPC.
///
/// The location.
/// Size of the view.
void MouseMove(Point location, Size viewSize);
///
/// Sends a mouse double click command to the remote PPC.
///
/// The button.
/// The location.
/// Size of the view.
void MouseDoubleClick(MouseButton button, Point location, Size viewSize);
///
/// Send a mouse scroll command to the remote PPC.
///
/// The delta.
/// The location.
/// Size of the view.
void MouseScroll(int delta, Point location, Size viewSize);
///
/// Sends a touch down command to the remote PPC.
///
/// The location.
/// Size of the view.
void TouchDown(Point location, Size viewSize);
///
/// Sends a touch move command to the remote PPC.
///
/// The delta x.
/// The delta y.
/// Size of the view.
void TouchMove(int deltaX, int deltaY, Size viewSize);
///
/// Sends a touch up command to the remote PPC.
///
void TouchUp();
///
/// Sends a key down command to the remote PPC.
///
/// The key.
/// if set to true [control down].
/// if set to true [shit down].
/// if set to true [alt down].
void KeyboardDown(Key key, bool ctrlDown, bool shitDown, bool altDown);
///
/// Sends a key up command to the remote PPC.
///
/// The key.
/// if set to true [control down].
/// if set to true [shit down].
/// if set to true [alt down].
void KeyboardUp(Key key, bool ctrlDown, bool shitDown, bool altDown);
///
/// Sends the specified predefined remote desktop command.
///
/// The command.
void SendCommand(RemoteDesktopCommand command);
///
/// Sets the remote cursor visibility.
///
/// if set to true [visible].
void SetRemoteCursorVisibility(bool visible);
///
/// Gets a single remote desktop screen-shot.
///
///
Task GetDesktopScreenShot();
}
}