151 lines
3.5 KiB
C#
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;
|
|
|
|
}
|