Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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));
        }