/// <summary> /// 处理请求的 /// </summary> /// <param name="requstCode"></param> /// <param name=""></param> public void HandleRequst(RequstCode requstCode, ActionCode actionCode, string data, Client client) { BassController controller; bool isGet = controllorDict.TryGetValue(requstCode, out controller); if (isGet == false) { Console.WriteLine("无法得到" + requstCode + "所对应的controller,无法处理请求"); return; } string methodName = Enum.GetName(typeof(ActionCode), actionCode); MethodInfo mi = controller.GetType().GetMethod(methodName); if (mi == null) { Console.WriteLine(controller.GetType() + "在controller没有对应的的处理方法" + methodName); } object[] parameters = new object[] { data, }; object o = mi.Invoke(controller, parameters); if (o == null || string.IsNullOrEmpty(o as string)) { return; } server.SendResponse(client, requstCode, o as string); }
/// <summary> /// 表示我门现在增加了多少数据 /// </summary> //public void AddCount(int count) //{ // _startIndex += count; //} /// <summary> /// 解析数据,newDataAmount新消息的数据 /// </summary> public void ReadMessage(int newDataAmount) { _startIndex += newDataAmount; while (true) { //首先数据长度大于4 if (_startIndex <= 4) { return; } //将byte数据转成值类型 int count = BitConverter.ToInt32(_data, 0); if (_startIndex - 4 >= count) { //Console.WriteLine(_startIndex); //Console.WriteLine(count); ////从第四个开始都数据,因为0-3为数据长度 //string s = Encoding.UTF8.GetString(_data, 4, count); //Console.WriteLine("解析出一条数据" + s); //解析数据前面的第一个枚举 RequstCode requstCode = (RequstCode)BitConverter.ToInt32(_data, 4); //解析数据前面的第二个枚举 ActionCode actionCode = (ActionCode)BitConverter.ToInt32(_data, 8); //解析数据 string s = Encoding.UTF8.GetString(_data, 12, count - 8); //将剩余的数据移动到前面,更新数据,第一个参数是要复制的数组,第二个是说从什么位置开始复制,第三个是说复制到一个新的数组,第四个说从0开始,第5个是说数组的长度 Array.Copy(_data, count + 4, _data, 0, _startIndex - 4 - count);; _startIndex -= (count + 4); } else { break; } } }
public void HandleRequst(RequstCode requstCode, ActionCode actionCode, string data, Client client) { }
public void SendResponse(Client client, RequstCode requstCode, string data) { //给客户端响应 }