TH1/Unity/Assets/Plugins/ViSDK/ViNet/ViNetClient.cs
2025-08-20 02:24:48 +08:00

151 lines
3.5 KiB
C#

using System;
//using UnityWebSocket;
//
public class ViNetClientBuffer
{
public static byte[] Convert(byte[] buffer, int len)
{
if (len < BufferList.Length)
{
byte[] localBuffer = BufferList[len];
if (localBuffer == null)
{
localBuffer = new byte[len];
BufferList[len] = localBuffer;
}
for (int iter = 0; iter < len; ++iter)
{
localBuffer[iter] = buffer[iter];
}
return localBuffer;
}
else
{
byte[] result = new byte[len];
Array.Copy(buffer, result, len);
return result;
}
}
//
static readonly byte[][] BufferList = new byte[256][];
}
//
public class ViNetClient
{
public ViDelegateAssisstant.Dele ConnectCallback = null;
public ViDelegateAssisstant.Dele ConnectFailedCallback = null;
public ViDelegateAssisstant.Dele DisconnectCallback = null;
public ViDelegateAssisstant.Dele<ViIStream> ReceiveCallback = null;
public ViOStream OS { get { return this._OS; } }
//
public void Start(string address)
{
/*
_socket = new WebSocket(address);
_socket.OnOpen += _OnConnected;
_socket.OnClose += _OnDisConnected;
_socket.OnMessage += _OnReceived;
_socket.OnError += _OnConnectError;
*/
}
//
public void Connect()
{
/*if(_socket.ReadyState != WebSocketState.Closed)
{
return;
}
_socket.ConnectAsync();
*/
}
//
public void ResetSendStream()
{
this.OS.Reset();
}
//
public void WriteToCache()
{
_OSCache.Append(OS);
OS.Reset();
}
//
public void SendCache()
{
/*
if (_socket == null)
{
return;
}
if (_socket.ReadyState != WebSocketState.Open)
{
return;
}
if (_OSCache.Length > 0)
{
_socket.SendAsync(ViNetClientBuffer.Convert(this._OSCache.Cache, this._OSCache.Length));
_OSCache.Reset();
}
*/
}
//
public void End()
{
/*
if (_socket != null)
{
_socket.OnOpen -= _OnConnected;
_socket.OnClose -= _OnDisConnected;
_socket.OnMessage -= _OnReceived;
_socket.OnError -= _OnConnectError;
if (_socket.ReadyState != WebSocketState.Closed)
{
_socket.CloseAsync();
}
_socket = null;
}
//
ConnectCallback = null;
DisconnectCallback = null;
ReceiveCallback = null;
ConnectFailedCallback = null;
*/
}
//
/*
void _OnConnected(object sender, OpenEventArgs args)
{
ViDelegateAssisstant.Invoke(this.ConnectCallback);
}
//
void _OnDisConnected(object sender, CloseEventArgs args)
{
ViDelegateAssisstant.Invoke(this.DisconnectCallback);
}
//
void _OnConnectError(object sender, ErrorEventArgs args)
{
ViDelegateAssisstant.Invoke(this.ConnectFailedCallback);
}
//
static ViIStream CACHE_OnReceive_Stream = new ViIStream();
void _OnReceived(object sender, MessageEventArgs args)
{
byte[] buffer = args.RawData;
ViIStream stream = CACHE_OnReceive_Stream;
stream.Init(buffer, 0, buffer.Length);
//
if (stream.RemainLength > 0)
{
ViDelegateAssisstant.Invoke(ReceiveCallback, stream);
}
}
//*/
ViOStream _OS = new ViOStream();
ViOStream _OSCache = new ViOStream();
//
//WebSocket _socket= null;
}