//#define TEXTURE_RAW_DATA using Grpc.Core; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace UltraCombos.Marvel.DrawHeroes { public class ResourceClient : GrpcClientBase { [Configuration.Config] public string overrideHost = "127.0.0.1"; [System.Serializable] public class PageEvent : UnityEvent { } [Space(10)] [Header("Draw Your Own Heroes")] public PageEvent onPageReceived = new PageEvent(); public UnityEvent onTextureSent = new UnityEvent(); private void Start() { DebugInformation.Instance.UpdateProperty("Local IP", $"{Utility.Network.GetLocalIPAddress()}"); } private void Update() { if (channel == null || host.Equals(overrideHost) == false) { Init(); } DebugInformation.Instance.UpdateProperty(name, $"{host}:{port}"); } private void Init() { host = overrideHost; var options = new List { new ChannelOption(ChannelOptions.MaxSendMessageLength, int.MaxValue) }; Connect(options); } bool is_index_got = false; public void GetPage() { if (State != ChannelState.Ready || is_index_got) return; GetPageAsync(); } private async void GetPageAsync() { try { var data = AppData.Instance; is_index_got = true; var client = new Resource.ResourceClient(channel); var reply = await client.GetPageAsync(new Device() { Id = data.deviceId }); Log($"OnPageReceived: {reply.Id}"); data.roleId = reply.Id; data.serial = reply.Serial; onPageReceived.Invoke(reply.Id); } catch (System.Exception e) { Log(e.Message, LogType.Error); is_index_got = false; } } bool is_data_sent = false; public void SendData(Texture2D painting, Texture2D signature, Texture2D thumbnail) { if (State != ChannelState.Ready || is_data_sent) return; #if false var content = tex.GetRawTextureData(); #else //var content = tex.EncodeToJPG(); var painting_content = painting.EncodeToPNG(); var signature_content = signature.EncodeToPNG(); var thumbnail_content = thumbnail.EncodeToPNG(); #endif var data = AppData.Instance; SendDataAsync(new DataRequest() { Id = data.roleId, Serial = data.serial, Content = Google.Protobuf.ByteString.CopyFrom(painting_content), Signature = Google.Protobuf.ByteString.CopyFrom(signature_content), Thumbnail = Google.Protobuf.ByteString.CopyFrom(thumbnail_content), }); } private async void SendDataAsync(DataRequest request) { try { is_data_sent = true; var client = new Resource.ResourceClient(channel); var reply = await client.SendDataAsync(request); Log(reply.Result); onTextureSent.Invoke(); } catch (System.Exception e) { is_data_sent = false; Log(e.Message, LogType.Error); } } } }