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; } } }
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; } } }