Example #1
0
        /// <summary>
        /// 数据包输入
        /// </summary>
        /// <param name="data">输入数据</param>
        /// <param name="socketAsync">该数据包的通讯SOCKET</param>
        static void BinaryInputHandler(byte[] data, SocketAsyncEventArgs socketAsync)
        {
            if (socketAsync.UserToken == null) //如果用户第一次登入
            {
                ReadBytes read = new ReadBytes(data);

                int length;
                int cmd;

                if (read.ReadInt32(out length) && length == read.Length && read.ReadInt32(out cmd))
                {
                    if (!CmdToCallManager <ZYSocketSuper, int, ReadBytes, SocketAsyncEventArgs> .GetInstance().pointerRun(server, cmd, read, socketAsync)) //如果用户发送的是登入数据包
                    {
                        server.Disconnect(socketAsync.AcceptSocket);
                    }
                }
                else //无法读取数据包 断开连接
                {
                    server.Disconnect(socketAsync.AcceptSocket);
                }
            }
            else
            {
                User.UserInfo user = socketAsync.UserToken as User.UserInfo; //读取用户USERTRKEN

                if (user != null)
                {
                    if (user.BuffManger.Write(data)) //这里的 4表示 数据包长度是用4字节的整数存储的 Int
                    {
                        byte[] pdata;

                        while (user.BuffManger.Read(out pdata))
                        {
                            DataOn(pdata, socketAsync);
                        }
                    }
                }
            }
        }
Example #2
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);
            }
        }
Example #3
0
        /// <summary>
        /// 数据包输入
        /// </summary>
        /// <param name="data">输入数据</param>
        /// <param name="socketAsync">该数据包的通讯SOCKET</param>
        static void BinaryInputHandler(byte[] data, SocketAsyncEventArgs socketAsync)
        {
            try
            {
                ZYNetBufferReadStream stream = socketAsync.UserToken as ZYNetBufferReadStreamV2;

                if (stream != null)
                {
                    //最新的数据包整合类

                    stream.Write(data);

                    byte[] datax;
                    while (stream.Read(out datax))
                    {
                        LogOnPack(datax, socketAsync);
                    }
                }
                else
                {
                    UserManager userinfo = socketAsync.UserToken as UserManager;

                    userinfo.Stream.Write(data);

                    byte[] datax;
                    while (userinfo.Stream.Read(out datax))
                    {
                        DataOn(datax, userinfo);
                    }
                }
            }
            catch (Exception er)
            {
                Console.WriteLine(er.ToString());
                server.Disconnect(socketAsync.AcceptSocket);
            }
        }
Example #4
0
        /// <summary>
        /// 数据包输入
        /// </summary>
        /// <param name="data">输入数据</param>
        /// <param name="socketAsync">该数据包的通讯SOCKET</param>
        static void BinaryInputHandler(byte[] data, SocketAsyncEventArgs socketAsync)
        {
            if (socketAsync.UserToken == null) //如果用户第一次登入
            {
                ReadBytes read = new ReadBytes(data);

                int length;
                int cmd;

                if (read.ReadInt32(out length) && length == read.Length && read.ReadInt32(out cmd))
                {
                    if (cmd == 1000) //如果用户发送的是登入数据包
                    {
                        Login p;

                        if (read.ReadObject <Login>(out p))
                        {
                            if (p != null)
                            {
                                if (User.UserManger.GetUserDataManger().CheckUser(p.UserName, p.PassWord)) //检查用户名密码是否正确
                                {
                                    User.UserInfo user = new User.UserInfo()                               //建立一个新的用户对象 并且初始化 用户名
                                    {
                                        UserName = p.UserName
                                    };

                                    socketAsync.UserToken = user; //设置USERTOKEN

                                    Message err = new Message()   //初始化MESSAGE数据包类
                                    {
                                        Type       = 2,
                                        MessageStr = "登入成功"
                                    };

                                    server.SendData(socketAsync.AcceptSocket, BufferFormat.FormatFCA(err)); //发送此类

                                    Console.WriteLine(user.UserName + " 登入");
                                }
                                else
                                {
                                    Message err = new Message() //初始化用户名密码错误数据包
                                    {
                                        Type       = 1,
                                        MessageStr = "用户名或密码错误"
                                    };

                                    server.SendData(socketAsync.AcceptSocket, BufferFormat.FormatFCA(err));
                                }
                            }
                        }
                    }
                    else //现在还没登入 如果有其他命令的请求那么 断开连接
                    {
                        server.Disconnect(socketAsync.AcceptSocket);
                    }
                }
                else //无法读取数据包 断开连接
                {
                    server.Disconnect(socketAsync.AcceptSocket);
                }
            }
            else
            {
                User.UserInfo user = socketAsync.UserToken as User.UserInfo; //读取用户USERTRKEN

                if (user != null)
                {
                    user.BuffManger.Write(data);

                    byte[] pdata;
                    while (user.BuffManger.Read(out pdata))
                    {
                        DataOn(pdata, socketAsync);
                    }
                }
            }
        }