using System;
using Unity.WebRTC;
using UnityEngine;
using Unity.RenderStreaming.InputSystem;
using System.Collections;
using static Unity.RenderStreaming.InputSystem.InputRemoting;
using System.Text;
namespace Unity.RenderStreaming
{
///
///
///
[AddComponentMenu("Render Streaming/Input Sender")]
public class InputSender : DataChannelBase
{
private Sender sender;
private InputRemoting senderInput;
private IDisposable suscriberDisposer;
///
///
///
///
public override void SetChannel(string connectionId, RTCDataChannel channel)
{
if (channel == null)
{
Dispose();
}
else
{
sender = new Sender();
senderInput = new InputRemoting(sender);
suscriberDisposer = senderInput.Subscribe(new Observer(channel));
channel.OnOpen += OnOpen;
channel.OnClose += OnClose;
}
base.SetChannel(connectionId, channel);
}
///
///
///
/// Texture Size.
/// Region of the texture in world coordinate system.
public void CalculateInputResion(Rect region, Vector2Int size)
{
sender.CalculateInputRegion(region, new Rect(Vector2.zero, size));
}
///
///
///
///
public void EnableInputPositionCorrection(bool enabled)
{
sender.EnableInputPositionCorrection = enabled;
}
void OnOpen()
{
senderInput.StartSending();
}
public void SendMessage(Message message)
{
if(senderInput!=null)
senderInput.Send(message);
}
void OnClose()
{
senderInput.StopSending();
}
protected virtual void OnDestroy()
{
this.Dispose();
}
protected void Dispose()
{
senderInput?.StopSending();
suscriberDisposer?.Dispose();
sender?.Dispose();
sender = null;
}
}
}