/// <summary> /// 数据包输入 /// </summary> /// <param name="data">输入数据</param> /// <param name="socketAsync">该数据包的通讯SOCKET</param> static void BinaryInputHandler(byte[] data, int offset, int count, SocketAsyncEventArgs socketAsync) { try { if (socketAsync.UserToken == null) //如果此SOCKET绑定的对象为NULL { //注意这里为了 简单 所以就绑定了个 ZYNetBufferReadStreamV2 类,本来这里应该绑定用户类对象, //并在用户类里面建立 初始化 一个 ZYNetBufferReadStreamV2 类,这样就能通过用户类保存更多的信息了。 //比如用户名,权限等等 socketAsync.UserToken = new ZYNetRingBufferPoolV2(4096000); } ZYNetRingBufferPoolV2 stream = socketAsync.UserToken as ZYNetRingBufferPoolV2; //最新的数据包整合类 stream.Write(data, offset, count); byte[] datax; while (stream.Read(out datax)) { DataOn(datax, socketAsync); } } catch (Exception er) { Console.WriteLine(er.ToString()); } }
static ZYNetRingBufferPoolV2 BufferPool = new ZYNetRingBufferPoolV2(4096); //128Bit static void Main(string[] args) { Task.Factory.StartNew(() => { while (true) { byte[] datax; while (BufferPool.Read(out datax)) { DataOn(datax); //打印数据包内容 } } }); for (int i = 0; i < 20000; i++) { BufferFormatV2 buff1 = new BufferFormatV2(i); buff1.AddItem("HHHHHHHHHHH"); byte[] data = buff1.Finish(); // byte[] pdata = new byte[1024]; // Buffer.BlockCopy(data, 0, pdata, 500, data.Length); // BufferPool.Write(data); foreach (var item in data) { BufferPool.Write(new byte[] { item }); } // BufferPool.Write(pdata, 500, data.Length); System.Threading.Thread.Sleep(1); } Console.WriteLine("Full Count:" + Lengt); Console.ReadLine(); }
/// <summary> /// 数据包输入 /// </summary> /// <param name="data">输入数据</param> /// <param name="socketAsync">该数据包的通讯SOCKET</param> void BinaryInputHandler(byte[] data, int offset, int count, SocketAsyncEventArgs socketAsync) { try { ZYNetRingBufferPoolV2 stream = socketAsync.UserToken as ZYNetRingBufferPoolV2; if (stream != null) { //最新的数据包整合类 stream.Write(data, offset, count); byte[] datax; while (stream.Read(out datax)) { LogOnPack(datax, socketAsync); } } else { UserManager userinfo = socketAsync.UserToken as UserManager; userinfo.Stream.Write(data, offset, count); byte[] datax; while (userinfo.Stream.Read(out datax)) { DataOn(datax, userinfo); } } } catch (Exception er) { AddLog(er.ToString()); server.Disconnect(socketAsync.AcceptSocket); } }