예제 #1
0
        internal void Write(TextWriter writer)
        {
            writer.Write(MimeVersionPrefix);
            writer.WriteLine(MimeVersion);
            if (RootPart != null)
            {
                RootPart.Write(writer);
            }

            if (IsMultipart)
            {
                boundary = RootPart.ContentTypeParameters["boundary"];
                if (string.IsNullOrEmpty(boundary))
                {
                    Error("Missing 'boundary' parameter on root Content-Type");
                }

                foreach (MimePart part in Parts)
                {
                    writer.Write("--");
                    writer.WriteLine(boundary);
                    part.Write(writer);
                }

                // write terminator
                writer.Write("--");
                writer.Write(boundary);
                writer.WriteLine("--");
            }
        }
        /// <summary>
        ///		Flushes all parts in order
        /// </summary>
        public void Flush()
        {
            try
            {
                if (!Monitor.TryEnter(this))
                {
                    return;
                }

                foreach (var byteCounterStreamPart in Partials.ToArray())
                {
                    if (byteCounterStreamPart.State == ByteCounterStreamPartType.Closed)
                    {
                        using (var baseWriterBaseStream = byteCounterStreamPart.BaseStream())
                        {
                            baseWriterBaseStream.CopyTo(RootPart.BaseStream());
                        }
                    }
                    Partials.RemoveAt(0);
                }
            }
            finally
            {
                if (Monitor.IsEntered(this))
                {
                    Monitor.Exit(this);
                }
            }
        }
예제 #3
0
        public override void UpdateMovement()
        {
            float   cpu  = m_counter.NextValue() / 40f;
            Vector3 size = new Vector3(cpu, cpu, cpu);

            RootPart.Resize(size);

            base.UpdateMovement();
        }
예제 #4
0
        public void CompositionServiceFromRootSatisfiesRootImports(IContainer container)
        {
            var root = container.GetExportedValue <RootPart>();

            var myOwnRoot = new RootPart();

            root.CompositionService.SatisfyImportsOnce(myOwnRoot);
            Assert.NotNull(myOwnRoot.CompositionService);
            Assert.Same(root.AnotherRootPart, myOwnRoot.AnotherRootPart);
        }
        public void AggregatePerms()
        {
            lock (m_PermissionsLock)
            {
                // aux
                const uint allmask          = (uint)PermissionMask.AllEffective;
                const uint movemodmask      = (uint)(PermissionMask.Move | PermissionMask.Modify);
                const uint copytransfermast = (uint)(PermissionMask.Copy | PermissionMask.Transfer);

                uint basePerms      = (RootPart.BaseMask & allmask) | (uint)PermissionMask.Move;
                bool noBaseTransfer = (basePerms & (uint)PermissionMask.Transfer) == 0;

                uint rootOwnerPerms    = RootPart.OwnerMask;
                uint owner             = rootOwnerPerms;
                uint rootGroupPerms    = RootPart.GroupMask;
                uint group             = rootGroupPerms;
                uint rootEveryonePerms = RootPart.EveryoneMask;
                uint everyone          = rootEveryonePerms;

                bool needUpdate = false;
                // date is time of writing april 30th 2017
                bool newobj             = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
                SceneObjectPart[] parts = m_parts.GetArray();
                for (int i = 0; i < parts.Length; i++)
                {
                    SceneObjectPart part = parts[i];

                    if (m_DeepEffectivePermsInvalid)
                    {
                        part.AggregatedInnerPermsForGroup();
                    }

                    owner &= part.AggregatedInnerOwnerPerms;
                    group &= part.AggregatedInnerGroupPerms;
                    if (newobj)
                    {
                        group &= part.AggregatedInnerGroupPerms;
                    }
                    if (newobj)
                    {
                        everyone &= part.AggregatedInnerEveryonePerms;
                    }
                }
                // recover modify and move
                rootOwnerPerms &= movemodmask;
                owner          |= rootOwnerPerms;
                if ((owner & copytransfermast) == 0)
                {
                    owner |= (uint)PermissionMask.Transfer;
                }

                owner &= basePerms;
                if (owner != m_EffectiveOwnerPerms)
                {
                    needUpdate            = true;
                    m_EffectiveOwnerPerms = owner;
                }

                uint ownertransfermask = owner & (uint)PermissionMask.Transfer;

                // recover modify and move
                rootGroupPerms &= movemodmask;
                group          |= rootGroupPerms;
                if (noBaseTransfer)
                {
                    group &= ~(uint)PermissionMask.Copy;
                }
                else
                {
                    group |= ownertransfermask;
                }

                uint groupOrEveryone = group;
                uint tmpPerms        = group & owner;
                if (tmpPerms != m_EffectiveGroupPerms)
                {
                    needUpdate            = true;
                    m_EffectiveGroupPerms = tmpPerms;
                }

                // recover move
                rootEveryonePerms &= (uint)PermissionMask.Move;
                everyone          |= rootEveryonePerms;
                everyone          &= ~(uint)PermissionMask.Modify;
                if (noBaseTransfer)
                {
                    everyone &= ~(uint)PermissionMask.Copy;
                }
                else
                {
                    everyone |= ownertransfermask;
                }

                groupOrEveryone |= everyone;

                tmpPerms = everyone & owner;
                if (tmpPerms != m_EffectiveEveryOnePerms)
                {
                    needUpdate = true;
                    m_EffectiveEveryOnePerms = tmpPerms;
                }

                tmpPerms = groupOrEveryone & owner;
                if (tmpPerms != m_EffectiveGroupOrEveryOnePerms)
                {
                    needUpdate = true;
                    m_EffectiveGroupOrEveryOnePerms = tmpPerms;
                }

                m_DeepEffectivePermsInvalid = false;
                m_EffectivePermsInvalid     = false;

                if (needUpdate)
                {
                    RootPart.ScheduleFullUpdate();
                }
            }
        }
