/// <summary> /// Reads map /// </summary> /// <param name="abstractHessianInput">HessianInput to read from</param> /// <returns>Read object or null</returns> public override object ReadMap(AbstractHessianInput abstractHessianInput) { var ds = new DataSet(); int refer = abstractHessianInput.AddRef(ds); while (!abstractHessianInput.IsEnd()) { var dt = new DataTable(); if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP) { abstractHessianInput.ReadType(); } dt.TableName = abstractHessianInput.ReadString(); while (!abstractHessianInput.IsEnd()) { var columnName = abstractHessianInput.ReadString(); var typeFullName = abstractHessianInput.ReadString(); var type = Type.GetType(typeFullName); dt.Columns.Add(new DataColumn(columnName, type)); } abstractHessianInput.ReadEnd(); if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP) { abstractHessianInput.ReadType(); } while (!abstractHessianInput.IsEnd()) { ArrayList objects = new ArrayList(); if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP) { abstractHessianInput.ReadType(); } while (!abstractHessianInput.IsEnd()) { var obj = abstractHessianInput.ReadObject(); objects.Add(obj); } abstractHessianInput.ReadEnd(); var row = dt.NewRow(); row.ItemArray = objects.ToArray(); dt.Rows.Add(row); } abstractHessianInput.ReadEnd(); ds.Tables.Add(dt); } abstractHessianInput.ReadEnd(); return(ds); }
/// <summary> /// Reads map from input /// </summary> /// <param name="abstractHessianInput">Input stream</param> /// <returns>Read map or null</returns> public override object ReadObject(AbstractHessianInput abstractHessianInput) { //Read map start int code = abstractHessianInput.ReadMapStart(); switch (code) { case CHessianProtocolConstants.PROT_NULL: return(null); case CHessianProtocolConstants.PROT_REF_TYPE: return(abstractHessianInput.ReadRef()); case 'r': throw new CHessianException("remote type is not implemented!"); } return(ReadMap(abstractHessianInput)); }