123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- //using System;
- //using System.Net;
- //using System.Net.Sockets;
- //namespace IFramework.Net.KCP
- //{
- // class UDPSession
- // {
- // private Socket mSocket = null;
- // private KCP mKCP = null;
- // private ByteBuffer mRecvBuffer = ByteBuffer.Allocate(1024 * 32);
- // private UInt32 mNextUpdateTime = 0;
- // public bool IsConnected { get { return mSocket != null && mSocket.Connected; } }
- // public bool WriteDelay { get; set; }
- // public bool AckNoDelay { get; set; }
- // public IPEndPoint RemoteAddress { get; private set; }
- // public IPEndPoint LocalAddress { get; private set; }
- // public void Connect(string host, int port)
- // {
- // IPHostEntry hostEntry = Dns.GetHostEntry(host);
- // if (hostEntry.AddressList.Length == 0)
- // {
- // throw new Exception("Unable to resolve host: " + host);
- // }
- // var endpoint = hostEntry.AddressList[0];
- // mSocket = new Socket(endpoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
- // mSocket.Connect(endpoint, port);
- // RemoteAddress = (IPEndPoint)mSocket.RemoteEndPoint;
- // LocalAddress = (IPEndPoint)mSocket.LocalEndPoint;
- // mKCP = new KCP((uint)(new Random().Next(1, Int32.MaxValue)), null);
- // // normal: 0, 40, 2, 1
- // // fast: 0, 30, 2, 1
- // // fast2: 1, 20, 2, 1
- // // fast3: 1, 10, 2, 1
- // mKCP.NoDelay(0, 30, 2, true);
- // mKCP.stream=true;
- // mRecvBuffer.Clear();
- // }
- // public void Close()
- // {
- // if (mSocket != null)
- // {
- // mSocket.Close();
- // mSocket = null;
- // mRecvBuffer.Clear();
- // }
- // }
- // public int Send(byte[] data, int index, int length)
- // {
- // if (mSocket == null)
- // return -1;
- // var waitsnd = mKCP.waitToSend;
- // if (waitsnd < mKCP.sendWindow && waitsnd < mKCP.RmtWnd)
- // {
- // var sendBytes = 0;
- // do
- // {
- // var n = Math.Min((int)mKCP.Mss, length - sendBytes);
- // mKCP.Send(data, index + sendBytes, n);
- // sendBytes += n;
- // } while (sendBytes < length);
- // waitsnd = mKCP.waitToSend;
- // if (waitsnd >= mKCP.sendWindow || waitsnd >= mKCP.RmtWnd || !WriteDelay)
- // {
- // mKCP.Flush(false);
- // }
- // return length;
- // }
- // return 0;
- // }
- // public int Recv(byte[] data, int index, int length)
- // {
- // // 上次剩下的部分
- // if (mRecvBuffer.canRead > 0)
- // {
- // var recvBytes = Math.Min(mRecvBuffer.canRead, length);
- // Buffer.BlockCopy(mRecvBuffer.buffer, mRecvBuffer.reader, data, index, recvBytes);
- // mRecvBuffer.reader += recvBytes;
- // // 读完重置读写指针
- // if (mRecvBuffer.reader == mRecvBuffer.writer)
- // {
- // mRecvBuffer.Clear();
- // }
- // return recvBytes;
- // }
- // if (mSocket == null)
- // return -1;
- // if (!mSocket.Poll(0, SelectMode.SelectRead))
- // {
- // return 0;
- // }
- // var rn = 0;
- // try
- // {
- // rn = mSocket.Receive(mRecvBuffer.buffer, mRecvBuffer.writer, mRecvBuffer.canWrite, SocketFlags.None);
- // }
- // catch (Exception ex)
- // {
- // Console.WriteLine(ex);
- // rn = -1;
- // }
- // if (rn <= 0)
- // {
- // return rn;
- // }
- // mRecvBuffer.writer += rn;
- // var inputN = mKCP.Input(mRecvBuffer.buffer, mRecvBuffer.reader, mRecvBuffer.canRead, true, AckNoDelay);
- // if (inputN < 0)
- // {
- // mRecvBuffer.Clear();
- // return inputN;
- // }
- // mRecvBuffer.Clear();
- // // 读完所有完整的消息
- // for (; ; )
- // {
- // var size = mKCP.PeekSize();
- // if (size <= 0) break;
- // mRecvBuffer.EnsureWritableBytes(size);
- // var n = mKCP.Recv(mRecvBuffer.buffer, mRecvBuffer.writer, size);
- // if (n > 0) mRecvBuffer.writer += n;
- // }
- // // 有数据待接收
- // if (mRecvBuffer.canRead > 0)
- // {
- // return Recv(data, index, length);
- // }
- // return 0;
- // }
- // public void Update()
- // {
- // if (mSocket == null)
- // return;
- // if (0 == mNextUpdateTime || mKCP.time >= mNextUpdateTime)
- // {
- // mKCP.Update();
- // mNextUpdateTime = mKCP.Check();
- // }
- // }
- // public void Send(byte[] buffer, int length)
- // {
- // if (mSocket != null)
- // {
- // mSocket.Send(buffer, length, SocketFlags.None);
- // }
- // }
- // }
- //}
|