Beispiel #1
0
        void DataOn(byte[] data, UserManager e)
        {
           
                //建立一个读取数据包的类 参数是数据包
                //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用
                ReadBytesV2 read = new ReadBytesV2(data);

                int lengt; //数据包长度,用于验证数据包的完整性
                int cmd; //数据包命令类型

                //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
                if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
                {  //read.Read系列函数是不会产生异常的

                    PACKTYPE cmdType = (PACKTYPE)cmd;

                    //根据命令读取数据包
                    switch (cmdType)
                    {
                        case PACKTYPE.Data:
                            {
                                DATA tmp;

                                if (read.ReadObject<DATA>(out tmp))
                                {
                                    LogOut(e.UserName + "数据命令:" + tmp.CMD);

                                    switch (tmp.CMD)
                                    {
                                        case "GET":
                                            {
                                                DATARES _var1 = new DATARES()
                                                {
                                                    Type = 1,
                                                    Res = new List<string>()
                                                };

                                                _var1.Res.Add("数据1");
                                                _var1.Res.Add("数据2");
                                                _var1.Res.Add("数据3");
                                                _var1.Res.Add("数据4");
                                                _var1.Res.Add("数据5");

                                                

                                                server.SendData(e.Asyn.AcceptSocket, BufferFormatV2.FormatFCA(_var1));
                                            }
                                            break;

                                    }
                                }

                            }
                            break;
                    }

                }

          
        }
Beispiel #2
0
        void LogOnPack(byte[] data, SocketAsyncEventArgs asyn)
        {
            ReadBytesV2 read = new ReadBytesV2(data);

            int lengt; //数据包长度,用于验证数据包的完整性
            int cmd; //数据包命令类型

            //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
            if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
            {  //read.Read系列函数是不会产生异常的

                //根据命令读取数据包
                PACKTYPE cmdType=(PACKTYPE)cmd;

                switch (cmdType)
                {
                    case PACKTYPE.LogOn:
                        {
                            LOGON _logon;

                            if (read.ReadObject<LOGON>(out _logon))
                            {
                                //DOTO:验证用户

                                LogOut(_logon.username + "  登入成功");

                                UserManager tmp = new UserManager()
                                {
                                    Asyn=asyn,
                                    Stream = new ZYNetRingBufferPoolV2(),
                                    UserName=_logon.username
                                };

                                asyn.UserToken = tmp;

                                userlist.Add(tmp);


                                LOGONRES senddata = new LOGONRES()
                                {
                                    IsLogOn=true,
                                    Msg="登入成功"
                                };

                                server.SendData(asyn.AcceptSocket, BufferFormatV2.FormatFCA(senddata));

                            }
                        }
                        break;
                }

            }

        }