//缓存中有数据处理 void onData() { //解码消息存储对象 byte[] buff = null; //当粘包解码器存在的时候 进行粘包处理 if (LD != null) { buff = LD(ref cache); //消息未接收全 退出数据处理 等待下次消息到达 if (buff == null) { isReading = false; return; } } else { //缓存区中没有数据 直接跳出数据处理 等待下次消息到达 if (cache.Count == 0) { isReading = false; return; } buff = cache.ToArray(); cache.Clear(); } //进行消息反序列化 SocketModel message = MessageEncoding.Decode(buff); center.MessageReceive(this, message); onData(); }
//缓存中有数据处理 void OnData() { //长度解码 byte[] result = LengthEncoding.Decode(ref cache); //长度解码返回空 说明消息体不全,等待下条消息过来补全 if (result == null) { isReading = false; return; } SocketModel message = MessageEncoding.Decode(result) as SocketModel; if (message == null) { isReading = false; return; } //进行消息的处理 messages.Add(message); //尾递归 防止在消息处理过程中 有其他消息到达而没有经过处理 OnData(); }