using Google.Protobuf; using NativeWebSocket; using UnityEngine; public class SocketManager : MonoBehaviour { private WebSocket _ws; public static SocketManager Instance { get; private set; } private void Awake() { if (Instance != null) { Destroy(gameObject); return; } Instance = this; } public async void Connect() { // _ws = new WebSocket($"wss://www.hlsq.asia/ws/?token={Random.Range(1, 1000)}"); _ws = new WebSocket($"ws://127.0.0.1:8501/?token={Random.Range(1, 1000)}"); _ws.OnOpen += () => { Debug.Log("Connection open!"); SendMessage(MessageID.EnterInstance, new C2S_EnterInstance { InstanceID = 1 }); }; _ws.OnError += (e) => { Debug.Log("Error! " + e); }; _ws.OnClose += (e) => { Debug.Log("Connection closed!"); }; _ws.OnMessage += (bytes) => { var message = Message.Parser.ParseFrom(bytes); Debug.Log("OnMessage: " + message.ID); SocketMessageManager.Instance.TriggerEvent(message.ID, message.Payload); }; await _ws.Connect(); } public void SendMessage(MessageID id, IMessage msg) { var m = new Message { ID = id, Payload = ByteString.CopyFrom(msg.ToByteArray()) }; _ws.Send(m.ToByteArray()); } private void Update() { #if !UNITY_WEBGL || UNITY_EDITOR _ws?.DispatchMessageQueue(); #endif } private async void OnApplicationQuit() { await _ws.Close(); } }