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