public override void OnMessage(USocket us, ByteBuf bb) { bb.ReaderIndex(us.getProtocal().HeaderLen()); short cmd = bb.ReadShort(); byte[] bs = bb.GetRaw(); Statics.SetXor(bs, bb.ReaderIndex()); MemoryStream stream = new MemoryStream(bs, bb.ReaderIndex(), bb.ReadableBytes()); object obj = ProtoBuf.Serializer.NonGeneric.Deserialize(MessageQueueHandler.GetProtocolType(cmd), stream); FieldInfo success = obj.GetType().GetField("success"); if (success != null) { if ((bool)success.GetValue(obj) == true) { MessageQueueHandler.PushQueue(cmd, obj); } else { FieldInfo info = obj.GetType().GetField("info"); if (info != null) { Debug.LogWarning("下行出错, cmd=" + cmd + ", type=" + MessageQueueHandler.GetProtocolType(cmd).ToString()); MessageQueueHandler.PushError(info.GetValue(obj).ToString()); } } } }
/** * */ public override void OnClose(USocket us, bool fromRemote) { MessageQueueHandler.PushError(fromRemote ? "与服务器连接已断开" : "关闭连接"); }