TG9six 03a642d635 first push
first push
2025-09-06 17:17:39 +04:00

163 lines
3.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NativeWebSocket;
public class GIWebSocket
{
private WebSocket websocket;
private Queue inputStream;
// Start is called before the first frame update
public GIWebSocket()
{
inputStream = new Queue();
}
public async System.Threading.Tasks.Task<bool> connect(string serverIP, int port)
{
//Debug.Log("attempting to connect");
websocket = new WebSocket("ws://" + serverIP + ":" + port);
websocket.OnOpen += () =>
{
closed = false;
Debug.Log("Connection open!");
PacketManager.sendLoginRequest(Client.Instance.myUsername, Client.Instance.myPassword);
};
websocket.OnError += (e) =>
{
Debug.Log("Error! " + e);
//set the login message
UIManager.Instance.LoginMessage.text = "Error connecting to server.";
};
websocket.OnClose += (e) =>
{
Debug.Log("Connection closed!");
closed = true;
};
websocket.OnMessage += (bytes) =>
{
// Reading a plain text message
//var message = System.Text.Encoding.UTF8.GetString(bytes);
//Debug.Log("Received OnMessage! (" + bytes.Length + " bytes) ");
String data = "";
if (bytes.Length == 2)
{
if (bytes[1] == 2)
{
return;
}
}
for (int i = 0; i < bytes.Length; i++)
{
data += bytes[i] + " ";
this.inputStream.Enqueue(bytes[i]);
}
//Debug.Log(data);
};
// waiting for messages
await websocket.Connect();
//run this after 1 second
//Client.Instance.pushOutStreamCR();
return true;
}
public void Update()
{
#if !UNITY_WEBGL || UNITY_EDITOR
if (websocket != null)
{
websocket.DispatchMessageQueue();
}
#endif
}
public async void SendWebSocketMessage()
{
if (websocket.State == WebSocketState.Open)
{
// Sending bytes
await websocket.Send(new byte[] { 10, 20, 30 });
// Sending plain text
await websocket.SendText("plain text message");
}
else
{
Debug.Log("not connected.");
}
}
public void readInputStream(ref byte[] data, int size)
{
if (size > inputStream.Count)
{
throw new System.IO.IOException("EOF");
}
if (websocket.State == WebSocketState.Open)
{
for (int i = 0; i < size; i++)
{
data[i] = (byte)inputStream.Dequeue();
}
}
}
public void send(byte[] packet)
{
if (websocket == null)
return;
if (websocket.State == WebSocketState.Open)
{
//uncomment to prefix size
// Sending bytes
// short size = (short)(packet.Length - 1);
// byte[] payload = new byte[packet.Length + 2];
// payload[0] = (byte)(size >> 8);
// payload[1] = (byte)size;
//
// for (int i = 0; i < packet.Length; i++)
// {
// payload[i + 2] = packet[i];
// }
websocket.Send(packet);
}
}
public int available()
{
return inputStream.Count;
}
public void close()
{
websocket.Close();
closed = true;
}
public bool isClosed()
{
return closed;
}
private bool closed;
}