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