예제 #6
0
 public void ClearVehicleFlags(VehicleFlags value)
 {
     RootPart.ClearVehicleFlags(value);
 }
예제 #7
0
 public void SetVehicleFlags(VehicleFlags value)
 {
     RootPart.SetVehicleFlags(value);
 }
예제 #8
0
        public void ToXml(XmlTextWriter writer, UGUI nextOwner, Vector3 offsetpos, XmlSerializationOptions options = XmlSerializationOptions.None, bool writeOffsetPos = true)
        {
            List <ObjectPart> parts = Values;

            writer.WriteStartElement("SceneObjectGroup");
            if (writeOffsetPos)
            {
                Vector3 opos = Position - offsetpos;
                writer.WriteAttributeString("x", opos.X.ToString(System.Globalization.CultureInfo.InvariantCulture));
                writer.WriteAttributeString("y", opos.Y.ToString(System.Globalization.CultureInfo.InvariantCulture));
                writer.WriteAttributeString("z", opos.Z.ToString(System.Globalization.CultureInfo.InvariantCulture));
            }
            if ((options & XmlSerializationOptions.WriteXml2) == 0)
            {
                writer.WriteStartElement("RootPart");
            }
            RootPart.ToXml(writer, options);
            if ((options & XmlSerializationOptions.WriteXml2) == 0)
            {
                writer.WriteEndElement();
            }
            writer.WriteStartElement("OtherParts");
            foreach (ObjectPart p in parts)
            {
                if (p.ID != RootPart.ID)
                {
                    if ((options & XmlSerializationOptions.WriteXml2) == 0)
                    {
                        writer.WriteStartElement("Part");
                    }
                    p.ToXml(writer, nextOwner, options);
                    if ((options & XmlSerializationOptions.WriteXml2) == 0)
                    {
                        writer.WriteEndElement();
                    }
                }
            }
            writer.WriteEndElement();

            bool haveScriptState = false;

            foreach (ObjectPart p in parts)
            {
                foreach (ObjectPartInventoryItem i in p.Inventory.Values)
                {
                    IScriptState scriptState = i.ScriptState;
                    if (scriptState != null)
                    {
                        if (!haveScriptState)
                        {
                            writer.WriteStartElement("GroupScriptStates");
                            haveScriptState = true;
                        }

                        writer.WriteStartElement("SavedScriptState");
                        writer.WriteAttributeString("UUID", i.ID.ToString());

                        scriptState.ToXml(writer);

                        writer.WriteEndElement();
                    }
                }
            }
            if (haveScriptState)
            {
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
        }
 /// <inheritdoc />
 public void Write(string content)
 {
     RootPart.Write(content);
 }