Example #1
0
        /// <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());
            }
        }
Example #2
0
        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();
        }
Example #3
0
        /// <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);
            }
        }