示例#1
0
        /// <summary>
        /// Put metadata to Grid.
        /// </summary>
        /// <param name="metas">Metadatas.</param>
        internal void PutMetadata(IDictionary <int, IPortableMetadata> metas)
        {
            DoOutOp(OpMeta, stream =>
            {
                PortableWriterImpl metaWriter = _marsh.StartMarshal(stream);

                metaWriter.WriteInt(metas.Count);

                foreach (var meta in metas.Values)
                {
                    PortableMetadataImpl meta0 = (PortableMetadataImpl)meta;

                    metaWriter.WriteInt(meta0.TypeId);
                    metaWriter.WriteString(meta0.TypeName);
                    metaWriter.WriteString(meta0.AffinityKeyFieldName);

                    IDictionary <string, int> fields = meta0.FieldsMap();

                    metaWriter.WriteInt(fields.Count);

                    foreach (var field in fields)
                    {
                        metaWriter.WriteString(field.Key);
                        metaWriter.WriteInt(field.Value);
                    }
                }

                _marsh.FinishMarshal(metaWriter);
            });

            _marsh.OnMetadataSent(metas);
        }