public void Send(byte[] buf, int start, int len) { UnityEngine.Debug.Assert(len > 0); IntPtr buffer = Marshal.AllocHGlobal(len); Marshal.Copy(buf, 0, buffer, len); Rudp_CSharp.rudpaux_send(_u, buffer, len); Marshal.FreeHGlobal(buffer); }
public void Update(byte[] buf, int start, int len, int tick) { if (buf == null || len == 0) { Rudp_CSharp.rudpaux_update(_u, IntPtr.Zero, 0, tick); } else { Marshal.Copy(buf, start, _buffer, len); Rudp_CSharp.rudpaux_update(_u, _buffer, len, tick); } }
protected override void Dispose(bool disposing) { if (_disposed) { return; } if (disposing) { // 清理托管资源,调用自己管理的对象的Dispose方法 } // 清理非托管资源 Marshal.FreeHGlobal(_buffer); Rudp_CSharp.rudpaux_free(_u); _disposed = true; }
public Rudp(SharpC sharpc, int send_delay, int expired_time) { _sharpc = sharpc; SharpC.CSObject cso0 = sharpc.CacheObj(this); SharpC.CSObject cso1 = sharpc.CacheFunc(RSend); SharpC.CSObject cso2 = sharpc.CacheFunc(RRecv); _u = Rudp_CSharp.rudpaux_alloc(send_delay, expired_time, cso0, cso1, cso2); _buffer = Marshal.AllocHGlobal(3072); _sendBuffer = new byte[3072]; _recvBuffer = new byte[3072]; }
public Rudp(SharpC sharpc, int send_delay, int expired_time) { _sharpc = sharpc; SharpC.CSObject cso0 = SharpC.CacheObj(this); SharpC.CSObject cso1 = SharpC.CacheFunc(RSend); SharpC.CSObject cso2 = SharpC.CacheFunc(RRecv); SharpC.CSObject cso3 = new SharpC.CSObject(); cso3.type = SharpC.CSType.INTPTR; cso3.ptr = _sharpc.CPtr; _u = Rudp_CSharp.rudpaux_alloc(send_delay, expired_time, cso3, cso0, cso1, cso2); _buffer = Marshal.AllocHGlobal(3072); // 单线程 _sendBuffer = new byte[3072]; _recvBuffer = new byte[3072]; }
public void Send(byte[] buf, int start, int len) { UnityEngine.Debug.Assert(len <= 3072); Marshal.Copy(buf, start, _buffer, len); Rudp_CSharp.rudpaux_send(_u, _buffer, len); }